diff --git a/Customizations/AllKnownLayouts.ts b/Customizations/AllKnownLayouts.ts
index cc4f2fb71..b5165c4ef 100644
--- a/Customizations/AllKnownLayouts.ts
+++ b/Customizations/AllKnownLayouts.ts
@@ -1,22 +1,32 @@
-import {Groen} from "./Layouts/Groen";
-import {Toilets} from "./Layouts/Toilets";
-import {GRB} from "./Layouts/GRB";
-import {Statues} from "./Layouts/Statues";
-import {Bookcases} from "./Layouts/Bookcases";
+import { Groen } from "./Layouts/Groen";
+import { Toilets } from "./Layouts/Toilets";
+import { GRB } from "./Layouts/GRB";
+import { Statues } from "./Layouts/Statues";
+import { Bookcases } from "./Layouts/Bookcases";
import Cyclofix from "./Layouts/Cyclofix";
-import {All} from "./Layouts/All";
-import {Layout} from "./Layout";
+import { WalkByBrussels } from "./Layouts/WalkByBrussels";
+import { All } from "./Layouts/All";
+import { Layout } from "./Layout";
+import {MetaMap} from "./Layouts/MetaMap";
+import {Widths} from "./Layers/Widths";
+import {StreetWidth} from "./Layouts/StreetWidth";
+import {NatureReserves} from "./Layers/NatureReserves";
+import {Natuurpunt} from "./Layouts/Natuurpunt";
export class AllKnownLayouts {
public static allSets = AllKnownLayouts.AllLayouts();
private static AllLayouts(): Map {
const all = new All();
- const layouts : Layout[] = [
+ const layouts: Layout[] = [
new Groen(),
new GRB(),
new Cyclofix(),
new Bookcases(),
+ new WalkByBrussels(),
+ new MetaMap(),
+ new StreetWidth(),
+ new Natuurpunt(),
all
/*new Toilets(),
new Statues(),
@@ -29,4 +39,13 @@ export class AllKnownLayouts {
}
return allSets;
}
+
+ public static GetSets(layoutNames): any {
+ const all = new All();
+ for (const name of layoutNames) {
+ all.layers = all.layers.concat(AllKnownLayouts.allSets[name].layers);
+ }
+
+ return all;
+ }
}
diff --git a/Customizations/LayerDefinition.ts b/Customizations/LayerDefinition.ts
index 14f9b401b..1065f43fb 100644
--- a/Customizations/LayerDefinition.ts
+++ b/Customizations/LayerDefinition.ts
@@ -56,7 +56,16 @@ export class LayerDefinition {
*/
elementsToShow: TagDependantUIElementConstructor[];
- style: (tags: any) => { color: string, icon: any };
+ /**
+ * A simple styling for the geojson element
+ * color is the color for areas and ways
+ * icon is the Leaflet icon
+ * Note that this is passed entirely to leaflet, so other leaflet attributes work too
+ */
+ style: (tags: any) => {
+ color: string,
+ icon: any,
+ };
/**
* If an object of the next layer is contained for this many percent in this feature, it is eaten and not shown
@@ -64,6 +73,36 @@ export class LayerDefinition {
maxAllowedOverlapPercentage: number = undefined;
+ constructor(options: {
+ name: string,
+ newElementTags: Tag[],
+ icon: string,
+ minzoom: number,
+ overpassFilter: TagsFilter,
+ title?: TagRenderingOptions,
+ elementsToShow?: TagDependantUIElementConstructor[],
+ maxAllowedOverlapPercentage?: number,
+ style?: (tags: any) => {
+ color: string,
+ icon: any
+ }
+ } = undefined) {
+ if (options === undefined) {
+ console.log("No options!")
+ return;
+ }
+ this.name = options.name;
+ this.maxAllowedOverlapPercentage = options.maxAllowedOverlapPercentage ?? 0;
+ this.newElementTags = options.newElementTags;
+ this.icon = options.icon;
+ this.minzoom = options.minzoom;
+ this.overpassFilter = options.overpassFilter;
+ this.title = options.title;
+ this.elementsToShow = options.elementsToShow;
+ this.style = options.style;
+ console.log(this)
+ }
+
asLayer(basemap: Basemap, allElements: ElementStorage, changes: Changes, userDetails: UIEventSource, selectedElement: UIEventSource,
showOnPopup: (tags: UIEventSource<(any)>) => UIElement):
FilteredLayer {
diff --git a/Customizations/Layers/BikeParkings.ts b/Customizations/Layers/BikeParkings.ts
index 141ba2946..4b707291a 100644
--- a/Customizations/Layers/BikeParkings.ts
+++ b/Customizations/Layers/BikeParkings.ts
@@ -39,7 +39,8 @@ export default class BikeParkings extends LayerDefinition {
color: "#00bb00",
icon: L.icon({
iconUrl: self.icon,
- iconSize: [50, 50]
+ iconSize: [50, 50],
+ iconAnchor: [25,50]
})
};
};
diff --git a/Customizations/Layers/BikeShop.ts b/Customizations/Layers/BikeShop.ts
new file mode 100644
index 000000000..3e4413ad6
--- /dev/null
+++ b/Customizations/Layers/BikeShop.ts
@@ -0,0 +1,112 @@
+import {TagRenderingOptions} from "../TagRendering";
+import {LayerDefinition} from "../LayerDefinition";
+import {Tag} from "../../Logic/TagsFilter";
+import L from "leaflet";
+import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
+import {NameQuestion} from "../Questions/NameQuestion";
+
+export class BikeShop extends LayerDefinition {
+
+
+ private readonly sellsBikes = new Tag("service:bicycle:retail", "yes");
+ private readonly repairsBikes = new Tag("service:bicycle:repair", "yes");
+
+ constructor() {
+ super(
+ {
+ name: "bike shop or repair",
+ icon: "assets/bike/repair_shop.svg",
+ minzoom: 14,
+ overpassFilter: new Tag("shop", "bicycle"),
+ newElementTags: [new Tag("shop", "bicycle")]
+ }
+ );
+
+ this.title = new TagRenderingOptions({
+ mappings: [
+ {k: this.sellsBikes, txt: "Bicycle shop"},
+ {k: new Tag("service:bicycle:retail", "no"), txt: "Bicycle repair"},
+ {k: new Tag("service:bicycle:retail", ""), txt: "Bicycle repair/shop"},
+ ]
+ })
+
+
+ this.elementsToShow = [
+ new ImageCarouselWithUploadConstructor(),
+ new TagRenderingOptions({
+ question: "What is the name of this bicycle shop?",
+ freeform: {
+ key: "name",
+ renderTemplate: "The name of this bicycle shop is {name}",
+ template: "The name of this bicycle shop is $$$"
+ }
+ }),
+
+ new TagRenderingOptions({
+ question: "Can one buy a bike here?",
+ mappings: [
+ {k: this.sellsBikes, txt: "Bikes are sold here"},
+ {k: new Tag("service:bicycle:retail", "no"), txt: "No bikes are sold here"},
+ ]
+ }),
+
+ new TagRenderingOptions({
+ question: "Can one buy a new bike here?",
+ mappings: [
+ {k: new Tag("service:bicycle:second_hand", "yes"), txt: "Second-hand bikes are sold here"},
+ {k: new Tag("service:bicycle:second_hand", "only"), txt: "All bicycles sold here are second-hand"},
+ {k: new Tag("service:bicycle:second_hand", "no"), txt: "Only brand new bikes are sold here"},
+ ]
+ }).OnlyShowIf(this.sellsBikes),
+
+
+ new TagRenderingOptions({
+ question: "Does this shop repair bicycles?",
+ mappings: [
+ {k: this.repairsBikes, txt: "Bikes are repaired here, by the shop owner (for a fee)"},
+ {k: new Tag("service:bicycle:repair", "only_sold"), txt: "Only bikes that were bought here, are repaired"},
+ {k: new Tag("service:bicycle:repair", "brand"), txt: "Only bikes of a fixed brand are repaired here"},
+ {k: new Tag("service:bicycle:repair", "no"), txt: "Bikes are not repaired here"},
+ ]
+ }),
+
+ new TagRenderingOptions({
+ question: "Can one hire a new bike here?",
+ mappings: [
+ {k: new Tag("service:bicycle:rental", "yes"), txt: "Bikes can be rented here"},
+ {k: new Tag("service:bicycle:rental", "no"), txt: "Bikes cannot be rented here"},
+ ]
+ }).OnlyShowIf(this.sellsBikes),
+
+ new TagRenderingOptions({
+ question: "Are there tools here so that one can repair their own bike?",
+ mappings: [
+ {k: new Tag("service:bicycle:diy", "yes"), txt: "Tools for DIY are available here"},
+ {k: new Tag("service:bicycle:diy", "no"), txt: "No tools for DIY are available here"},
+ ]
+ }),
+ ]
+
+
+ this.style = (tags) => {
+ let icon = "assets/bike/repair_shop.svg";
+
+ if (this.sellsBikes.matchesProperties(tags)) {
+ icon = "assets/bike/shop.svg";
+ }
+
+ return {
+ color: "#ff0000",
+ icon: L.icon({
+ iconUrl: icon,
+ iconSize: [50, 50],
+ iconAnchor: [25, 50]
+ })
+ }
+ }
+
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/Customizations/Layers/BikeStations.ts b/Customizations/Layers/BikeStations.ts
index 65b43f03f..ac3210cb5 100644
--- a/Customizations/Layers/BikeStations.ts
+++ b/Customizations/Layers/BikeStations.ts
@@ -18,7 +18,7 @@ import Translations from "../../UI/i18n/Translations";
export default class BikeStations extends LayerDefinition {
private readonly pump = new Tag("service:bicycle:pump", "yes");
private readonly pumpOperationalAny = new Tag("service:bicycle:pump:operational_status", "yes");
- private readonly pumpOperationalOk = new Or([new Tag("service:bicycle:pump:operational_status", "yes"), new Tag("service:bicycle:pump:operational_status", "operational"), new Tag("service:bicycle:pump:operational_status", "ok")]);
+ private readonly pumpOperationalOk = new Or([new Tag("service:bicycle:pump:operational_status", "yes"), new Tag("service:bicycle:pump:operational_status", "operational"), new Tag("service:bicycle:pump:operational_status", "ok"), new Tag("service:bicycle:pump:operational_status", "")]);
private readonly tools = new Tag("service:bicycle:tools", "yes");
constructor() {
@@ -32,7 +32,6 @@ export default class BikeStations extends LayerDefinition {
this.newElementTags = [
new Tag("amenity", "bicycle_repair_station")
- // new Tag("fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")
];
this.maxAllowedOverlapPercentage = 10;
@@ -61,7 +60,7 @@ export default class BikeStations extends LayerDefinition {
const self = this;
return function (properties: any) {
const hasPump = self.pump.matchesProperties(properties)
- const isOperational = !self.pumpOperationalAny.matchesProperties(properties) || self.pumpOperationalOk.matchesProperties(properties)
+ const isOperational = self.pumpOperationalOk.matchesProperties(properties)
const hasTools = self.tools.matchesProperties(properties)
let iconName = ""
if (hasPump) {
@@ -75,14 +74,19 @@ export default class BikeStations extends LayerDefinition {
}
}
} else {
- iconName = "repair_station.svg"
+ if (!self.pump.matchesProperties(properties)) {
+ iconName = "repair_station.svg"
+ } else {
+ iconName = "repair_station.svg"
+ }
}
const iconUrl = `./assets/bike/${iconName}`
return {
color: "#00bb00",
icon: L.icon({
iconUrl: iconUrl,
- iconSize: [50, 50]
+ iconSize: [50, 50],
+ iconAnchor: [25,50]
})
};
};
diff --git a/Customizations/Layers/Birdhide.ts b/Customizations/Layers/Birdhide.ts
new file mode 100644
index 000000000..52ce7743a
--- /dev/null
+++ b/Customizations/Layers/Birdhide.ts
@@ -0,0 +1,146 @@
+import {LayerDefinition} from "../LayerDefinition";
+import {And, Or, Tag} from "../../Logic/TagsFilter";
+import {TagRenderingOptions} from "../TagRendering";
+import FixedText from "../Questions/FixedText";
+import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
+import L from "leaflet";
+
+export class Birdhide extends LayerDefinition {
+
+ private static readonly birdhide = new Tag("leisure", "bird_hide");
+
+
+ constructor() {
+ super({
+ name: "vogelkijkplaats",
+ overpassFilter: Birdhide.birdhide,
+ elementsToShow: [new FixedText("hi")],
+ icon: "assets/nature/birdhide.svg",
+ minzoom: 12,
+ newElementTags: [Birdhide.birdhide],
+ style(tags: any): { color: string; icon: any } {
+ return {color: "", icon: undefined};
+ },
+ });
+
+ function rmStart(toRemove: string, title: string): string {
+ if (title.toLowerCase().indexOf(toRemove.toLowerCase()) == 0) {
+ return title.substr(toRemove.length).trim();
+ }
+ return title;
+
+ }
+
+ function rmStarts(toRemove: string[], title: string) {
+ for (const toRm of toRemove) {
+ title = rmStart(toRm, title);
+ }
+ return title;
+ }
+
+ this.title = new TagRenderingOptions({
+ tagsPreprocessor: (tags) => {
+ if (tags.name) {
+ const nm =
+ rmStarts(
+ ["Vogelkijkhut", "Vogelkijkwand", "Kijkwand", "Kijkhut"],
+ tags.name);
+
+ tags.name = " '" + nm + "'";
+ } else {
+ tags.name = "";
+ }
+ },
+ mappings: [
+ {
+ k: new And([new Tag("shelter", "no"), new Tag("building", "")]),
+ txt: "Vogelkijkwand{name}"
+ },
+ {
+ k: new And([new Tag("amenity", "shelter"), new Tag("building", "yes")]),
+ txt: "Vogelijkhut{name}"
+ },
+ {
+ k: new Tag("amenity", "shelter"),
+ txt: "Vogelijkhut{name}"
+ },
+ {
+ k: new Tag("building", "yes"),
+ txt: "Vogelijkhut{name}"
+ },
+ {k: null, txt: "Vogelkijkplaats{name}"}
+ ]
+ });
+
+
+ this.style = (properties) => {
+ let icon = "assets/nature/birdhide.svg";
+ if (new Or([new Tag("amenity", "shelter"), new Tag("building", "yes"), new Tag("shelter", "yes")]).matchesProperties(properties)) {
+ icon = "assets/nature/birdshelter.svg";
+ }
+
+ return {
+ color: "#0000bb",
+ icon: L.icon({
+ iconUrl: icon,
+ iconSize: [40,40],
+ iconAnchor: [20,20]
+ })
+ }
+ }
+
+
+ this.elementsToShow = [
+ new ImageCarouselWithUploadConstructor(),
+
+ new TagRenderingOptions({
+ question: "Is dit een kijkwand of kijkhut?",
+ mappings: [
+ {
+ k: new And([new Tag("shelter", "no"), new Tag("building", ""), new Tag("amenity", "")]),
+ txt: "Vogelkijkwand"
+ },
+ {
+ k: new And([new Tag("amenity", "shelter"), new Tag("building", "yes"), new Tag("shelter", "yes")]),
+ txt: "Vogelijkhut"
+ }
+ ]
+ }),
+ new TagRenderingOptions({
+ question: "Is ze rolstoeltoegankelijk?",
+ mappings: [
+ {
+ k: new Tag("wheelchair", "no"),
+ txt: "Niet rolstoeltoegankelijk"
+ },
+ {
+ k: new Tag("wheelchair", "limited"),
+ txt: "Een rolstoel raakt er, maar het is niet makkelijk"
+ },
+ {
+ k: new Tag("wheelchair", "yes"),
+ txt: "Een rolstoel raakt er gemakkelijk"
+ }
+ ]
+ }),
+
+ new TagRenderingOptions({
+ question: "Wie beheert deze?",
+ freeform: {
+ key: "operator",
+ template: "Beheer door $$$",
+ renderTemplate: "Beheer door {operator}",
+ placeholder: "organisatie"
+ },
+ mappings: [
+ {k: new Tag("operator", "Natuurpunt"), txt: "Natuurpunt"},
+ {k: new Tag("operator", "Agentschap Natuur en Bos"), txt: "het Agentschap Natuur en Bos (ANB)"},
+
+ ]
+ })
+
+
+ ];
+
+ }
+}
\ No newline at end of file
diff --git a/Customizations/Layers/Bookcases.ts b/Customizations/Layers/Bookcases.ts
index 52e0b86e0..25953f44c 100644
--- a/Customizations/Layers/Bookcases.ts
+++ b/Customizations/Layers/Bookcases.ts
@@ -5,6 +5,7 @@ import {QuestionDefinition} from "../../Logic/Question";
import {TagRenderingOptions} from "../TagRendering";
import {NameInline} from "../Questions/NameInline";
import {NameQuestion} from "../Questions/NameQuestion";
+import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
export class Bookcases extends LayerDefinition {
@@ -19,7 +20,7 @@ export class Bookcases extends LayerDefinition {
this.title = new NameInline("ruilboekenkastje");
this.elementsToShow = [
-
+ new ImageCarouselWithUploadConstructor(),
new TagRenderingOptions({
question: "Heeft dit boekenruilkastje een naam?",
freeform: {
diff --git a/Customizations/Layers/DrinkingWater.ts b/Customizations/Layers/DrinkingWater.ts
new file mode 100644
index 000000000..7bdd63240
--- /dev/null
+++ b/Customizations/Layers/DrinkingWater.ts
@@ -0,0 +1,62 @@
+import {LayerDefinition} from "../LayerDefinition";
+import {And, Or, Tag} from "../../Logic/TagsFilter";
+import {OperatorTag} from "../Questions/OperatorTag";
+import * as L from "leaflet";
+import FixedText from "../Questions/FixedText";
+import {TagRenderingOptions} from "../TagRendering";
+import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
+
+export class DrinkingWater extends LayerDefinition {
+
+ constructor() {
+ super();
+ this.name = "drinking water";
+ this.icon = "./assets/bike/drinking_water.svg";
+
+ this.overpassFilter = new Or([
+ new And([
+ new Tag("amenity", "drinking_water")
+ ])
+ ]);
+
+
+ this.newElementTags = [
+ new Tag("amenity", "drinking_water"),
+ ];
+ this.maxAllowedOverlapPercentage = 10;
+
+ this.minzoom = 13;
+ this.style = this.generateStyleFunction();
+ this.title = new FixedText("Drinking water");
+ this.elementsToShow = [
+ new OperatorTag(),
+ ];
+ this.elementsToShow = [
+ new ImageCarouselWithUploadConstructor(),
+ new TagRenderingOptions({
+ question: "How easy is it to fill water bottles?",
+ mappings: [
+ { k: new Tag("bottle", "yes"), txt: "It is easy to refill water bottles" },
+ { k: new Tag("bottle", "no"), txt: "Water bottles may not fit" }
+ ],
+ })];
+
+ }
+
+
+ private generateStyleFunction() {
+ const self = this;
+ return function (properties: any) {
+
+ return {
+ color: "#00bb00",
+ icon: new L.icon({
+ iconUrl: self.icon,
+ iconSize: [50, 50],
+ iconAnchor: [25,50]
+ })
+ };
+ };
+ }
+
+}
\ No newline at end of file
diff --git a/Customizations/Layers/GrbToFix.ts b/Customizations/Layers/GrbToFix.ts
index d008f2f9a..5c7fcf9ba 100644
--- a/Customizations/Layers/GrbToFix.ts
+++ b/Customizations/Layers/GrbToFix.ts
@@ -52,19 +52,13 @@ export class GrbToFix extends LayerDefinition {
question: "Wat is het huisnummer?",
tagsPreprocessor: tags => {
- const newTags = {};
- newTags["addr:housenumber"] = tags["addr:housenumber"]
- newTags["addr:street"] = tags["addr:street"]
-
const telltale = "GRB thinks that this has number ";
const index = tags.fixme.indexOf(telltale);
if (index >= 0) {
const housenumber = tags.fixme.slice(index + telltale.length);
- newTags["grb:housenumber:human"] = housenumber;
- newTags["grb:housenumber"] = housenumber == "no number" ? "" : housenumber;
+ tags["grb:housenumber:human"] = housenumber;
+ tags["grb:housenumber"] = housenumber == "no number" ? "" : housenumber;
}
-
- return newTags;
},
freeform: {
key: "addr:housenumber",
diff --git a/Customizations/Layers/InformationBoard.ts b/Customizations/Layers/InformationBoard.ts
new file mode 100644
index 000000000..240e9e16f
--- /dev/null
+++ b/Customizations/Layers/InformationBoard.ts
@@ -0,0 +1,117 @@
+import {LayerDefinition} from "../LayerDefinition";
+import FixedText from "../Questions/FixedText";
+import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
+import {TagRenderingOptions} from "../TagRendering";
+import {And, Tag} from "../../Logic/TagsFilter";
+import L from "leaflet";
+
+export class InformationBoard extends LayerDefinition {
+ constructor() {
+ super({
+ name: "Informatiebord",
+ minzoom: 12,
+ overpassFilter: new Tag("tourism", "information"),
+ newElementTags: [new Tag("tourism", "information")],
+ maxAllowedOverlapPercentage: 0,
+ icon: "assets/nature/info.png",
+ });
+
+ const isMap = new Tag("information", "map");
+ const isOsmSource = new Tag("map_source", "OpenStreetMap");
+
+ this.title = new TagRenderingOptions({
+ mappings: [
+ {k: isMap, txt: "Kaart"},
+ {k:null, txt: "Informatiebord"}
+ ]
+ });
+
+ this.style = (properties) => {
+ let icon = "assets/nature/info.png";
+ if (isMap.matchesProperties(properties)) {
+ icon = "assets/map.svg";
+ if (isOsmSource.matchesProperties(properties)) {
+ icon = "assets/osm-logo-white-bg.svg";
+
+ const attr = properties["map_source:attribution"];
+ if (attr == "sticker") {
+ icon = "assets/map-stickered.svg"
+ } else if (attr == "no") {
+ icon = "assets/osm-logo-buggy-attr.svg"
+ }
+ }
+ }
+
+ return {
+ color: "#000000",
+ icon: L.icon(
+ {
+ iconUrl: icon,
+ iconSize: [50, 50]
+ }
+ )
+ };
+ }
+
+
+ this.elementsToShow = [
+
+ new ImageCarouselWithUploadConstructor(),
+
+ new TagRenderingOptions({
+ question: "Heeft dit informatiebord een kaart?",
+ mappings: [
+ {k: new Tag("information","board"), txt: "Dit is een informatiebord"},
+ {k: isMap, txt: "Dit is een kaart"}
+ ]
+ }),
+
+ new TagRenderingOptions({
+ question: "Is this map based on OpenStreetMap?",
+ mappings: [
+ {
+ k: isOsmSource,
+ txt: "This map is based on OpenStreetMap"
+ },
+ {
+ k: new And([new Tag("map_source:attribution", ""), new Tag("map_source","")]),
+ txt: "Unknown"
+ },
+ ],
+ freeform: {
+ key: "map_source",
+ extraTags: new Tag("map_source:attribution", ""),
+ renderTemplate: "The map data is based on {map_source}",
+ template: "The map data is based on $$$"
+ }
+ }).OnlyShowIf(isMap),
+ new TagRenderingOptions({
+ question: "Is the attribution present?",
+ mappings: [
+ {
+ k: new Tag("map_source:attribution", "yes"),
+ txt: "OpenStreetMap is clearly attribute, including the ODBL-license"
+ },
+ {
+ k: new Tag("map_source:attribution", "incomplete"),
+ txt: "OpenStreetMap is clearly attribute, but the license is not mentioned"
+ },
+ {
+ k: new Tag("map_source:attribution", "sticker"),
+ txt: "OpenStreetMap wasn't mentioned, but someone put an OpenStreetMap-sticker on it"
+ },
+ {
+ k: new Tag("map_source:attribution", "no"),
+ txt: "There is no attribution at all"
+ },
+ {
+ k: new Tag("map_source:attribution", "none"),
+ txt: "There is no attribution at all"
+ }
+ ]
+ }).OnlyShowIf(new Tag("map_source", "OpenStreetMap"))
+ ]
+
+
+ }
+}
\ No newline at end of file
diff --git a/Customizations/Layers/Map.ts b/Customizations/Layers/Map.ts
new file mode 100644
index 000000000..aeadf2920
--- /dev/null
+++ b/Customizations/Layers/Map.ts
@@ -0,0 +1,96 @@
+import {LayerDefinition} from "../LayerDefinition";
+import FixedText from "../Questions/FixedText";
+import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWithUpload";
+import {TagRenderingOptions} from "../TagRendering";
+import {And, Tag} from "../../Logic/TagsFilter";
+import L from "leaflet";
+
+export class Map extends LayerDefinition {
+ constructor() {
+ super();
+ this.name = "Map";
+ this.title = new FixedText("Map");
+ this.minzoom = 12;
+
+ this.overpassFilter = new Tag("information", "map");
+ this.newElementTags = [new Tag("tourism", "information"), new Tag("information", "map")];
+
+
+ const isOsmSource = new Tag("map_source", "OpenStreetMap");
+
+
+
+ this.style = (properties) => {
+ let icon = "assets/map.svg";
+ if(isOsmSource.matchesProperties(properties)){
+ icon = "assets/osm-logo-white-bg.svg";
+
+ const attr = properties["map_source:attribution"];
+ if(attr == "sticker"){
+ icon = "assets/map-stickered.svg"
+ }else if(attr == "no"){
+ icon = "assets/osm-logo-buggy-attr.svg"
+ }
+
+ }
+
+ return {
+ color: "#000000",
+ icon: L.icon(
+ {
+ iconUrl: icon,
+ iconSize: [50, 50]
+ }
+ )
+ };
+ }
+
+
+ this.elementsToShow = [
+
+ new ImageCarouselWithUploadConstructor(),
+
+ new TagRenderingOptions({
+ question: "Is this map based on OpenStreetMap?",
+ mappings: [
+ {
+ k: isOsmSource,
+ txt: "This map is based on OpenStreetMap"
+ },
+ ],
+ freeform: {
+ key: "map_source",
+ renderTemplate: "The map data is based on {map_source}",
+ template: "The map data is based on $$$"
+ }
+ }),
+ new TagRenderingOptions({
+ question: "Is the attribution present?",
+ mappings: [
+ {
+ k: new Tag("map_source:attribution", "yes"),
+ txt: "OpenStreetMap is clearly attribute, including the ODBL-license"
+ },
+ {
+ k: new Tag("map_source:attribution", "incomplete"),
+ txt: "OpenStreetMap is clearly attribute, but the license is not mentioned"
+ },
+ {
+ k: new Tag("map_source:attribution", "sticker"),
+ txt: "OpenStreetMap wasn't mentioned, but someone put an OpenStreetMap-sticker on it"
+ },
+ {
+ k: new Tag("map_source:attribution", "no"),
+ txt: "There is no attribution at all"
+ },
+ {
+ k: new Tag("map_source:attribution", "none"),
+ txt: "There is no attribution at all"
+ }
+ ]
+ }).OnlyShowIf(new Tag("map_source", "OpenStreetMap"))
+ ]
+
+
+ }
+}
\ No newline at end of file
diff --git a/Customizations/Layers/NatureReserves.ts b/Customizations/Layers/NatureReserves.ts
index 5d492922e..6adde3134 100644
--- a/Customizations/Layers/NatureReserves.ts
+++ b/Customizations/Layers/NatureReserves.ts
@@ -10,18 +10,18 @@ import {ImageCarouselWithUploadConstructor} from "../../UI/Image/ImageCarouselWi
export class NatureReserves extends LayerDefinition {
- constructor() {
+ constructor(moreQuests: boolean = false) {
super();
this.name = "natuurgebied";
this.icon = "./assets/tree_white_background.svg";
this.overpassFilter =
- new Or([new Tag("leisure", "nature_reserve"), new Tag("boundary","protected_area")]);
+ new Or([new Tag("leisure", "nature_reserve"), new Tag("boundary", "protected_area")]);
this.maxAllowedOverlapPercentage = 10;
this.newElementTags = [new Tag("leisure", "nature_reserve"),
new Tag("fixme", "Toegevoegd met MapComplete, geometry nog uit te tekenen")]
this.minzoom = 13;
- this.title = new NameInline("natuurreservaat");
+ this.title = new NameInline("natuurreservaat");
this.style = this.generateStyleFunction();
this.elementsToShow = [
new ImageCarouselWithUploadConstructor(),
@@ -30,6 +30,67 @@ export class NatureReserves extends LayerDefinition {
new OperatorTag(),
new DescriptionQuestion("natuurgebied")
];
+
+
+ const extraRenderings = [
+ new TagRenderingOptions({
+ question: "Mogen honden in dit natuurgebied?",
+ mappings: [
+ {k: new Tag("dog", "leashed"), txt: "Honden moeten aan de leiband"},
+ {k: new Tag("dog", "no"), txt: "Honden zijn niet toegestaan"},
+ {k: new Tag("dog", "yes"), txt: "Honden zijn welkom"},
+ ]
+ }).OnlyShowIf(new Tag("access", "yes")),
+ new TagRenderingOptions({
+ question: "Op welke website kunnen we meer informatie vinden over dit natuurgebied?",
+ freeform: {
+ key:"website",
+ renderTemplate: "Meer informatie ",
+ template: "$$$"
+ }
+ }),
+ new TagRenderingOptions({
+ question: "Wie is de conservator van dit gebied? " +
+ "Geef de naam van de conservator énkel als die duidelijk online staat gepubliceerd. ",
+ freeform: {
+ renderTemplate: "De conservator van dit gebied is {curator}",
+ template: "$$$",
+ key: "curator"
+ }
+ }),
+ new TagRenderingOptions(
+ {
+ question: "Wat is het email-adres van de beheerder? " +
+ "Geef bij voorkeur het emailadres van de Natuurpunt-afdeling; geef enkel een email-adres van de conservator als dit duidelijk is gepubliceerd ",
+ freeform: {
+ renderTemplate: "Bij problemen of vragen, de conservator kan bereikt worden via " +
+ "{email} ",
+ template: "$$$",
+ key: "email"
+ }
+ }),
+ new TagRenderingOptions(
+ {
+ question: "Wat is het telefoonnummer van de beheerder? " +
+ "Geef bij voorkeur het telefoonnummer van de Natuurpunt-afdeling; geef enkel een email-adres van de conservator als dit duidelijk is gepubliceerd ",
+ freeform: {
+ renderTemplate: "Bij problemen of vragen, de {conservator} kan bereikt worden via " +
+ "{phone} ",
+ template: "$$$",
+ key: "phone"
+ }
+
+ }),
+
+
+ ];
+
+ if (moreQuests) {
+ this.elementsToShow =
+ this.elementsToShow.concat(extraRenderings);
+ }
+
+
}
diff --git a/Customizations/Layers/Widths.ts b/Customizations/Layers/Widths.ts
new file mode 100644
index 000000000..6589399a0
--- /dev/null
+++ b/Customizations/Layers/Widths.ts
@@ -0,0 +1,309 @@
+import {LayerDefinition} from "../LayerDefinition";
+import {And, Not, Or, Tag} from "../../Logic/TagsFilter";
+import {TagRenderingOptions} from "../TagRendering";
+import {UIEventSource} from "../../UI/UIEventSource";
+import {Park} from "./Park";
+
+export class Widths extends LayerDefinition {
+
+ private cyclistWidth: number;
+ private carWidth: number;
+ private pedestrianWidth: number;
+
+ private readonly _bothSideParking = new Tag("parking:lane:both", "parallel");
+ private readonly _noSideParking = new Tag("parking:lane:both", "no_parking");
+ private readonly _otherParkingMode =
+ new Or([
+ new Tag("parking:lane:both", "perpendicular"),
+ new Tag("parking:lane:left", "perpendicular"),
+ new Tag("parking:lane:right", "perpendicular"),
+ new Tag("parking:lane:both", "diagonal"),
+ new Tag("parking:lane:left", "diagonal"),
+ new Tag("parking:lane:right", "diagonal"),
+ ])
+
+
+ private readonly _leftSideParking =
+ new And([new Tag("parking:lane:left", "parallel"), new Tag("parking:lane:right", "no_parking")]);
+ private readonly _rightSideParking =
+ new And([new Tag("parking:lane:right", "parallel"), new Tag("parking:lane:left", "no_parking")]);
+
+
+ private _sidewalkBoth = new Tag("sidewalk", "both");
+ private _sidewalkLeft = new Tag("sidewalk", "left");
+ private _sidewalkRight = new Tag("sidewalk", "right");
+ private _sidewalkNone = new Tag("sidewalk", "none");
+
+
+ private readonly _oneSideParking = new Or([this._leftSideParking, this._rightSideParking]);
+
+ private readonly _carfree = new Or([new Tag("highway", "pedestrian"), new Tag("highway", "living_street")])
+ private readonly _notCarFree = new Not(this._carfree);
+
+ private calcProps(properties) {
+ let parkingStateKnown = true;
+ let parallelParkingCount = 0;
+
+ if (this._oneSideParking.matchesProperties(properties)) {
+ parallelParkingCount = 1;
+ } else if (this._bothSideParking.matchesProperties(properties)) {
+ parallelParkingCount = 2;
+ } else if (this._noSideParking.matchesProperties(properties)) {
+ parallelParkingCount = 0;
+ } else if (this._otherParkingMode.matchesProperties(properties)) {
+ parallelParkingCount = 0;
+ } else {
+ parkingStateKnown = false;
+ console.log("No parking data for ", properties.name, properties.id, properties)
+ }
+
+
+ let pedestrianFlowNeeded = 0;
+
+ if (this._sidewalkBoth.matchesProperties(properties)) {
+ pedestrianFlowNeeded = 0;
+ } else if (this._sidewalkNone.matchesProperties(properties)) {
+ pedestrianFlowNeeded = 2;
+ } else if (this._sidewalkLeft.matchesProperties(properties) || this._sidewalkRight.matches(properties)) {
+ pedestrianFlowNeeded = 1;
+ } else {
+ pedestrianFlowNeeded = -1;
+ }
+
+
+ let onewayCar = properties.oneway === "yes";
+ let onewayBike = properties["oneway:bicycle"] === "yes" ||
+ (onewayCar && properties["oneway:bicycle"] === undefined)
+
+ let cyclingAllowed =
+ !(properties.bicycle === "use_sidepath"
+ || properties.bicycle === "no");
+
+ let carWidth = (onewayCar ? 1 : 2) * this.carWidth;
+ let cyclistWidth = 0;
+ if (cyclingAllowed) {
+ cyclistWidth = (onewayBike ? 1 : 2) * this.cyclistWidth;
+ }
+
+ const width = parseFloat(properties["width:carriageway"]);
+
+
+ const targetWidth =
+ carWidth +
+ cyclistWidth +
+ Math.max(0, pedestrianFlowNeeded) * this.pedestrianWidth +
+ parallelParkingCount * this.carWidth;
+
+ return {
+ parkingLanes: parallelParkingCount,
+ parkingStateKnown: parkingStateKnown,
+ width: width,
+ targetWidth: targetWidth,
+ onewayBike: onewayBike,
+ pedestrianFlowNeeded: pedestrianFlowNeeded,
+ cyclingAllowed: cyclingAllowed
+ }
+ }
+
+
+ constructor(carWidth: number,
+ cyclistWidth: number,
+ pedestrianWidth: number) {
+ super();
+ this.carWidth = carWidth;
+ this.cyclistWidth = cyclistWidth;
+ this.pedestrianWidth = pedestrianWidth;
+ this.minzoom = 12;
+
+ function r(n: number) {
+ const pre = Math.floor(n);
+ const post = Math.floor((n * 10) % 10);
+ return "" + pre + "." + post;
+ }
+
+ this.name = "widths";
+ this.overpassFilter = new Tag("width:carriageway", "*");
+
+ this.title = new TagRenderingOptions({
+ freeform: {
+ renderTemplate: "{name}",
+ template: "$$$",
+ key: "name"
+ }
+ })
+
+ const self = this;
+ this.style = (properties) => {
+
+ let c = "#f00";
+
+
+ const props = self.calcProps(properties);
+ if (props.pedestrianFlowNeeded > 0) {
+ c = "#fa0"
+ }
+ if (props.width >= props.targetWidth || !props.cyclingAllowed) {
+ c = "#0c0";
+ }
+
+ if (!props.parkingStateKnown && properties["note:width:carriageway"] === undefined) {
+ c = "#f0f"
+ }
+
+ if (this._carfree.matchesProperties(properties)) {
+ c = "#aaa";
+ }
+
+
+ // Mark probably wrong data
+ if (props.width > 15) {
+ c = "#f0f"
+ }
+
+ let dashArray = undefined;
+ if (props.onewayBike) {
+ dashArray = [20, 8]
+ }
+ return {
+ icon: null,
+ color: c,
+ weight: 7,
+ dashArray: dashArray
+ }
+ }
+
+ this.elementsToShow = [
+ new TagRenderingOptions({
+ question: "Mogen auto's hier parkeren?",
+ mappings: [
+ {
+ k: this._bothSideParking,
+ txt: "Auto's kunnen langs beide zijden parkeren. Dit gebruikt " + r(this.carWidth * 2) + "m "
+ },
+ {
+ k: this._oneSideParking,
+ txt: "Auto's kunnen langs één kant parkeren. Dit gebruikt " + r(this.carWidth) + "m "
+ },
+ {
+ k: this._otherParkingMode,
+ txt: "Deze straat heeft dwarsparkeren of diagonaalparkeren aan minstens één zijde. Deze parkeerruimte is niet opgenomen in de straatbreedte."
+ },
+ {k: this._noSideParking, txt: "Auto's mogen hier niet parkeren"},
+ // {k: null, txt: "Nog geen parkeerinformatie bekend"}
+ ],
+ freeform: {
+ key: "note:width:carriageway",
+ renderTemplate: "{note:width:carriageway}",
+ template: "$$$",
+ }
+ }).OnlyShowIf(this._notCarFree),
+
+
+ new TagRenderingOptions({
+ mappings: [
+ {
+ k: this._sidewalkNone,
+ txt: "Deze straat heeft geen voetpaden. Voetgangers hebben hier " + r(this.pedestrianWidth * 2) + "m nodig"
+ },
+ {
+ k: new Or([this._sidewalkLeft, this._sidewalkRight]),
+ txt: "Deze straat heeft een voetpad aan één kant. Voetgangers hebben hier " + r(this.pedestrianWidth) + "m nodig"
+ },
+ {k: this._sidewalkBoth, txt: "Deze straat heeft voetpad aan beide zijden."},
+ ],
+ freeform: {
+ key: "note:width:carriageway",
+ renderTemplate: "{note:width:carriageway}",
+ template: "$$$",
+ }
+ }).OnlyShowIf(this._notCarFree),
+
+
+ new TagRenderingOptions({
+ mappings: [
+ {
+ k: new Tag("bicycle", "use_sidepath"),
+ txt: "Er is een afgescheiden, verplicht te gebruiken fietspad. Fietsen op dit wegsegment hoeft dus niet"
+ },
+ {
+ k: new Tag("bicycle", "no"),
+ txt: "Fietsen is hier niet toegestaan"
+ },
+ {
+ k: new Tag("oneway:bicycle", "yes"),
+ txt: "Eenrichtingsverkeer, óók voor fietsers. Dit gebruikt " + r(this.carWidth + this.cyclistWidth) + "m "
+ },
+ {
+ k: new And([new Tag("oneway", "yes"), new Tag("oneway:bicycle", "no")]),
+ txt: "Tweerichtingverkeer voor fietsers, eenrichting voor auto's Dit gebruikt " + r(this.carWidth + 2 * this.cyclistWidth) + "m "
+ },
+ {
+ k: new Tag("oneway", "yes"),
+ txt: "Eenrichtingsverkeer voor iedereen. Dit gebruikt " + (this.carWidth + this.cyclistWidth) + "m "
+ },
+ {
+ k: null,
+ txt: "Tweerichtingsverkeer voor iedereen. Dit gebruikt " + r(2 * this.carWidth + 2 * this.cyclistWidth) + "m "
+ }
+ ]
+ }).OnlyShowIf(this._notCarFree),
+
+ new TagRenderingOptions(
+ {
+ tagsPreprocessor: (tags) => {
+ const props = self.calcProps(tags);
+ tags.targetWidth = r(props.targetWidth);
+ tags.short = "";
+ if (props.width < props.targetWidth) {
+ tags.short = "Er is dus " + r(props.targetWidth - props.width) + "m te weinig"
+ }
+ },
+ freeform: {
+ key: "width:carriageway",
+ renderTemplate: "De totale nodige ruimte voor vlot en veilig verkeer is dus {targetWidth}m " +
+ "{short}",
+ template: "$$$",
+ }
+ }
+ ).OnlyShowIf(this._notCarFree),
+
+
+ new TagRenderingOptions({
+ mappings: [
+ {k:new Tag("highway","living_street"),txt: "Dit is een woonerf"},
+ {k:new Tag("highway","pedestrian"),txt: "Deze weg is autovrij"}
+ ]
+ }),
+
+ new TagRenderingOptions({
+ mappings: [
+ {
+ k: new Tag("sidewalk", "none"),
+ txt: "De afstand van huis tot huis is {width:carriageway}m "
+ },
+ {
+ k: new Tag("sidewalk", "left"),
+ txt: "De afstand van huis tot voetpad is {width:carriageway}m "
+ },
+ {
+ k: new Tag("sidewalk", "right"),
+ txt: "De afstand van huis tot voetpad is {width:carriageway}m "
+ },
+ {
+ k: new Tag("sidewalk", "both"),
+ txt: "De afstand van voetpad tot voetpad is {width:carriageway}m "
+ },
+ {
+ k: new Tag("sidewalk", ""),
+ txt: "De straatbreedte is {width:carriageway}m "
+ }
+
+ ]
+ })
+
+
+ ]
+
+ }
+
+}
\ No newline at end of file
diff --git a/Customizations/Layouts/Cyclofix.ts b/Customizations/Layouts/Cyclofix.ts
index 9c9148b49..e1b40c450 100644
--- a/Customizations/Layouts/Cyclofix.ts
+++ b/Customizations/Layouts/Cyclofix.ts
@@ -4,6 +4,8 @@ import BikeServices from "../Layers/BikeStations";
import BikeShops from "../Layers/BikeShops";
import {GhostBike} from "../Layers/GhostBike";
import Translations from "../../UI/i18n/Translations";
+import {DrinkingWater} from "../Layers/DrinkingWater";
+import {BikeShop} from "../Layers/BikeShop";
export default class Cyclofix extends Layout {
@@ -11,7 +13,7 @@ export default class Cyclofix extends Layout {
super(
"pomp",
Translations.t.cylofix.title,
- [/*new GhostBike(),*/ new BikeServices(), new BikeParkings(), new BikeShops],
+ [/*new GhostBike(),*/ new BikeServices(), new BikeParkings(), new BikeShops(), new DrinkingWater()],
16,
50.8465573,
4.3516970,
diff --git a/Customizations/Layouts/MetaMap.ts b/Customizations/Layouts/MetaMap.ts
new file mode 100644
index 000000000..8302f985d
--- /dev/null
+++ b/Customizations/Layouts/MetaMap.ts
@@ -0,0 +1,18 @@
+import {Layout} from "../Layout";
+import * as Layer from "../Layers/Bookcases";
+import {Map} from "../Layers/Map";
+
+export class MetaMap extends Layout{
+ constructor() {
+ super( "metamap",
+ "Open Map Map",
+ [new Map()],
+ 1,
+ 0,
+ 0,
+
+
+ " Open Map Map \n" +
+ "This map is a map of physical maps, as known by OpenStreetMap.");
+ }
+}
\ No newline at end of file
diff --git a/Customizations/Layouts/Natuurpunt.ts b/Customizations/Layouts/Natuurpunt.ts
new file mode 100644
index 000000000..8216fcb7e
--- /dev/null
+++ b/Customizations/Layouts/Natuurpunt.ts
@@ -0,0 +1,20 @@
+import {Layout} from "../Layout";
+import {Birdhide} from "../Layers/Birdhide";
+import {InformationBoard} from "../Layers/InformationBoard";
+import {NatureReserves} from "../Layers/NatureReserves";
+
+export class Natuurpunt extends Layout{
+ constructor() {
+ super(
+ "natuurpunt",
+ "De natuur in",
+ [new Birdhide(), new InformationBoard(), new NatureReserves(true)],
+ 12,
+ 51.20875,
+ 3.22435,
+ "Natuurpuntstuff ",
+ "",
+ ""
+ );
+ }
+}
\ No newline at end of file
diff --git a/Customizations/Layouts/StreetWidth.ts b/Customizations/Layouts/StreetWidth.ts
new file mode 100644
index 000000000..f93e8a1ad
--- /dev/null
+++ b/Customizations/Layouts/StreetWidth.ts
@@ -0,0 +1,35 @@
+import {Layout} from "../Layout";
+import * as Layer from "../Layers/Bookcases";
+import {Widths} from "../Layers/Widths";
+import {UIEventSource} from "../../UI/UIEventSource";
+
+export class StreetWidth extends Layout{
+
+ constructor() {
+ super( "width",
+ "Straatbreedtes in Brugge",
+ [new Widths(
+ 2,
+ 1.5,
+ 0.75
+
+ )],
+ 15,
+ 51.20875,
+ 3.22435,
+ "De straat is opgebruikt " +
+ "Er is steeds meer druk op de openbare ruimte. Voetgangers, fietsers, steps, auto's, bussen, bestelwagens, buggies, cargobikes, ... willen allemaal hun deel van de openbare ruimte.
" +
+ "" +
+ "In deze studie nemen we Brugge onder de loep en kijken we hoe breed elke straat is én hoe breed elke straat zou moeten zijn voor een veilig én vlot verkeer.
" +
+ "Verschillende ingrepen kunnen de stad teruggeven aan de inwoners en de stad leefbaarder en levendiger maken. " +
+ "Denk aan:" +
+ "" +
+ "De autovrije zone's uitbreiden " +
+ "De binnenstad fietszone maken " +
+ "Het aantal woonerven uitbreiden " +
+ "Grotere auto's meer belasten - ze nemen immers meer parkeerruimte in. " +
+ " ",
+ "",
+ "");
+ }
+}
\ No newline at end of file
diff --git a/Customizations/Layouts/WalkByBrussels.ts b/Customizations/Layouts/WalkByBrussels.ts
new file mode 100644
index 000000000..ca8fdc4b4
--- /dev/null
+++ b/Customizations/Layouts/WalkByBrussels.ts
@@ -0,0 +1,28 @@
+import { Layout } from "../Layout";
+import { DrinkingWater } from "../Layers/DrinkingWater";
+import { NatureReserves } from "../Layers/NatureReserves";
+import { Park } from "../Layers/Park";
+
+export class WalkByBrussels extends Layout {
+ constructor() {
+ super("walkbybrussels",
+ "Drinking Water Spots",
+ [new DrinkingWater(), new Park(), new NatureReserves()],
+ 10,
+ 50.8435,
+ 4.3688,
+
+
+ " Drinking water \n" +
+ "\n" +
+ "" +
+ "Help with creating a map of drinking water points!"
+
+ ,
+ "
Start by creating an account\n" +
+ " or by " +
+ " logging in .
",
+ "Start by clicking a pin and answering the questions");
+ }
+
+}
\ No newline at end of file
diff --git a/Customizations/OnlyShowIf.ts b/Customizations/OnlyShowIf.ts
index c6f6eafa9..4d629f0f7 100644
--- a/Customizations/OnlyShowIf.ts
+++ b/Customizations/OnlyShowIf.ts
@@ -17,9 +17,9 @@ export class OnlyShowIfConstructor implements TagDependantUIElementConstructor{
this._embedded = embedded;
}
- construct(tags: UIEventSource, changes: Changes): TagDependantUIElement {
- return new OnlyShowIf(tags,
- this._embedded.construct(tags, changes),
+ construct(dependencies): TagDependantUIElement {
+ return new OnlyShowIf(dependencies.tags,
+ this._embedded.construct(dependencies),
this._tagsFilter);
}
diff --git a/Customizations/Questions/WikipediaLink.ts b/Customizations/Questions/WikipediaLink.ts
index 03be61e46..7d9087c00 100644
--- a/Customizations/Questions/WikipediaLink.ts
+++ b/Customizations/Questions/WikipediaLink.ts
@@ -4,6 +4,9 @@ import {TagRenderingOptions} from "../TagRendering";
export class WikipediaLink extends TagRenderingOptions {
private static FixLink(value: string): string {
+ if (value === undefined) {
+ return undefined;
+ }
// @ts-ignore
if (value.startsWith("https")) {
return value;
@@ -20,6 +23,11 @@ export class WikipediaLink extends TagRenderingOptions {
static options = {
priority: 10,
// question: "Wat is het overeenstemmende wkipedia-artikel?",
+ tagsPreprocessor: (tags) => {
+ if (tags.wikipedia !== undefined) {
+ tags.wikipedia = WikipediaLink.FixLink(tags.wikipedia);
+ }
+ },
freeform: {
key: "wikipedia",
template: "$$$",
@@ -28,19 +36,8 @@ export class WikipediaLink extends TagRenderingOptions {
"" +
" " +
" ",
- placeholder: "",
- tagsPreprocessor: (tags) => {
+ placeholder: ""
- const newTags = {};
- for (const k in tags) {
- if (k === "wikipedia") {
- newTags["wikipedia"] = WikipediaLink.FixLink(tags[k]);
- } else {
- newTags[k] = tags[k];
- }
- }
- return newTags;
- }
},
}
diff --git a/Customizations/TagRendering.ts b/Customizations/TagRendering.ts
index 60b071372..bee4c805f 100644
--- a/Customizations/TagRendering.ts
+++ b/Customizations/TagRendering.ts
@@ -80,14 +80,15 @@ export class TagRenderingOptions implements TagDependantUIElementConstructor {
/**
* In some very rare cases, tags have to be rewritten before displaying
- * This function adds this
+ * This function can be used for that.
+ * This function is ran on a _copy_ of the original properties
*/
- tagsPreprocessor?: ((tags: any) => any)
+ tagsPreprocessor?: ((tags: any) => void)
}) {
this.options = options;
}
-
- OnlyShowIf(tagsFilter: TagsFilter) : TagDependantUIElementConstructor{
+
+ OnlyShowIf(tagsFilter: TagsFilter): TagDependantUIElementConstructor {
return new OnlyShowIfConstructor(tagsFilter, this);
}
@@ -111,8 +112,8 @@ export class TagRenderingOptions implements TagDependantUIElementConstructor {
}
- construct(tags: UIEventSource, changes: Changes): TagDependantUIElement {
- return new TagRendering(tags, changes, this.options);
+ construct(dependencies: { tags: UIEventSource, changes: Changes }): TagDependantUIElement {
+ return new TagRendering(dependencies.tags, dependencies.changes, this.options);
}
IsKnown(properties: any): boolean {
@@ -183,11 +184,22 @@ class TagRendering extends UIElement implements TagDependantUIElement {
this._userDetails = changes.login.userDetails;
this.ListenTo(this._userDetails);
-
+
this._question = options.question;
this._priority = options.priority ?? 0;
this._primer = options.primer ?? "";
- this._tagsPreprocessor = options.tagsPreprocessor;
+ this._tagsPreprocessor = function (properties) {
+ if (options.tagsPreprocessor === undefined) {
+ return properties;
+ }
+ const newTags = {};
+ for (const k in properties) {
+ newTags[k] = properties[k];
+ }
+ options.tagsPreprocessor(newTags);
+ return newTags;
+ };
+
this._mapping = [];
this._renderMapping = [];
this._freeform = options.freeform;
@@ -313,9 +325,9 @@ class TagRendering extends UIElement implements TagDependantUIElement {
const cancelContents = this._editMode.map((isEditing) => {
if (isEditing) {
- return "Annuleren ";
+ return "Cancel ";
} else {
- return "Overslaan (Ik weet het niet zeker...) ";
+ return "Skip this question ";
}
});
// And at last, set up the skip button
@@ -325,12 +337,7 @@ class TagRendering extends UIElement implements TagDependantUIElement {
}
private ApplyTemplate(template: string): string {
- let tags = this._source.data;
- if (this._tagsPreprocessor !== undefined) {
- tags = this._tagsPreprocessor(tags);
- }
-
-
+ const tags = this._tagsPreprocessor(this._source.data);
return TagUtils.ApplyTemplate(template, tags);
}
diff --git a/Customizations/UIElementConstructor.ts b/Customizations/UIElementConstructor.ts
index d90ce0cdd..61f16ae54 100644
--- a/Customizations/UIElementConstructor.ts
+++ b/Customizations/UIElementConstructor.ts
@@ -5,7 +5,7 @@ import {UIElement} from "../UI/UIElement";
export interface TagDependantUIElementConstructor {
- construct(tags: UIEventSource, changes: Changes): TagDependantUIElement;
+ construct(dependencies: {tags: UIEventSource, changes: Changes}): TagDependantUIElement;
IsKnown(properties: any): boolean;
IsQuestioning(properties: any): boolean;
Priority(): number;
diff --git a/Logic/Changes.ts b/Logic/Changes.ts
index de58a769c..e0dd9ce8d 100644
--- a/Logic/Changes.ts
+++ b/Logic/Changes.ts
@@ -117,7 +117,7 @@ console.log("Received change",key, value)
return geojson;
}
- public uploadAll(optionalContinuation: (() => void)) {
+ public uploadAll(optionalContinuation: (() => void) = undefined) {
const self = this;
this.isSaving.setData(true);
diff --git a/Logic/FilteredLayer.ts b/Logic/FilteredLayer.ts
index 6ee431b0c..76a9d9c2f 100644
--- a/Logic/FilteredLayer.ts
+++ b/Logic/FilteredLayer.ts
@@ -1,11 +1,11 @@
-import {Basemap} from "./Basemap";
-import {TagsFilter, TagUtils} from "./TagsFilter";
-import {UIEventSource} from "../UI/UIEventSource";
-import {ElementStorage} from "./ElementStorage";
-import {Changes} from "./Changes";
+import { Basemap } from "./Basemap";
+import { TagsFilter, TagUtils } from "./TagsFilter";
+import { UIEventSource } from "../UI/UIEventSource";
+import { ElementStorage } from "./ElementStorage";
+import { Changes } from "./Changes";
import L from "leaflet"
-import {GeoOperations} from "./GeoOperations";
-import {UIElement} from "../UI/UIElement";
+import { GeoOperations } from "./GeoOperations";
+import { UIElement } from "../UI/UIElement";
/***
* A filtered layer is a layer which offers a 'set-data' function
@@ -20,6 +20,7 @@ export class FilteredLayer {
public readonly name: string;
public readonly filters: TagsFilter;
+ public readonly isDisplayed: UIEventSource = new UIEventSource(true);
private readonly _map: Basemap;
private readonly _maxAllowedOverlap: number;
@@ -65,6 +66,16 @@ export class FilteredLayer {
this._style = style;
this._storage = storage;
this._maxAllowedOverlap = maxAllowedOverlap;
+ const self = this;
+ this.isDisplayed.addCallback(function (isDisplayed) {
+ if (self._geolayer !== undefined && self._geolayer !== null) {
+ if (isDisplayed) {
+ self._geolayer.addTo(self._map.map);
+ } else {
+ self._map.map.removeLayer(self._geolayer);
+ }
+ }
+ })
}
@@ -93,7 +104,7 @@ export class FilteredLayer {
const notShadowed = [];
for (const feature of leftoverFeatures) {
- if (this._maxAllowedOverlap !== undefined && this._maxAllowedOverlap >= 0) {
+ if (this._maxAllowedOverlap !== undefined && this._maxAllowedOverlap > 0) {
if (GeoOperations.featureIsContainedInAny(feature, selfFeatures, this._maxAllowedOverlap)) {
// This feature is filtered away
continue;
@@ -164,7 +175,7 @@ export class FilteredLayer {
radius: 25,
color: style.color
});
-
+
} else {
marker = L.marker(latLng, {
icon: style.icon
@@ -204,7 +215,9 @@ export class FilteredLayer {
}
});
- this._geolayer.addTo(this._map.map);
+ if (this.isDisplayed.data) {
+ this._geolayer.addTo(this._map.map);
+ }
}
diff --git a/Logic/OsmConnection.ts b/Logic/OsmConnection.ts
index 66a4719d3..648d9bbb5 100644
--- a/Logic/OsmConnection.ts
+++ b/Logic/OsmConnection.ts
@@ -123,11 +123,12 @@ export class OsmConnection {
public preferenceSources : any = {}
public GetPreference(key: string) : UIEventSource{
- if(this.preferenceSources[key] !== undefined){
+ if (this.preferenceSources[key] !== undefined) {
return this.preferenceSources[key];
}
- this.UpdatePreferences();
- console.log("Getting preference object", key, "currently upstreamed as ",this.preferences.data[key] );
+ if (this.userDetails.data.loggedIn) {
+ this.UpdatePreferences();
+ }
const pref = new UIEventSource(this.preferences.data[key]);
pref.addCallback((v) => {
this.SetPreference(key, v);
diff --git a/Logic/StrayClickHandler.ts b/Logic/StrayClickHandler.ts
index 85ccc9d7b..89acbccea 100644
--- a/Logic/StrayClickHandler.ts
+++ b/Logic/StrayClickHandler.ts
@@ -32,15 +32,16 @@ export class StrayClickHandler {
self._lastMarker = L.marker([lastClick.lat, lastClick.lon]);
const uiElement = uiToShow();
const popup = L.popup().setContent(uiElement.Render());
- uiElement.Activate();
uiElement.Update();
+ uiElement.Activate();
self._lastMarker.addTo(map);
self._lastMarker.bindPopup(popup).openPopup();
self._lastMarker.on("click", () => {
leftMessage.setData(self._uiToShow);
});
-
+ uiElement.Update();
+ uiElement.Activate();
});
selectElement.addCallback(() => {
diff --git a/Logic/TagsFilter.ts b/Logic/TagsFilter.ts
index dec52ac64..aaeaf124d 100644
--- a/Logic/TagsFilter.ts
+++ b/Logic/TagsFilter.ts
@@ -25,6 +25,10 @@ export class Regex extends TagsFilter {
}
matches(tags: { k: string; v: string }[]): boolean {
+ if(!(tags instanceof Array)){
+ throw "You used 'matches' on something that is not a list. Did you mean to use 'matchesProperties'?"
+ }
+
for (const tag of tags) {
if (tag.k === this._k) {
if (tag.v === "") {
@@ -201,6 +205,28 @@ export class And extends TagsFilter {
}
}
+export class Not extends TagsFilter{
+ private not: TagsFilter;
+
+ constructor(not: TagsFilter) {
+ super();
+ this.not = not;
+ }
+
+ asOverpass(): string[] {
+ throw "Not supported yet"
+ }
+
+ matches(tags: { k: string; v: string }[]): boolean {
+ return !this.not.matches(tags);
+ }
+
+ substituteValues(tags: any): TagsFilter {
+ return new Not(this.not.substituteValues(tags));
+ }
+
+}
+
export class TagUtils {
diff --git a/README.md b/README.md
index 9994bee2e..4ca29f4ce 100644
--- a/README.md
+++ b/README.md
@@ -20,6 +20,7 @@ Furthermore, it shows images present in the `image` tag or, if a `wikidata` or `
- [Buurtnatuur.be](http://buurntatuur.be), developed for the Belgian [Green party](https://www.groen.be/). They also funded the initial development!
- [Cyclofix](https://pietervdvn.github.io/MapComplete/index.html?quests=pomp), further development on [Open Summer of Code](https://summerofcode.be/) funded by [Brussels Mobility](https://mobilite-mobiliteit.brussels/en)
- [Bookcases](https://pietervdvn.github.io/MapComplete/index.html?quests=bookcases#element) cause I like to collect them.
+- [Map of Maps](https://pietervdvn.github.io/MapComplete/index.html?layout=metamap#element), after a tweet
Have a theme idea? Drop it in the [issues](https://github.com/pietervdvn/MapComplete/issues)
diff --git a/UI/Base/CheckBox.ts b/UI/Base/CheckBox.ts
new file mode 100644
index 000000000..9cdb21e8f
--- /dev/null
+++ b/UI/Base/CheckBox.ts
@@ -0,0 +1,19 @@
+import {UIElement} from "../UIElement";
+import {UIEventSource} from "../UIEventSource";
+
+
+export class CheckBox extends UIElement{
+ private data: UIEventSource;
+
+ constructor(data: UIEventSource) {
+ super(data);
+ this.data = data;
+
+ }
+
+
+ protected InnerRender(): string {
+ return "Current val: "+this.data.data;
+ }
+
+}
\ No newline at end of file
diff --git a/UI/Base/VerticalCombine.ts b/UI/Base/VerticalCombine.ts
index 2174a90e7..82d2f3d53 100644
--- a/UI/Base/VerticalCombine.ts
+++ b/UI/Base/VerticalCombine.ts
@@ -25,16 +25,4 @@ export class VerticalCombine extends UIElement {
}
return "" + html + "
";
}
- InnerUpdate(htmlElement: HTMLElement) {
- for (const element of this._elements){
- element.Update();
- }
- }
-
- Activate() {
- for (const element of this._elements){
- element.Activate();
- }
- }
-
}
\ No newline at end of file
diff --git a/UI/CenterMessageBox.ts b/UI/CenterMessageBox.ts
index 19c5d1a66..af1020cf0 100644
--- a/UI/CenterMessageBox.ts
+++ b/UI/CenterMessageBox.ts
@@ -40,11 +40,10 @@ export class CenterMessageBox extends UIElement {
if (this._centermessage.data != "") {
return this._centermessage.data;
}
-
- if (this._zoomInMore.data) {
- return Translations.t.centerMessage.zoomIn.txt;
- } else if (this._queryRunning.data) {
+ if (this._queryRunning.data) {
return Translations.t.centerMessage.loadingData.txt;
+ } else if (this._zoomInMore.data) {
+ return Translations.t.centerMessage.zoomIn.txt;
}
return Translations.t.centerMessage.ready.txt;
}
diff --git a/UI/FeatureInfoBox.ts b/UI/FeatureInfoBox.ts
index 2c7832c13..441c63a1c 100644
--- a/UI/FeatureInfoBox.ts
+++ b/UI/FeatureInfoBox.ts
@@ -41,12 +41,13 @@ export class FeatureInfoBox extends UIElement {
this._userDetails = userDetails;
this.ListenTo(userDetails);
+ const deps = {tags:this._tagsES , changes:this._changes}
this._infoboxes = [];
elementsToShow = elementsToShow ?? []
for (const tagRenderingOption of elementsToShow) {
this._infoboxes.push(
- tagRenderingOption.construct(this._tagsES, this._changes));
+ tagRenderingOption.construct(deps));
}
title = title ?? new TagRenderingOptions(
@@ -55,9 +56,9 @@ export class FeatureInfoBox extends UIElement {
}
)
- this._title = new TagRenderingOptions(title.options).construct(this._tagsES, this._changes);
- this._osmLink =new OsmLink().construct(this._tagsES, this._changes);
- this._wikipedialink = new WikipediaLink().construct(this._tagsES, this._changes);
+ this._title = new TagRenderingOptions(title.options).construct(deps);
+ this._osmLink =new OsmLink().construct(deps);
+ this._wikipedialink = new WikipediaLink().construct(deps);
}
@@ -113,19 +114,5 @@ export class FeatureInfoBox extends UIElement {
"" +
"";
}
-
- Activate() {
- super.Activate();
- for (const infobox of this._infoboxes) {
- infobox.Activate();
- }
- }
-
- Update() {
- super.Update();
- this._title.Update();
- for (const infobox of this._infoboxes) {
- infobox.Update();
- }
- }
+
}
diff --git a/UI/Image/ImageCarousel.ts b/UI/Image/ImageCarousel.ts
index 9d4e1fd00..b3f40d8c5 100644
--- a/UI/Image/ImageCarousel.ts
+++ b/UI/Image/ImageCarousel.ts
@@ -23,10 +23,10 @@ export class ImageCarouselConstructor implements TagDependantUIElementConstructo
return 0;
}
- construct(tags: UIEventSource, changes: Changes): TagDependantUIElement {
- return new ImageCarousel(tags, changes);
+ construct(dependencies: { tags: UIEventSource, changes: Changes }): TagDependantUIElement {
+ return new ImageCarousel(dependencies.tags, dependencies.changes);
}
-
+
}
export class ImageCarousel extends TagDependantUIElement {
diff --git a/UI/Image/ImageCarouselWithUpload.ts b/UI/Image/ImageCarouselWithUpload.ts
index 231044aae..38ebe206f 100644
--- a/UI/Image/ImageCarouselWithUpload.ts
+++ b/UI/Image/ImageCarouselWithUpload.ts
@@ -19,8 +19,8 @@ export class ImageCarouselWithUploadConstructor implements TagDependantUIElement
return 0;
}
- construct(tags: UIEventSource, changes: Changes): TagDependantUIElement {
- return new ImageCarouselWithUpload(tags, changes);
+ construct(dependencies): TagDependantUIElement {
+ return new ImageCarouselWithUpload(dependencies);
}
}
@@ -28,8 +28,10 @@ class ImageCarouselWithUpload extends TagDependantUIElement {
private _imageElement: ImageCarousel;
private _pictureUploader: ImageUploadFlow;
- constructor(tags: UIEventSource, changes: Changes) {
- super(tags);
+ constructor(dependencies: {tags: UIEventSource, changes: Changes}) {
+ super(dependencies.tags);
+ const tags = dependencies.tags;
+ const changes = dependencies.changes;
this._imageElement = new ImageCarousel(tags, changes);
const userDetails = changes.login.userDetails;
const license = changes.login.GetPreference( "mapcomplete-pictures-license");
diff --git a/UI/ImageUploadFlow.ts b/UI/ImageUploadFlow.ts
index b04070a94..7258d916c 100644
--- a/UI/ImageUploadFlow.ts
+++ b/UI/ImageUploadFlow.ts
@@ -10,7 +10,6 @@ import Translations from "./i18n/Translations";
export class ImageUploadFlow extends UIElement {
private _licensePicker: UIElement;
private _selectedLicence: UIEventSource;
- private _licenseExplanation: UIElement;
private _isUploading: UIEventSource = new UIEventSource(0)
private _uploadOptions: (license: string) => { title: string; description: string; handleURL: (url: string) => void; allDone: (() => void) };
private _userdetails: UIEventSource;
@@ -44,21 +43,6 @@ export class ImageUploadFlow extends UIElement {
this._selectedLicence = licensePicker.selectedElement;
- const licenseExplanations = {
- "CC-BY-SA 4.0":
- "Creative Commonse met naamsvermelding en gelijk delen " +
- "Je foto mag door iedereen gratis gebruikt worden, als ze je naam vermelden én ze afgeleide werken met deze licentie en attributie delen.",
- "CC-BY 4.0":
- "Creative Commonse met naamsvermelding " +
- "Je foto mag door iedereen gratis gebruikt worden, als ze je naam vermelden",
- "CC0":
- "Geen copyright Je foto mag door iedereen voor alles gebruikt worden"
- }
- this._licenseExplanation = new VariableUiElement(
- this._selectedLicence.map((license) => {
- return licenseExplanations[license]
- })
- );
}
@@ -67,25 +51,29 @@ export class ImageUploadFlow extends UIElement {
if (!this._userdetails.data.loggedIn) {
return `${Translations.t.image.pleaseLogin.Render()}
`;
}
+
+ let uploadingMessage = "";
if (this._isUploading.data == 1) {
return `${Translations.t.image.uploadingPicture.Render()} `
}
if (this._isUploading.data > 0) {
- return "Bezig met uploaden, nog " + this._isUploading.data + " foto's te gaan... "
+ uploadingMessage = "Uploading multiple pictures, " + this._isUploading.data + " left... "
}
return "" +
"" +
-
+
"
" +
-
+
"" +
- this._licensePicker.Render() +
-
+
+ this._licensePicker.Render() + " " +
+ uploadingMessage +
+
" " +
"
("
Naar de kaart "),
+ new VariableUiElement(new UIEventSource
("Return to the map "),
() => {
document.getElementById("to-the-map").onclick = function () {
uielement.setData(undefined);
diff --git a/UI/PendingChanges.ts b/UI/PendingChanges.ts
index de76d1748..e0411a538 100644
--- a/UI/PendingChanges.ts
+++ b/UI/PendingChanges.ts
@@ -1,20 +1,24 @@
import {UIElement} from "./UIElement";
import {UIEventSource} from "./UIEventSource";
+import {Changes} from "../Logic/Changes";
export class PendingChanges extends UIElement {
private _pendingChangesCount: UIEventSource;
private _countdown: UIEventSource;
private _isSaving: UIEventSource;
- constructor(pendingChangesCount: UIEventSource,
- countdown: UIEventSource,
- isSaving: UIEventSource) {
- super(pendingChangesCount);
- this.ListenTo(isSaving);
+ constructor(changes: Changes,
+ countdown: UIEventSource) {
+ super(changes.pendingChangesES);
+ this.ListenTo(changes.isSaving);
this.ListenTo(countdown);
- this._pendingChangesCount = pendingChangesCount;
+ this._pendingChangesCount = changes.pendingChangesES;
this._countdown = countdown;
- this._isSaving = isSaving;
+ this._isSaving = changes.isSaving;
+
+ this.onClick(() => {
+ changes.uploadAll();
+ })
}
protected InnerRender(): string {
diff --git a/UI/QuestionPicker.ts b/UI/QuestionPicker.ts
index b9cf0240e..82baac402 100644
--- a/UI/QuestionPicker.ts
+++ b/UI/QuestionPicker.ts
@@ -43,10 +43,5 @@ export class QuestionPicker extends UIElement {
highestQ.CreateHtml(this.source).Render() +
" ";
}
- InnerUpdate(htmlElement: HTMLElement) {
- }
-
- Activate() {
- }
}
\ No newline at end of file
diff --git a/UI/SaveButton.ts b/UI/SaveButton.ts
index 3bba390a7..f78fbd4a5 100644
--- a/UI/SaveButton.ts
+++ b/UI/SaveButton.ts
@@ -19,7 +19,7 @@ export class SaveButton extends UIElement {
) {
return "Opslaan "
}
- return "Opslaan ";
+ return "Save ";
}
}
\ No newline at end of file
diff --git a/UI/SearchAndGo.ts b/UI/SearchAndGo.ts
index 3916168a3..5bff8412e 100644
--- a/UI/SearchAndGo.ts
+++ b/UI/SearchAndGo.ts
@@ -8,8 +8,8 @@ import {Basemap} from "../Logic/Basemap";
export class SearchAndGo extends UIElement {
- private _placeholder = new UIEventSource("Zoek naar een locatie...")
- private _searchField = new TextField(this._placeholder);
+ private _placeholder = new UIEventSource("Search a location...")
+ private _searchField = new TextField(this._placeholder, undefined);
private _foundEntries = new UIEventSource([]);
private _map: Basemap;
@@ -35,7 +35,7 @@ export class SearchAndGo extends UIElement {
private RunSearch() {
const searchString = this._searchField.value.data;
this._searchField.Clear();
- this._placeholder.setData("Bezig met zoeken...");
+ this._placeholder.setData("Searching...");
const self = this;
Geocoding.Search(searchString, this._map, (result) => {
@@ -50,10 +50,10 @@ export class SearchAndGo extends UIElement {
[bb[1], bb[3]]
]
self._map.map.fitBounds(bounds);
- this._placeholder.setData("Zoek naar een locatie...");
+ this._placeholder.setData("Search a location...");
},
() => {
- this._placeholder.setData("Niets gevonden: er ging iets mis");
+ this._placeholder.setData("Something went wrong. Try again.");
});
}
diff --git a/UI/SimpleAddUI.ts b/UI/SimpleAddUI.ts
index b23543755..1d9f3d61f 100644
--- a/UI/SimpleAddUI.ts
+++ b/UI/SimpleAddUI.ts
@@ -42,7 +42,7 @@ export class SimpleAddUI extends UIElement {
// looks SO retarded
// the default type of button is 'submit', which performs a POST and page reload
const button =
- new Button(new FixedUiElement("Voeg hier een " + option.name + " toe"),
+ new Button(new FixedUiElement("Add a " + option.name + " here"),
this.CreatePoint(option));
this._addButtons.push(button);
}
@@ -61,18 +61,18 @@ export class SimpleAddUI extends UIElement {
}
protected InnerRender(): string {
- const header = "Geen selectie " +
- "Je klikte ergens waar er nog geen gezochte data is. ";
+ const header = "No data here " +
+ "You clicked somewhere where no data is known yet. ";
if (!this._userDetails.data.loggedIn) {
- return header + "Gelieve je aan te melden om een nieuw punt toe te voegen "
+ return header + "Please log in to add a new point "
}
if (this._zoomlevel.data.zoom < 19) {
- return header + "Zoom verder in om een element toe te voegen.";
+ return header + "Zoom in further to add a point.";
}
if (this._dataIsLoading.data) {
- return header + "De data is nog aan het laden. Nog even geduld, dan kan je een punt toevoegen";
+ return header + "The data is still loading. Please wait a bit before you add a new point";
}
var html = "";
diff --git a/UI/UIElement.ts b/UI/UIElement.ts
index efd574ff8..c3a9fdd70 100644
--- a/UI/UIElement.ts
+++ b/UI/UIElement.ts
@@ -1,4 +1,5 @@
import {UIEventSource} from "./UIEventSource";
+import instantiate = WebAssembly.instantiate;
export abstract class UIElement {
@@ -58,20 +59,22 @@ export abstract class UIElement {
}
element.style.pointerEvents = "all";
element.style.cursor = "pointer";
- /*
- const childs = element.children;
- for (let i = 0; i < childs.length; i++) {
- const ch = childs[i];
- console.log(ch);
- ch.style.cursor = "pointer";
- ch.onclick = () => {
- self._onClick();
- }
- ch.style.pointerEvents = "all";
- }*/
}
this.InnerUpdate(element);
+
+ for (const i in this) {
+ const child = this[i];
+ if (child instanceof UIElement) {
+ child.Update();
+ } else if (child instanceof Array) {
+ for (const ch of child) {
+ if (ch instanceof UIElement) {
+ ch.Update();
+ }
+ }
+ }
+ }
}
HideOnEmpty(hide : boolean){
@@ -89,7 +92,7 @@ export abstract class UIElement {
AttachTo(divId: string) {
let element = document.getElementById(divId);
- if(element === null){
+ if (element === null) {
console.log("SEVERE: could not attach UIElement to ", divId);
return;
}
@@ -99,7 +102,21 @@ export abstract class UIElement {
}
protected abstract InnerRender(): string;
- public Activate(): void {};
+
+ public Activate(): void {
+ for (const i in this) {
+ const child = this[i];
+ if (child instanceof UIElement) {
+ child.Activate();
+ } else if (child instanceof Array) {
+ for (const ch of child) {
+ if (ch instanceof UIElement) {
+ ch.Activate();
+ }
+ }
+ }
+ }
+ };
public IsEmpty(): boolean {
return this.InnerRender() === "";
diff --git a/UI/UserBadge.ts b/UI/UserBadge.ts
index 26eb30309..c810acf31 100644
--- a/UI/UserBadge.ts
+++ b/UI/UserBadge.ts
@@ -4,6 +4,7 @@ import {UIEventSource} from "./UIEventSource";
import {Basemap} from "../Logic/Basemap";
import L from "leaflet";
import {FixedUiElement} from "./Base/FixedUiElement";
+import {VariableUiElement} from "./Base/VariableUIElement";
/**
* Handles and updates the user badge
@@ -13,6 +14,7 @@ export class UserBadge extends UIElement {
private _pendingChanges: UIElement;
private _logout: UIElement;
private _basemap: Basemap;
+ private _homeButton: UIElement;
constructor(userDetails: UIEventSource,
@@ -38,12 +40,27 @@ export class UserBadge extends UIElement {
}
});
+ this._homeButton = new VariableUiElement(
+ userDetails.map((userinfo) => {
+ if (userinfo.home) {
+ return " ";
+ }
+ return "";
+ })
+ ).onClick(() => {
+ const home = userDetails.data?.home;
+ if (home === undefined) {
+ return;
+ }
+ basemap.map.flyTo([home.lat, home.lon], 18);
+ });
+
}
protected InnerRender(): string {
const user = this._userDetails.data;
if (!user.loggedIn) {
- return "Klik hier om aan te melden bij OSM
";
+ return "Login with OpenStreetMap
";
}
@@ -66,9 +83,7 @@ export class UserBadge extends UIElement {
dryrun = " TESTING ";
}
- let home = "";
if (user.home !== undefined) {
- home = " ";
const icon = L.icon({
iconUrl: 'assets/home.svg',
iconSize: [20, 20],
@@ -91,7 +106,7 @@ export class UserBadge extends UIElement {
dryrun +
"
" +
"" +
- home +
+ this._homeButton.Render() +
settings +
messageSpan +
" " +
@@ -104,25 +119,5 @@ export class UserBadge extends UIElement {
"";
}
- InnerUpdate(htmlElement: HTMLElement) {
- this._pendingChanges.Update();
- var btn = document.getElementById("home");
- if (btn) {
- const self = this;
- btn.onclick = function () {
- const home = self._userDetails?.data?.home;
- if (home === undefined) {
- return;
- }
- self._basemap.map.flyTo([home.lat, home.lon], 18);
-
- }
- }
- this._logout.Update();
- }
-
- Activate() {
- this._pendingChanges.Activate();
- }
}
\ No newline at end of file
diff --git a/assets/bike/pump_broken.svg b/assets/bike/broken_pump.svg
similarity index 95%
rename from assets/bike/pump_broken.svg
rename to assets/bike/broken_pump.svg
index 2dcc14cbc..38868a504 100644
--- a/assets/bike/pump_broken.svg
+++ b/assets/bike/broken_pump.svg
@@ -9,9 +9,10 @@
-
+
-
+
+
diff --git a/assets/bike/drinking_water.svg b/assets/bike/drinking_water.svg
new file mode 100644
index 000000000..4962afe3a
--- /dev/null
+++ b/assets/bike/drinking_water.svg
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/bike/parking.svg b/assets/bike/parking.svg
index b095bc15b..ee2fb7214 100644
--- a/assets/bike/parking.svg
+++ b/assets/bike/parking.svg
@@ -2,85 +2,10 @@
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/assets/bike/parking_old.svg b/assets/bike/parking_old.svg
new file mode 100644
index 000000000..b095bc15b
--- /dev/null
+++ b/assets/bike/parking_old.svg
@@ -0,0 +1,93 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/bike_pump.svg b/assets/bike_pump.svg
deleted file mode 100644
index b4c7c96f3..000000000
--- a/assets/bike_pump.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/assets/ghost_bike.svg b/assets/ghost_bike.svg
deleted file mode 100644
index 1befcb799..000000000
--- a/assets/ghost_bike.svg
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/assets/github.svg b/assets/github.svg
deleted file mode 100644
index 93af7db56..000000000
--- a/assets/github.svg
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/assets/map-stickered.svg b/assets/map-stickered.svg
new file mode 100644
index 000000000..ecb56ec67
--- /dev/null
+++ b/assets/map-stickered.svg
@@ -0,0 +1,13030 @@
+
+
+
+
+ OpenStreetMap logo 2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ image/svg+xml
+
+ OpenStreetMap logo 2011
+
+
+ Ken Vermette
+
+
+
+ April 2011
+
+
+ OpenStreetMap.org
+
+
+ Replacement logo for OpenStreetMap Foundation
+
+
+ OSM openstreetmap logo
+
+
+ http://wiki.openstreetmap.org/wiki/File:Public-images-osm_logo.svg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Made with data from
+ OpenStreetMap.org
+ contributors
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/map.svg b/assets/map.svg
new file mode 100644
index 000000000..f91c9259a
--- /dev/null
+++ b/assets/map.svg
@@ -0,0 +1,9268 @@
+
+
+
+
+ OpenStreetMap logo 2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ image/svg+xml
+
+ OpenStreetMap logo 2011
+
+
+ Ken Vermette
+
+
+
+ April 2011
+
+
+ OpenStreetMap.org
+
+
+ Replacement logo for OpenStreetMap Foundation
+
+
+ OSM openstreetmap logo
+
+
+ http://wiki.openstreetmap.org/wiki/File:Public-images-osm_logo.svg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/assets/nature/ANB.jpg b/assets/nature/ANB.jpg
new file mode 100644
index 000000000..9ac4776f0
Binary files /dev/null and b/assets/nature/ANB.jpg differ
diff --git a/assets/nature/Natuurpunt.jpg b/assets/nature/Natuurpunt.jpg
new file mode 100644
index 000000000..f91c4939b
Binary files /dev/null and b/assets/nature/Natuurpunt.jpg differ
diff --git a/assets/nature/birdhide.png b/assets/nature/birdhide.png
new file mode 100644
index 000000000..d1d5513e8
Binary files /dev/null and b/assets/nature/birdhide.png differ
diff --git a/assets/nature/birdhide.svg b/assets/nature/birdhide.svg
new file mode 100644
index 000000000..f08f6677c
--- /dev/null
+++ b/assets/nature/birdhide.svg
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
diff --git a/assets/nature/birdhideMapnik.svg b/assets/nature/birdhideMapnik.svg
new file mode 100644
index 000000000..5f1c24846
--- /dev/null
+++ b/assets/nature/birdhideMapnik.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/nature/birdshelter.inkscape.svg b/assets/nature/birdshelter.inkscape.svg
new file mode 100644
index 000000000..03bd90ce6
--- /dev/null
+++ b/assets/nature/birdshelter.inkscape.svg
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
+
diff --git a/assets/nature/birdshelter.png b/assets/nature/birdshelter.png
new file mode 100644
index 000000000..d5b23033b
Binary files /dev/null and b/assets/nature/birdshelter.png differ
diff --git a/assets/nature/birdshelter.svg b/assets/nature/birdshelter.svg
new file mode 100644
index 000000000..9143498a6
--- /dev/null
+++ b/assets/nature/birdshelter.svg
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
+
diff --git a/assets/nature/info.png b/assets/nature/info.png
new file mode 100644
index 000000000..35a2cc17f
Binary files /dev/null and b/assets/nature/info.png differ
diff --git a/assets/nature/natuurpunt_logo_zwart.png b/assets/nature/natuurpunt_logo_zwart.png
new file mode 100644
index 000000000..41dfab4a1
Binary files /dev/null and b/assets/nature/natuurpunt_logo_zwart.png differ
diff --git a/assets/nature/shelter.svg b/assets/nature/shelter.svg
new file mode 100644
index 000000000..57eb6955c
--- /dev/null
+++ b/assets/nature/shelter.svg
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+ image/svg+xml
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/assets/osm-logo-buggy-attr.svg b/assets/osm-logo-buggy-attr.svg
new file mode 100644
index 000000000..26fc47842
--- /dev/null
+++ b/assets/osm-logo-buggy-attr.svg
@@ -0,0 +1,3293 @@
+
+
+
+
+ OpenStreetMap logo 2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ image/svg+xml
+
+ OpenStreetMap logo 2011
+
+
+ Ken Vermette
+
+
+
+ April 2011
+
+
+ OpenStreetMap.org
+
+
+ Replacement logo for OpenStreetMap Foundation
+
+
+ OSM openstreetmap logo
+
+
+ http://wiki.openstreetmap.org/wiki/File:Public-images-osm_logo.svg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 01011001 00110101 10010011
+ 01011001 00110101 10010011
+
+
+
diff --git a/assets/osm-logo-white-bg.svg b/assets/osm-logo-white-bg.svg
new file mode 100644
index 000000000..5bdad1799
--- /dev/null
+++ b/assets/osm-logo-white-bg.svg
@@ -0,0 +1,3282 @@
+
+
+
+
+ OpenStreetMap logo 2011
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ image/svg+xml
+
+ OpenStreetMap logo 2011
+
+
+ Ken Vermette
+
+
+
+ April 2011
+
+
+ OpenStreetMap.org
+
+
+ Replacement logo for OpenStreetMap Foundation
+
+
+ OSM openstreetmap logo
+
+
+ http://wiki.openstreetmap.org/wiki/File:Public-images-osm_logo.svg
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 01011001 00110101 10010011
+ 01011001 00110101 10010011
+
+
+
diff --git a/assets/streetwidths.geojson b/assets/streetwidths.geojson
new file mode 100644
index 000000000..732232ae4
--- /dev/null
+++ b/assets/streetwidths.geojson
@@ -0,0 +1,12951 @@
+{
+ "version": 0.6,
+ "generator": "Overpass API 0.7.56.1004 6cd3eaec",
+ "osm3s": {
+ "timestamp_osm_base": "2020-07-17T13:42:02Z",
+ "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL."
+ },
+ "elements": [
+
+ {
+ "type": "way",
+ "id": 3515276,
+ "nodes": [
+ 1865839125,
+ 3307892288,
+ 17421435,
+ 1322128263,
+ 1396130046
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "highway": "pedestrian",
+ "lit": "yes",
+ "name": "Breidelstraat",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "5.7",
+ "wikidata": "Q2247945",
+ "wikipedia": "nl:Breidelstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332450,
+ "nodes": [
+ 312713005,
+ 26363809,
+ 26364283,
+ 26363613,
+ 4978127142,
+ 26363727,
+ 2660049014,
+ 1206268644,
+ 1685985159
+ ],
+ "tags": {
+ "cycleway:right": "shared_lane",
+ "cycleway:right:width": "1.38",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Jorisstraat",
+ "name:etymology:wikidata": "Q48438",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "surface": "asphalt",
+ "width:carriageway": "7.6",
+ "wikidata": "Q3544890",
+ "wikipedia": "nl:Sint-Jorisstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332452,
+ "nodes": [
+ 1163822364,
+ 2350604014
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Augustijnenbrug",
+ "parking:lane:both": "parallel",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "9.1"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332457,
+ "nodes": [
+ 26343818,
+ 1903803711,
+ 26343819,
+ 26343820,
+ 1164745428,
+ 26343821,
+ 1164745554,
+ 312711610
+ ],
+ "tags": {
+ "bicycle": "designated",
+ "foot": "designated",
+ "highway": "residential",
+ "maxspeed": "30",
+ "motor_vehicle": "destination",
+ "name": "Gouden-Handrei",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.7",
+ "wikidata": "Q2189729",
+ "wikipedia": "nl:Gouden-Handrei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332467,
+ "nodes": [
+ 26343822,
+ 26363669,
+ 26363754,
+ 26363634,
+ 26343793
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kortewinkel",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.6",
+ "wikidata": "Q1976395",
+ "wikipedia": "nl:Kortewinkel"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332469,
+ "nodes": [
+ 26363638,
+ 312714862,
+ 312714861,
+ 312714860,
+ 312714859
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "maxweight": "3.5",
+ "maxweight:conditional": "none @ destination",
+ "name": "Grauwwerkersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2020143",
+ "wikipedia": "nl:Grauwwerkersstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332474,
+ "nodes": [
+ 26343780,
+ 7603400154
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Gouden-Handstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.2",
+ "wikidata": "Q2479270",
+ "wikipedia": "nl:Gouden-Handstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332477,
+ "nodes": [
+ 26343816,
+ 5221800072,
+ 26363677,
+ 26363632,
+ 1491792991,
+ 26363743,
+ 315741673
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Moerstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.7",
+ "wikidata": "Q2170266",
+ "wikipedia": "nl:Moerstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332496,
+ "nodes": [
+ 7603687959,
+ 4974122796,
+ 312715420
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Pieter Pourbusstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "smoothness": "intermediate",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "vehicle": "destination",
+ "width:carriageway": "3.8",
+ "wikidata": "Q2115120",
+ "wikipedia": "nl:Pieter Pourbusstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332500,
+ "nodes": [
+ 5228768739,
+ 26343818,
+ 1866130090
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Oosterlingenplein",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q2376118",
+ "wikipedia": "nl:Oosterlingenplein"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332502,
+ "nodes": [
+ 26343755,
+ 1789691190,
+ 1930492255
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "maxspeed": "30",
+ "name": "Sasplein",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "source:maxspeed": "BE-VLG:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.0",
+ "wikidata": "Q2087463",
+ "wikipedia": "nl:Sasplein"
+ }
+ },
+ {
+ "type": "way",
+ "id": 4332513,
+ "nodes": [
+ 26343822,
+ 26343824,
+ 26343818
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Spaanse Loskaai",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.9",
+ "wikidata": "Q2263053",
+ "wikipedia": "nl:Spaanse Loskaai"
+ }
+ },
+ {
+ "type": "way",
+ "id": 12125754,
+ "nodes": [
+ 113543202,
+ 305205265,
+ 1976757118,
+ 318730124,
+ 1321891804,
+ 305205266,
+ 305436001,
+ 109936405
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Schaarstraat",
+ "oneway": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "9.1",
+ "wikidata": "Q1926138",
+ "wikipedia": "nl:Schaarstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 25013601,
+ "nodes": [
+ 271927360,
+ 310384189
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Biddersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "5.8",
+ "wikidata": "Q2548330",
+ "wikipedia": "nl:Biddersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 25013760,
+ "nodes": [
+ 271928695,
+ 5641033535,
+ 5641033536,
+ 305438220
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Waalsestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.6",
+ "wikidata": "Q2482133",
+ "wikipedia": "nl:Waalsestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 25013764,
+ "nodes": [
+ 305438466,
+ 5044489172,
+ 1165286151,
+ 5044489162,
+ 305438461
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Witteleertouwersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q1978415",
+ "wikipedia": "nl:Witteleertouwersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 25013792,
+ "nodes": [
+ 17422448,
+ 271928696
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Jozef Suveestraat",
+ "name:etymology:wikidata": "Q2564914",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.2",
+ "wikidata": "Q2377340",
+ "wikipedia": "nl:Jozef Suvéestraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 25013801,
+ "nodes": [
+ 271928966,
+ 271928965,
+ 271928964,
+ 5238648993,
+ 5030722504,
+ 7618388970
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Violierstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2110298",
+ "wikipedia": "nl:Violierstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 25957396,
+ "nodes": [
+ 183415523,
+ 262550785
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Jan in de Meers",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "2.9",
+ "wikidata": "Q1961476",
+ "wikipedia": "nl:Sint-Jan in de Meers"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27797788,
+ "nodes": [
+ 109928606,
+ 5238719835,
+ 5192399680,
+ 109928608
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Coupure",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.8"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27797865,
+ "nodes": [
+ 17422444,
+ 305208181,
+ 305207175,
+ 5233181841,
+ 305206353
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Pandreitje",
+ "note": "Witdt:carriageway tussen parkeerstroken",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.8",
+ "wikidata": "Q2326840",
+ "wikipedia": "nl:Pandreitje"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27797918,
+ "nodes": [
+ 305206582,
+ 305444537,
+ 305206353
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Gevangenisstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.9",
+ "wikidata": "Q2709399",
+ "wikipedia": "nl:Gevangenisstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27797953,
+ "nodes": [
+ 5241464513,
+ 1165301436,
+ 305207022,
+ 26343841
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Freren Fonteinstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "7.3",
+ "wikidata": "Q2510024",
+ "wikipedia": "nl:Freren Fonteinstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27797954,
+ "nodes": [
+ 305205266,
+ 5370131131,
+ 305207023,
+ 1321891681,
+ 1165301427,
+ 5241464513
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Minderbroedersstraat",
+ "oneway": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "right",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "8.4",
+ "wikidata": "Q2998091",
+ "wikipedia": "nl:Minderbroedersstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27797976,
+ "nodes": [
+ 305207175,
+ 5032980454,
+ 5032969175,
+ 26343848
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Geerolfstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.6",
+ "wikidata": "Q13640622",
+ "wikipedia": "nl:Geerolfstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27817083,
+ "nodes": [
+ 305434446,
+ 305434479
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Koolbranderstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.2",
+ "wikidata": "Q1909190",
+ "wikipedia": "nl:Koolbrandersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27817086,
+ "nodes": [
+ 305434546,
+ 3102844915,
+ 305434498
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Bakkersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.3",
+ "wikidata": "Q1882148",
+ "wikipedia": "nl:Bakkersstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27817231,
+ "nodes": [
+ 305436021,
+ 4294801459,
+ 305436494,
+ 5043666212,
+ 318730632,
+ 305436495,
+ 305436498,
+ 305436499,
+ 271928966
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Vizierstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.4",
+ "wikidata": "Q2017825",
+ "wikipedia": "nl:Vizierstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27817336,
+ "nodes": [
+ 5241464513,
+ 6060994259,
+ 305437109,
+ 305437110
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Kruitenbergstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.3",
+ "wikidata": "Q2473348",
+ "wikipedia": "nl:Kruitenbergstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27817454,
+ "nodes": [
+ 109936405,
+ 5291873752,
+ 6509999130,
+ 305438511
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Zwarte Leertouwersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.3",
+ "wikidata": "Q2720286",
+ "wikipedia": "nl:Zwarteleertouwersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 27817478,
+ "nodes": [
+ 305438466,
+ 2463184342,
+ 5043667547,
+ 305438511,
+ 2367635155,
+ 305207023
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Engelstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "cobblestone",
+ "width:carriageway": "3.3",
+ "wikidata": "Q2655915",
+ "wikipedia": "nl:Engelstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28261918,
+ "nodes": [
+ 315742704,
+ 1732613335,
+ 315742705,
+ 310383492,
+ 4979629649,
+ 310383493
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Speelmansrei",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "left",
+ "surface": "sett",
+ "width:carriageway": "5.1",
+ "wikidata": "Q2878057",
+ "wikipedia": "nl:Speelmansrei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28261924,
+ "nodes": [
+ 315742568,
+ 2491531581,
+ 2506128491,
+ 7613349436
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Neststraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "surface": "sett",
+ "width:carriageway": "5.5",
+ "wikidata": "Q13894847",
+ "wikipedia": "nl:Neststraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28261929,
+ "nodes": [
+ 310383535,
+ 1680025465,
+ 310383523,
+ 315742825,
+ 7425843431,
+ 315742664
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Korte Lane",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "surface": "sett",
+ "width:carriageway": "4.7",
+ "wikipedia": "nl:Korte Lane"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28261935,
+ "nodes": [
+ 7685522174,
+ 1510095417,
+ 1476999172,
+ 1731869054,
+ 315742821,
+ 1510095421,
+ 1731869049,
+ 1731869055,
+ 310383745,
+ 5647687234,
+ 1476999112,
+ 310383743
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Mortierstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "5.1",
+ "wikidata": "Q2451363",
+ "wikipedia": "nl:Mortierstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28261942,
+ "nodes": [
+ 310383761,
+ 1510095420,
+ 315742945
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Bollaardstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "1.9",
+ "wikidata": "Q2318716",
+ "wikipedia": "nl:Bollaardstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28261947,
+ "nodes": [
+ 144296222,
+ 1728433559,
+ 315742217,
+ 7425843430,
+ 315741415
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "foot": "yes",
+ "highway": "residential",
+ "lit": "yes",
+ "loc_name": "Wulvagerstraat",
+ "maxspeed": "30",
+ "name": "Wulfhagestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "surface": "asphalt",
+ "width:carriageway": "6.6",
+ "wikidata": "Q2712813",
+ "wikipedia": "nl:Wulfhagestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28261957,
+ "nodes": [
+ 310383835,
+ 1728634982,
+ 310383834,
+ 6657744108,
+ 315740929,
+ 310383833,
+ 7552191173
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Oude Zak",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "both",
+ "surface": "asphalt",
+ "width:carriageway": "8.7",
+ "wikidata": "Q2793691",
+ "wikipedia": "nl:Oude Zak",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28261981,
+ "nodes": [
+ 312711957,
+ 310384187,
+ 310384186,
+ 5243026735
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Hoedenmakersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.4",
+ "wikidata": "Q1922928",
+ "wikipedia": "nl:Hoedenmakersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28262374,
+ "nodes": [
+ 26349092,
+ 310386804,
+ 310386805,
+ 1789677057,
+ 310386852,
+ 5069362141,
+ 310386853,
+ 5069362040,
+ 5228742314,
+ 5069362207,
+ 5069362219
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kruiersstraat",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "source:maxspeed": "BE:zone30",
+ "surface": "paving_stones",
+ "width:carriageway": "4.0",
+ "wikipedia": "nl:Kruiersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28262388,
+ "nodes": [
+ 310384703,
+ 1826530931,
+ 310386950,
+ 310386953,
+ 5604763205,
+ 310386955,
+ 310386957,
+ 310386959,
+ 310386809,
+ 310386962
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Snaggaardstraat",
+ "oneway": "yes",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "surface": "sett",
+ "width:carriageway": "4.2",
+ "wikidata": "Q2339374",
+ "wikipedia": "nl:Snaggaardstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28262418,
+ "nodes": [
+ 310387101,
+ 310387102,
+ 1588366027,
+ 310387103
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Gotje",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "surface": "sett",
+ "width:carriageway": "4.0",
+ "wikidata": "Q5554763",
+ "wikipedia": "nl:Gotje"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28262426,
+ "nodes": [
+ 310386959,
+ 5069512362,
+ 5069511716,
+ 310387184,
+ 310384810
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Ropeerdstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.0",
+ "wikidata": "Q1981340",
+ "wikipedia": "nl:Ropeerdstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28262453,
+ "nodes": [
+ 310387289,
+ 310387332,
+ 310387333,
+ 310386950
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Hemelrijk",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "surface": "fine_gravel",
+ "width:carriageway": "6.0",
+ "wikidata": "Q2133157",
+ "wikipedia": "nl:Hemelrijk (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28262462,
+ "nodes": [
+ 310387379,
+ 310387378,
+ 310387377,
+ 5072243195,
+ 5072243178,
+ 310387376,
+ 5072243159,
+ 1165547266,
+ 5072141141,
+ 310387375,
+ 310387374,
+ 5072140416,
+ 310387294
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Duinenabdijstraat",
+ "oneway": "yes",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.9",
+ "wikidata": "Q3019446",
+ "wikipedia": "nl:Duinenabdijstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28262485,
+ "nodes": [
+ 310387552,
+ 310387614,
+ 5072243644,
+ 5072243625,
+ 901157328
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Oostproostse",
+ "oneway": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "both",
+ "surface": "asphalt",
+ "width:carriageway": "6.8"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463344,
+ "nodes": [
+ 131914187,
+ 1165547371,
+ 26363789
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Wulpenstraat",
+ "note": "This small piece is oneway for cyclists too",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "3.9",
+ "wikidata": "Q2898227",
+ "wikipedia": "nl:Wulpenstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463346,
+ "nodes": [
+ 26363639,
+ 26363810,
+ 26363789,
+ 7649068031,
+ 26363726,
+ 131913801
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "maxweight": "3.5",
+ "maxweight:conditional": "12 @ (06:00-11:00,19:00-21:00)",
+ "name": "Wulpenstraat",
+ "oneway": "no",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "7.0",
+ "wikidata": "Q2898227",
+ "wikipedia": "nl:Wulpenstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463359,
+ "nodes": [
+ 26363639,
+ 312708914,
+ 5226734750,
+ 1927267438,
+ 312708915,
+ 7039526731,
+ 312708916
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "'s-Gravenstraat",
+ "oneway": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "sidewalk:smoothness": "very_good",
+ "sidewalk:surface": "paving_stones",
+ "surface": "sett",
+ "width:carriageway": "7.4"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463390,
+ "nodes": [
+ 312708915,
+ 1927272704,
+ 312709080,
+ 312709081,
+ 5225221590,
+ 312709082,
+ 1165547343,
+ 312709083
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Stokerstraat",
+ "oneway": "no",
+ "parking:lane:both": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "sidewalk:smoothness": "very_good",
+ "sidewalk:surface": "paving_stones",
+ "surface": "sett",
+ "width:carriageway": "8.3",
+ "wikidata": "Q2330812",
+ "wikipedia": "nl:Stokersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463443,
+ "nodes": [
+ 312709348,
+ 5373738222,
+ 5602301650,
+ 312709349
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Willem de Dekenstraat",
+ "name:etymology:wikidata": "Q2907281",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "5.3"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463447,
+ "nodes": [
+ 271927356,
+ 5241432575,
+ 312709412
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "James Wealestraat",
+ "name:etymology:wikidata": "Q2062803",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "4.8",
+ "wikidata": "Q2196310",
+ "wikipedia": "nl:James Wealestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463448,
+ "nodes": [
+ 312709348,
+ 312709415,
+ 312709416
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Willem de Dekenstraat",
+ "name:etymology:wikidata": "Q2907281",
+ "parking:lane:both": "parallel",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "7.8",
+ "wikidata": "Q2071690",
+ "wikipedia": "nl:Willem de Dekenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463455,
+ "nodes": [
+ 271927355,
+ 1686658077,
+ 1686655903,
+ 312709477,
+ 312709478,
+ 1686682187,
+ 6658682612,
+ 1492536191,
+ 5521195504,
+ 312709479,
+ 312709480
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Baliestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "surface": "sett",
+ "width:carriageway": "6.0",
+ "wikidata": "Q3246467",
+ "wikipedia": "nl:Baliestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463456,
+ "nodes": [
+ 312709482,
+ 312709479
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kleine Nieuwstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.2",
+ "wikidata": "Q2685622",
+ "wikipedia": "nl:Kleine Nieuwstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463466,
+ "nodes": [
+ 271927429,
+ 312710287
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Lange Raamstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2800960",
+ "wikipedia": "nl:Lange Raamstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463479,
+ "nodes": [
+ 312710288,
+ 312710920,
+ 1789677088,
+ 312710747,
+ 5640768025,
+ 5640768023,
+ 312710748
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Collaert Mansionstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "parallel",
+ "surface": "sett",
+ "width:carriageway": "7.0",
+ "wikidata": "Q2182771",
+ "wikipedia": "nl:Collaert Mansionstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463631,
+ "nodes": [
+ 26343769,
+ 1789677067,
+ 312710920
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Gilliskoorstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "5.5",
+ "wikidata": "Q2578286",
+ "wikipedia": "nl:Sint-Gilliskoorstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463688,
+ "nodes": [
+ 312710747,
+ 312711007
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Gilliskerkhof",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "parallel",
+ "surface": "sett",
+ "width:carriageway": "6.8",
+ "wikidata": "Q1975851",
+ "wikipedia": "nl:Sint-Gilliskerkhof"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463734,
+ "nodes": [
+ 312711525,
+ 7126734984,
+ 312711524,
+ 7126783785,
+ 310384186
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Schrijversstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "6.3",
+ "wikidata": "Q1847352",
+ "wikipedia": "nl:Schrijversstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463735,
+ "nodes": [
+ 312711522,
+ 271927429
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Korte Raamstraat",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.5"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463753,
+ "nodes": [
+ 312711962,
+ 312711522
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Noord-Gistelhof",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "7.1",
+ "wikidata": "Q2612016",
+ "wikipedia": "nl:Gistelhof"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463775,
+ "nodes": [
+ 26343782,
+ 312712201,
+ 312711756
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Gilliskerkstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.1",
+ "wikidata": "Q2922841",
+ "wikipedia": "nl:Sint-Gilliskerkstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463784,
+ "nodes": [
+ 312711957,
+ 1206268669,
+ 5697643294,
+ 1206268631,
+ 312712021
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Maagdendal",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.3",
+ "wikidata": "Q2674207",
+ "wikipedia": "nl:Maagdendal"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463786,
+ "nodes": [
+ 26343786,
+ 26363762,
+ 1163822364,
+ 310384182,
+ 312713003,
+ 5520872860,
+ 312713004
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Augustijnenrei",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "no",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.3",
+ "wikidata": "Q2705155",
+ "wikipedia": "nl:Augustijnenrei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463807,
+ "nodes": [
+ 312712201,
+ 312712200,
+ 312712198,
+ 1206268673,
+ 312711962
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sterstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "3.8",
+ "wikidata": "Q1923653",
+ "wikipedia": "nl:Sterstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463870,
+ "nodes": [
+ 26363762,
+ 312712835,
+ 312711523,
+ 312711959
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "West-Gistelhof",
+ "name:etymology:wikidata": "Q63419362",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "6.7",
+ "wikidata": "Q2612016",
+ "wikipedia": "nl:Gistelhof"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463983,
+ "nodes": [
+ 26363625,
+ 1930863228
+ ],
+ "tags": {
+ "OnroerendErfgoed:criteria": "M",
+ "bridge": "yes",
+ "cycleway:left": "shared_lane",
+ "description": "Vlamingbrug",
+ "heritage": "4",
+ "heritage:operator": "OnroerendErfgoed",
+ "heritage:website": "https://inventaris.onroerenderfgoed.be/dibe/relict/200804",
+ "highway": "tertiary",
+ "layer": "1",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Vlamingbrug",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "ref:OnroerendErfgoed": "200804",
+ "sidewalk": "both",
+ "source:maxspeed": "sign",
+ "surface": "asphalt",
+ "width:carriageway": "3.1"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28463999,
+ "nodes": [
+ 312713835,
+ 312711525
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Jan Miraelstraat",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.4",
+ "wikidata": "Q2489663",
+ "wikipedia": "nl:Jan Miraelstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28464025,
+ "nodes": [
+ 312714071,
+ 1492546423,
+ 5250359561,
+ 5521256348,
+ 1687050090,
+ 312714070,
+ 312714051
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kapelstraat",
+ "name:etymology:wikidata": "Q108325",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "6.1",
+ "wikidata": "Q2278699",
+ "wikipedia": "nl:Kapelstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28464053,
+ "nodes": [
+ 26343774,
+ 312714245,
+ 312714246,
+ 1492558260,
+ 1726452192,
+ 312714247
+ ],
+ "tags": {
+ "cycleway:left": "shared_lane",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Genthof",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.4",
+ "wikidata": "Q2377698",
+ "wikipedia": "nl:Genthof"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28464056,
+ "nodes": [
+ 312714252,
+ 7626723728,
+ 1492558258,
+ 312714246
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "foot": "yes",
+ "highway": "service",
+ "maxspeed": "30",
+ "motor_vehicle": "destination",
+ "name": "Schrijnwerkersstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "service": "alley",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "2.7",
+ "wikidata": "Q2089281",
+ "wikipedia": "nl:Schrijnwerkersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28464072,
+ "nodes": [
+ 312714247,
+ 26363711,
+ 312714373,
+ 312714374
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Woensdagmarkt",
+ "note:width:carriageway": "Breedte gemeten tusen stoep en boord van de parkeerplaats",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "diagonal",
+ "parking:lane:right": "no_stopping",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.3",
+ "wikipedia": "nl:Woensdagmarkt"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28464094,
+ "nodes": [
+ 312714501,
+ 312714505,
+ 5238150633,
+ 312714506,
+ 312714507,
+ 26364281
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kipstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width": "1.5 m",
+ "width:carriageway": "2.5",
+ "wikidata": "Q2352554",
+ "wikipedia": "nl:Kipstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28464099,
+ "nodes": [
+ 312714475,
+ 2509830662,
+ 2509830663,
+ 26363768,
+ 2509830664
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Vlamingstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "sign",
+ "surface": "asphalt",
+ "width:carriageway": "3.5",
+ "wikidata": "Q1829055",
+ "wikipedia": "nl:Vlamingstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28464148,
+ "nodes": [
+ 312714780,
+ 6472535089,
+ 312714805,
+ 3281984947,
+ 1178980261
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Naaldenstraat",
+ "note": "Dit segment (Boterhuis-Sint-Jakob) is OOK voor fietsen éénrichting!",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.5",
+ "wikidata": "Q2597874",
+ "wikipedia": "nl:Naaldenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717681,
+ "nodes": [
+ 262555518,
+ 310383481,
+ 144293090,
+ 144294459,
+ 315738220,
+ 144294461,
+ 5666296845,
+ 5666296843,
+ 1167190149,
+ 1167190213,
+ 144294421
+ ],
+ "tags": {
+ "bicycle": "use_sidepath",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Hendrik Consciencelaan",
+ "name:etymology:wikidata": "Q378133",
+ "oneway": "yes",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.5",
+ "wikidata": "Q2029561",
+ "wikipedia": "nl:Hendrik Consciencelaan"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717682,
+ "nodes": [
+ 262555518,
+ 318175743,
+ 5221762246,
+ 318176136,
+ 5221762243,
+ 5709000728,
+ 262555628,
+ 262555629
+ ],
+ "tags": {
+ "bicycle": "no",
+ "foot": "yes",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Guido Gezellelaan",
+ "name:etymology:wikidata": "Q336977",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "right",
+ "surface": "sett",
+ "width:carriageway": "4.8",
+ "wikidata": "Q2177063",
+ "wikipedia": "nl:Guido Gezellelaan"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717715,
+ "nodes": [
+ 315737911,
+ 315738043
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Maagdenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "6.0",
+ "wikidata": "Q2128492",
+ "wikipedia": "nl:Maagdenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717725,
+ "nodes": [
+ 315738219,
+ 5364545430,
+ 144294461
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Van Voldenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.0",
+ "wikidata": "Q2766073",
+ "wikipedia": "nl:Van Voldenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717727,
+ "nodes": [
+ 315738225,
+ 1675757218,
+ 2495524950,
+ 315738226
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Fonteinstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.0",
+ "wikidata": "Q2243029",
+ "wikipedia": "nl:Fonteinstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717729,
+ "nodes": [
+ 315738225,
+ 315738220
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Fonteinstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.0",
+ "wikidata": "Q2243029",
+ "wikipedia": "nl:Fonteinstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717749,
+ "nodes": [
+ 315738321,
+ 2495524935,
+ 1476999119,
+ 315738320
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Klokstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.8",
+ "wikidata": "Q1887078",
+ "wikipedia": "nl:Klokstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717750,
+ "nodes": [
+ 144294459,
+ 315738320
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Klokstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.0",
+ "wikidata": "Q1887078",
+ "wikipedia": "nl:Klokstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717892,
+ "nodes": [
+ 315739208,
+ 1682891218,
+ 5586848442,
+ 1976828508,
+ 5190253531,
+ 315739215
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Biezenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "7.7",
+ "wikidata": "Q2515147",
+ "wikipedia": "nl:Biezenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717900,
+ "nodes": [
+ 315739243,
+ 5190253532,
+ 1976829258,
+ 315739242,
+ 1682832848,
+ 5516265643,
+ 315739216
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Blokstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane": "yes",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "6.0",
+ "wikidata": "Q1936669",
+ "wikipedia": "nl:Blokstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717919,
+ "nodes": [
+ 315739244,
+ 315739310,
+ 4982676734,
+ 315739311,
+ 1976830098,
+ 5190253533,
+ 315739312
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Elf-Julistraat",
+ "name:etymology:wikidata": "Q277589",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "both",
+ "sidewalk:surface": "paving_stones",
+ "surface": "sett",
+ "width:carriageway": "6.7",
+ "wikidata": "Q2674933",
+ "wikipedia": "nl:Elf-Julistraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717926,
+ "nodes": [
+ 315739216,
+ 315739244,
+ 1492546427,
+ 315739209
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Klaverstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "sidewalk:surface": "sett",
+ "surface": "sett",
+ "width:carriageway": "5.1",
+ "wikidata": "Q2254134",
+ "wikipedia": "nl:Klaverstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717974,
+ "nodes": [
+ 26363709,
+ 5130352130,
+ 4944410202,
+ 1107610118
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Achiel Van Ackerplein",
+ "name:etymology:wikidata": "Q14997",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "4.2",
+ "wikidata": "Q2078069",
+ "wikipedia": "nl:Achiel Van Ackerplein"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28717975,
+ "nodes": [
+ 315739623,
+ 2660048996,
+ 315739622
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Jan Boninstraat",
+ "name:etymology:wikidata": "Q63978843",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "surface": "sett",
+ "width:carriageway": "4.7",
+ "wikidata": "Q13735311",
+ "wikipedia": "nl:Jan Boninstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718000,
+ "nodes": [
+ 315739824,
+ 4977308234,
+ 315739885
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Poitevinstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.0",
+ "wikidata": "Q2279382",
+ "wikipedia": "nl:Poitevinstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718025,
+ "nodes": [
+ 315740336,
+ 315740338
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Zakske",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.1",
+ "wikidata": "Q2266047",
+ "wikipedia": "nl:Zakske"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718100,
+ "nodes": [
+ 315740745,
+ 315740789
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sledestraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q2787957",
+ "wikipedia": "nl:Sledestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718105,
+ "nodes": [
+ 315740790,
+ 4977403228,
+ 5521131636,
+ 1736925302,
+ 315740949
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Groenestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.5",
+ "wikidata": "Q2251953",
+ "wikipedia": "nl:Groenestraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718113,
+ "nodes": [
+ 315740929,
+ 5521131628,
+ 1737342480,
+ 315740949,
+ 5678259729,
+ 315740950,
+ 315740951
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Rozendal",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "8.7",
+ "wikidata": "Q2200478",
+ "wikipedia": "nl:Rozendal (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718122,
+ "nodes": [
+ 315740951,
+ 1736923439,
+ 1976817915,
+ 315740952
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Gieterijstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.0",
+ "wikidata": "Q2679143",
+ "wikipedia": "nl:Gieterijstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718158,
+ "nodes": [
+ 315741320,
+ 315742704
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "loc_name": "Wulvagerstraat",
+ "maxspeed": "30",
+ "name": "Wulfhagestraat",
+ "oneway": "no",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2712813",
+ "wikipedia": "nl:Wulfhagestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718179,
+ "nodes": [
+ 315741415,
+ 315741414,
+ 315741413,
+ 315742202,
+ 315741892,
+ 315741412,
+ 315741411
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "living_street",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Moerstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "6.1",
+ "wikidata": "Q2170266",
+ "wikipedia": "nl:Moerstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718192,
+ "nodes": [
+ 310383833,
+ 2350606291,
+ 4702024445,
+ 315741466
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Leeuwstraat",
+ "name:etymology:wikidata": "Q2878057",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q2771920",
+ "wikipedia": "nl:Leeuwstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718197,
+ "nodes": [
+ 315741525,
+ 315741500,
+ 7425744032,
+ 1147372419,
+ 315741426
+ ],
+ "tags": {
+ "access": "yes",
+ "bicycle": "yes",
+ "cycleway": "no",
+ "foot": "yes",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Geerwijnstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.0",
+ "wikidata": "Q2036801",
+ "wikipedia": "nl:Geerwijnstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718260,
+ "nodes": [
+ 315741892,
+ 5437890375,
+ 5437890376,
+ 315742111,
+ 7560012809,
+ 5437890373,
+ 315742113,
+ 7560012810,
+ 33824884
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Ontvangersstraat",
+ "oneway": "no",
+ "parking:lane:both": "parallel",
+ "sett:pattern": "arc",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.8",
+ "wikidata": "Q1832508",
+ "wikipedia": "nl:Ontvangersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718273,
+ "nodes": [
+ 315742165,
+ 1172086488,
+ 1172086459,
+ 1172086495,
+ 4975276205,
+ 1172086511,
+ 315742202
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "motor_vehicle": "designated",
+ "name": "Helmstraat",
+ "oneway": "-1",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.5",
+ "wikidata": "Q2653000",
+ "wikipedia": "nl:Helmstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718295,
+ "nodes": [
+ 315742217,
+ 315742469,
+ 4975276159,
+ 4975276157,
+ 315742470
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "motor_vehicle": "no",
+ "name": "Haanstraat",
+ "parking:lane:both": "no_parking",
+ "surface": "sett",
+ "width:carriageway": "2.7",
+ "wikidata": "Q2926074",
+ "wikipedia": "nl:Haanstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718302,
+ "nodes": [
+ 310383521,
+ 310383522,
+ 310383523
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Neststraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "2.7",
+ "wikidata": "Q13894847",
+ "wikipedia": "nl:Neststraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718343,
+ "nodes": [
+ 310383493,
+ 4979624579,
+ 2517460453,
+ 315742796
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "no",
+ "maxspeed": "30",
+ "name": "Kleine Hoefijzerstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.5",
+ "wikipedia": "nl:Kleine Hoefijzerstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718356,
+ "nodes": [
+ 315742825,
+ 1731869079,
+ 1510095415,
+ 1731869062,
+ 315742944,
+ 1731869057
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kleine Kuipersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "2.9",
+ "wikidata": "Q1847780",
+ "wikipedia": "nl:Kleine Kuipersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28718368,
+ "nodes": [
+ 7685522175,
+ 7685522174,
+ 4976026149,
+ 1731851868,
+ 315743074
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Pater Damiaanstraat",
+ "name:etymology:wikidata": "Q232785",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "both",
+ "surface": "asphalt",
+ "width:carriageway": "7.0",
+ "wikidata": "Q1906466",
+ "wikipedia": "nl:Pater Damiaanstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28722155,
+ "nodes": [
+ 26344337,
+ 5462731466,
+ 315790675,
+ 315790677,
+ 5017010016,
+ 1172796108,
+ 315790679
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Korte Vuldersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.7",
+ "wikidata": "Q2195441",
+ "wikipedia": "nl:Korte Vuldersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28722183,
+ "nodes": [
+ 315790740,
+ 315790680,
+ 315790939,
+ 315790941
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Hoogste van Brugge",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "4.3",
+ "wikidata": "Q2196883",
+ "wikipedia": "nl:Hoogste van Brugge"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28722198,
+ "nodes": [
+ 315790679,
+ 315790941,
+ 1594444212
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Westmeers",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.5",
+ "wikidata": "Q2104517",
+ "wikipedia": "nl:Westmeers"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28722334,
+ "nodes": [
+ 312714809,
+ 2505426830,
+ 315792928,
+ 1942971323
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kuipersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.1",
+ "wikidata": "Q2314772",
+ "wikipedia": "nl:Kuipersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28941138,
+ "nodes": [
+ 318174636,
+ 1680025415,
+ 894038794,
+ 262555628
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Schouwvegersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.4",
+ "wikidata": "Q2052172",
+ "wikipedia": "nl:Schouwvegersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28941177,
+ "nodes": [
+ 318174653,
+ 1679583578,
+ 1743361457,
+ 318174956,
+ 894038785,
+ 318175383,
+ 318175386,
+ 318175622,
+ 318174957
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.1",
+ "wikidata": "Q1905042",
+ "wikipedia": "nl:Lane (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28941193,
+ "nodes": [
+ 318174956,
+ 1743328898,
+ 1172772713,
+ 4979578509,
+ 318175144
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Zevensterrestraat",
+ "name:etymology:wikidata": "Q13423",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "2.9",
+ "wikidata": "Q2631394",
+ "wikipedia": "nl:Zevensterrestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28941202,
+ "nodes": [
+ 318175166,
+ 2373295004,
+ 318175383
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Paalstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "2.5",
+ "wikidata": "Q2670306",
+ "wikipedia": "nl:Paalstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28941208,
+ "nodes": [
+ 318175386,
+ 2373972132,
+ 318175497
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kammakersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "2.8",
+ "wikidata": "Q2356534",
+ "wikipedia": "nl:Kammakersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28941218,
+ "nodes": [
+ 318175503,
+ 2373295005,
+ 2373972118,
+ 1476999169,
+ 318175622
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kreupelenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.1",
+ "wikidata": "Q1971766",
+ "wikipedia": "nl:Kreupelenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28941265,
+ "nodes": [
+ 7678243786,
+ 2373924765,
+ 318175976
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Greinschuurstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.3",
+ "wikidata": "Q2079959",
+ "wikipedia": "nl:Greinschuurstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28941266,
+ "nodes": [
+ 318176136,
+ 318174957
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Greinschuurstraat",
+ "oneway": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.4",
+ "wikidata": "Q2079959",
+ "wikipedia": "nl:Greinschuurstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 28985801,
+ "nodes": [
+ 318730124,
+ 318730660,
+ 318730661,
+ 7618650547
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Gapaardstraat",
+ "oneway": "yes",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2421855",
+ "wikipedia": "nl:Gapaardstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 58761742,
+ "nodes": [
+ 312714475,
+ 1492549250,
+ 312714406
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Academiestraat",
+ "oneway": "yes",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.5",
+ "wikidata": "Q2668389",
+ "wikipedia": "nl:Academiestraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 58763155,
+ "nodes": [
+ 312714247,
+ 312714374,
+ 1726452185,
+ 312714249,
+ 1164730109
+ ],
+ "tags": {
+ "cycleway:left": "shared_lane",
+ "highway": "residential",
+ "maxlength": "6",
+ "maxspeed": "30",
+ "name": "Genthof",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.3",
+ "wikidata": "Q2377698",
+ "wikipedia": "nl:Genthof",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 61413989,
+ "nodes": [
+ 312711610,
+ 2350591603
+ ],
+ "tags": {
+ "bridge": "yes",
+ "highway": "residential",
+ "layer": "1",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Gouden Handbrug",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "5.5"
+ }
+ },
+ {
+ "type": "way",
+ "id": 61413990,
+ "nodes": [
+ 26343780,
+ 26343772,
+ 1014589647,
+ 1789677056,
+ 26343771,
+ 26343770,
+ 26343769,
+ 298086980,
+ 26343768,
+ 26343767,
+ 26363772,
+ 6348562150,
+ 26363672,
+ 26363815,
+ 310384207,
+ 312709482,
+ 1517538694,
+ 26363657,
+ 2463184369,
+ 26363602,
+ 1014589663,
+ 271930120
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Langerei",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "surface": "asphalt",
+ "width:carriageway": "6.6",
+ "wikidata": "Q2093650",
+ "wikipedia": "nl:Langerei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 61414007,
+ "nodes": [
+ 315741466,
+ 766782322
+ ],
+ "tags": {
+ "OnroerendErfgoed:criteria": "M",
+ "alt_name": "Leeuwbrug",
+ "bridge": "yes",
+ "heritage": "4",
+ "heritage:operator": "OnroerendErfgoed",
+ "heritage:website": "https://inventaris.onroerenderfgoed.be/dibe/relict/200798",
+ "highway": "residential",
+ "historic": "bridge",
+ "layer": "1",
+ "lit": "yes",
+ "maxspeed": "30",
+ "maxweight": "8",
+ "name": "Leeuwenbrug",
+ "name:etymology:wikidata": "Q2878057",
+ "parking:lane:both": "no_parking",
+ "ref:OnroerendErfgoed": "200798",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.8"
+ }
+ },
+ {
+ "type": "way",
+ "id": 61414008,
+ "nodes": [
+ 766782322,
+ 315741426
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Leeuwstraat",
+ "name:etymology:wikidata": "Q2878057",
+ "oneway": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.6",
+ "wikidata": "Q2771920",
+ "wikipedia": "nl:Leeuwstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 61414009,
+ "nodes": [
+ 315740338,
+ 315739824
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Zakske",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.8",
+ "wikidata": "Q2266047",
+ "wikipedia": "nl:Zakske",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 61414059,
+ "nodes": [
+ 315741415,
+ 3789624905
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "loc_name": "Wulvagerstraat",
+ "maxspeed": "30",
+ "name": "Wulfhagestraat",
+ "oneway": "no",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2712813",
+ "wikipedia": "nl:Wulfhagestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 61435340,
+ "nodes": [
+ 26343756,
+ 1789691460,
+ 1789691458
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "maxspeed": "30",
+ "name": "Buiten de Dampoort",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "surface": "asphalt",
+ "width:carriageway": "7.1"
+ }
+ },
+ {
+ "type": "way",
+ "id": 61435342,
+ "nodes": [
+ 766991589,
+ 766991590
+ ],
+ "tags": {
+ "bridge": "yes",
+ "highway": "tertiary",
+ "layer": "1",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Wulpenstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "smoothness": "very_good",
+ "surface": "asphalt",
+ "width:carriageway": "6.9",
+ "wikidata": "Q2898227",
+ "wikipedia": "nl:Wulpenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 62129607,
+ "nodes": [
+ 17422444,
+ 1164716597,
+ 835868554,
+ 17422441
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Braambergstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "sign",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q2054281",
+ "wikipedia": "nl:Braambergstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 69936351,
+ "nodes": [
+ 305208181,
+ 271928696
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Waalsestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.9",
+ "wikidata": "Q2482133",
+ "wikipedia": "nl:Waalsestraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 72492951,
+ "nodes": [
+ 131914189,
+ 4580122491,
+ 312709050,
+ 1789717059,
+ 131914190,
+ 1789717060,
+ 1164763931,
+ 131914193,
+ 271927352
+ ],
+ "tags": {
+ "bicycle": "use_sidepath",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Komvest",
+ "oneway": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "smoothness": "very_good",
+ "surface": "asphalt",
+ "width:carriageway": "8.0",
+ "wikidata": "Q2328151",
+ "wikipedia": "nl:Komvest"
+ }
+ },
+ {
+ "type": "way",
+ "id": 72492953,
+ "nodes": [
+ 131913801,
+ 1165547361,
+ 26363674,
+ 26363614,
+ 766991589
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Wulpenstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "smoothness": "very_good",
+ "surface": "asphalt",
+ "width:carriageway": "6.9",
+ "wikidata": "Q2898227",
+ "wikipedia": "nl:Wulpenstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 75725608,
+ "nodes": [
+ 894038794,
+ 894038785
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Brandstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.6",
+ "wikidata": "Q3183619",
+ "wikipedia": "nl:Brandstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 76559493,
+ "nodes": [
+ 902318889,
+ 1731548813,
+ 1731548883,
+ 315743194
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Roompotstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q2690394",
+ "wikipedia": "nl:Roompotstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 95106180,
+ "nodes": [
+ 766991590,
+ 5124619739,
+ 5124619738,
+ 26343755
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sasplein",
+ "oneway": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "both",
+ "smoothness": "very_good",
+ "source:maxspeed": "BE-VLG:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "12.3",
+ "wikidata": "Q2087463",
+ "wikipedia": "nl:Sasplein"
+ }
+ },
+ {
+ "type": "way",
+ "id": 95506626,
+ "nodes": [
+ 1107471155,
+ 26343756
+ ],
+ "tags": {
+ "bridge": "movable",
+ "bridge:movable": "bascule",
+ "highway": "tertiary",
+ "layer": "1",
+ "maxspeed": "30",
+ "name": "Buiten de Dampoort",
+ "parking:lane:both": "no_parking",
+ "surface": "asphalt",
+ "width:carriageway": "6.8"
+ }
+ },
+ {
+ "type": "way",
+ "id": 100656165,
+ "nodes": [
+ 1163648876,
+ 1163648930,
+ 1163648924,
+ 4937380535,
+ 312714861
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Robijnstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "1.9",
+ "wikidata": "Q2857633",
+ "wikipedia": "nl:Robijnstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 100669869,
+ "nodes": [
+ 312714406,
+ 1492554046
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Spanjaardstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.8",
+ "wikidata": "Q2197624",
+ "wikipedia": "nl:Spanjaardstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 100771852,
+ "nodes": [
+ 1163822403,
+ 1164730104,
+ 1164716557,
+ 26363611,
+ 312714252
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxlength": "8",
+ "maxspeed": "30",
+ "name": "Spiegelrei",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.1",
+ "wikidata": "Q2702244",
+ "wikipedia": "nl:Spiegelrei",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 100774487,
+ "nodes": [
+ 271927352,
+ 6260943454,
+ 1927166220,
+ 6348562148,
+ 271927353
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Walweinstraat",
+ "parking:lane:both": "parallel",
+ "surface": "asphalt",
+ "width:carriageway": "10.1",
+ "wikidata": "Q2483854",
+ "wikipedia": "nl:Walweinstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 101506635,
+ "nodes": [
+ 310383493,
+ 1172056001,
+ 1172056004,
+ 771807754,
+ 1708356149
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "motor_vehicle": "no",
+ "name": "Speelmansrei",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.5",
+ "wikidata": "Q2878057",
+ "wikipedia": "nl:Speelmansrei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 104541840,
+ "nodes": [
+ 26343835,
+ 26349092,
+ 4580122482,
+ 310384810
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Carmersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "4.6",
+ "wikidata": "Q2198297",
+ "wikipedia": "nl:Carmersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 145395609,
+ "nodes": [
+ 315741501,
+ 315741632,
+ 3056350312,
+ 17421081
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "motor_vehicle:conditional": "no @ (Sa 13:00-18:00; Su[1] 13:00-18:00)",
+ "name": "Geldmuntstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "11.5",
+ "wikidata": "Q2263733",
+ "wikipedia": "nl:Geldmuntstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 146174860,
+ "nodes": [
+ 312715176,
+ 1163648876,
+ 1942971323
+ ],
+ "tags": {
+ "bus": "opposite",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Adriaan Willaertstraat",
+ "name:etymology:wikidata": "Q312615",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.9",
+ "wikidata": "Q2372586",
+ "wikipedia": "nl:Adriaan Willaertstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 150016025,
+ "nodes": [
+ 315788024,
+ 766773072,
+ 26362453,
+ 315788650,
+ 995023903,
+ 995023916,
+ 315788548,
+ 17421303,
+ 1163584536,
+ 6658507943
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "motor_vehicle:conditional": "no @ (Sa 13:00-18:00; Su[1] 13:00-18:00)",
+ "name": "Steenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.9",
+ "wikidata": "Q1979428",
+ "wikipedia": "nl:Steenstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 152330773,
+ "nodes": [
+ 26343742,
+ 1651562059,
+ 1588366024,
+ 1651562042,
+ 1588366044,
+ 310384698
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Peterseliestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "surface": "sett",
+ "width:carriageway": "4.1",
+ "wikidata": "Q2255141",
+ "wikipedia": "nl:Peterseliestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 156339028,
+ "nodes": [
+ 4787008333,
+ 26363741
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kalkovenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2001723",
+ "wikipedia": "nl:Kalkovenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 156418534,
+ "nodes": [
+ 7590356768,
+ 312713835,
+ 4787687914,
+ 1685985159
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Clarastraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.9",
+ "wikidata": "Q2565507",
+ "wikipedia": "nl:Sint-Clarastraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 156651937,
+ "nodes": [
+ 7606351659,
+ 1588161109,
+ 3514695244,
+ 5574156261,
+ 1588161105,
+ 1687009750,
+ 26343982
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Vlamingdam",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "surface": "sett",
+ "width:carriageway": "6.3",
+ "wikidata": "Q2230099",
+ "wikipedia": "nl:Vlamingdam"
+ }
+ },
+ {
+ "type": "way",
+ "id": 158308020,
+ "nodes": [
+ 26343783,
+ 2350604021,
+ 312711635
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Torenbrug",
+ "oneway": "yes",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.9",
+ "wikidata": "Q1846850",
+ "wikipedia": "nl:Torenbrug"
+ }
+ },
+ {
+ "type": "way",
+ "id": 160890280,
+ "nodes": [
+ 1728634983,
+ 7606329637
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "foot": "yes",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "motor_vehicle": "destination",
+ "name": "Pottenmakersstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.4",
+ "wikidata": "Q14161820",
+ "wikipedia": "nl:Pottenmakersstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 162445589,
+ "nodes": [
+ 1743361461,
+ 1743361457
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Kleine Sint-Jansstraat",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.4",
+ "wikidata": "Q2752432",
+ "wikipedia": "nl:Kleine Sint-Jansstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 167572751,
+ "nodes": [
+ 1789677093,
+ 26343722
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Snaggaardstraat",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "2.7",
+ "wikidata": "Q2339374",
+ "wikipedia": "nl:Snaggaardstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 167572758,
+ "nodes": [
+ 1789677067,
+ 1789677073,
+ 1789677089
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sarepta",
+ "oneway": "no",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "4.1",
+ "wikipedia": "nl:Sarepta (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 168574563,
+ "nodes": [
+ 315740789,
+ 1736925292,
+ 7552176258
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Raamstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.7",
+ "wikidata": "Q3036381",
+ "wikipedia": "nl:Raamstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 172317423,
+ "nodes": [
+ 318175743,
+ 1476999144,
+ 7678251513
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Leemputstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.3",
+ "wikidata": "Q2220265",
+ "wikipedia": "nl:Leemputstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 176049806,
+ "nodes": [
+ 1866130090,
+ 1866130092,
+ 7606892008,
+ 1866130085
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Krom Genthof",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.7",
+ "wikidata": "Q13745987",
+ "wikipedia": "nl:Krom Genthof"
+ }
+ },
+ {
+ "type": "way",
+ "id": 180870498,
+ "nodes": [
+ 312714809,
+ 26363638
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Naaldenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.8",
+ "wikidata": "Q2597874",
+ "wikipedia": "nl:Naaldenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 180915274,
+ "nodes": [
+ 1789691458,
+ 1930492256
+ ],
+ "tags": {
+ "bridge": "yes",
+ "highway": "tertiary",
+ "layer": "1",
+ "maxspeed": "30",
+ "name": "Sasplein",
+ "parking:lane:both": "no_parking",
+ "surface": "asphalt",
+ "width:carriageway": "7.8",
+ "wikidata": "Q2087463",
+ "wikipedia": "nl:Sasplein"
+ }
+ },
+ {
+ "type": "way",
+ "id": 180921034,
+ "nodes": [
+ 310384702,
+ 310387288,
+ 310387289,
+ 5230685854
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Oliebaan",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.1",
+ "wikidata": "Q2230274",
+ "wikipedia": "nl:Oliebaan"
+ }
+ },
+ {
+ "type": "way",
+ "id": 182691326,
+ "nodes": [
+ 1930492256,
+ 26343755
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "maxspeed": "30",
+ "name": "Sasplein",
+ "parking:lane:both": "no_parking",
+ "source:maxspeed": "sign",
+ "surface": "asphalt",
+ "width:carriageway": "8.9",
+ "wikidata": "Q2087463",
+ "wikipedia": "nl:Sasplein"
+ }
+ },
+ {
+ "type": "way",
+ "id": 185476764,
+ "nodes": [
+ 271930120,
+ 26363732,
+ 26363696,
+ 6561942371,
+ 310387410,
+ 1789677149,
+ 26363622,
+ 26363802,
+ 1927246457,
+ 1164745513,
+ 26363761,
+ 26363699,
+ 26363639
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Langerei",
+ "oneway": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "smoothness": "very_good",
+ "surface": "asphalt",
+ "width:carriageway": "8.7",
+ "wikidata": "Q2093650",
+ "wikipedia": "nl:Langerei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 186927569,
+ "nodes": [
+ 271928950,
+ 1976757148,
+ 1976757119,
+ 7618472519
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Willemijnendreef",
+ "oneway": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "6.1",
+ "wikidata": "Q2112317",
+ "wikipedia": "nl:Willemijnendreef"
+ }
+ },
+ {
+ "type": "way",
+ "id": 193879691,
+ "nodes": [
+ 315741525,
+ 315741609,
+ 315741501
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Geerwijnstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.1",
+ "wikidata": "Q2036801",
+ "wikipedia": "nl:Geerwijnstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 226199300,
+ "nodes": [
+ 2350591601,
+ 2350591602
+ ],
+ "tags": {
+ "bridge": "yes",
+ "highway": "unclassified",
+ "layer": "1",
+ "lit": "yes",
+ "maxspeed": "30",
+ "maxspeed:type": "BE:zone30",
+ "name": "Carmersbrug",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.0"
+ }
+ },
+ {
+ "type": "way",
+ "id": 226199301,
+ "nodes": [
+ 2350591603,
+ 26343780
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Langerei",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "5.5",
+ "wikidata": "Q2093650",
+ "wikipedia": "nl:Langerei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 226199615,
+ "nodes": [
+ 2350604005,
+ 2350604001
+ ],
+ "tags": {
+ "OnroerendErfgoed:criteria": "M",
+ "bridge": "yes",
+ "cycleway": "opposite",
+ "description": "Ezelbrug",
+ "heritage": "4",
+ "heritage:operator": "OnroerendErfgoed",
+ "heritage:website": "https://inventaris.onroerenderfgoed.be/dibe/relict/200794",
+ "highway": "tertiary",
+ "layer": "1",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Ezelsbrug",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "ref:OnroerendErfgoed": "200794",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE-VLG:zone30",
+ "surface": "sett",
+ "width:carriageway": "9.2",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 232872500,
+ "nodes": [
+ 315740744,
+ 5523193065,
+ 4977890093,
+ 5523193046,
+ 4977893939,
+ 1206268625,
+ 5624929612,
+ 4977890075,
+ 1206268663,
+ 315741030
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Raamstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.8",
+ "wikidata": "Q3036381",
+ "wikipedia": "nl:Raamstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 236408512,
+ "nodes": [
+ 312713004,
+ 1014678935,
+ 5521026843,
+ 5582947910,
+ 312711525
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Jan Miraelstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.0",
+ "wikidata": "Q2489663",
+ "wikipedia": "nl:Jan Miraelstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 236408513,
+ "nodes": [
+ 1866130090,
+ 2640683162,
+ 5061727861,
+ 1163822372,
+ 26363711
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Oosterlingenplein",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.8",
+ "wikidata": "Q2376118",
+ "wikipedia": "nl:Oosterlingenplein"
+ }
+ },
+ {
+ "type": "way",
+ "id": 238486266,
+ "nodes": [
+ 315790680,
+ 7674103654,
+ 1398733692,
+ 1398733710,
+ 1398733735,
+ 315790679
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Korte Vuldersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.9",
+ "wikidata": "Q2195441",
+ "wikipedia": "nl:Korte Vuldersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 238486280,
+ "nodes": [
+ 310384811,
+ 310384812,
+ 5067375670,
+ 1910151452,
+ 310384813,
+ 4580122483,
+ 4580122485
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Carmersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE-VLG:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.8",
+ "wikidata": "Q2198297",
+ "wikipedia": "nl:Carmersstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 238486282,
+ "nodes": [
+ 7688029840,
+ 5070096027,
+ 310386957
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Speelmansstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "surface": "sett",
+ "width:carriageway": "4.9",
+ "wikidata": "Q2194402",
+ "wikipedia": "nl:Speelmansstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 238486285,
+ "nodes": [
+ 310384810,
+ 1165320165,
+ 5067195523,
+ 310384811
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Carmersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "4.7",
+ "wikidata": "Q2198297",
+ "wikipedia": "nl:Carmersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 238486293,
+ "nodes": [
+ 1789677086,
+ 310386809
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Rijkepijndersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "paving_stones",
+ "width:carriageway": "4.0",
+ "wikidata": "Q1840089",
+ "wikipedia": "nl:Rijkepijndersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 238486295,
+ "nodes": [
+ 310386805,
+ 5069361981,
+ 5069362025,
+ 1789677058,
+ 5069360918,
+ 310386806,
+ 1789677060,
+ 5069362050,
+ 310386807,
+ 5069361795,
+ 310386808,
+ 1789677086
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Rijkepijndersstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "surface": "paving_stones",
+ "width:carriageway": "4.3",
+ "wikidata": "Q1840089",
+ "wikipedia": "nl:Rijkepijndersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 238486296,
+ "nodes": [
+ 2463184369,
+ 3732163709
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Langerei",
+ "source:maxspeed": "BE:zone30",
+ "surface": "paving_stones",
+ "width:carriageway": "2.3",
+ "wikidata": "Q2093650",
+ "wikipedia": "nl:Langerei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 238486298,
+ "nodes": [
+ 271927429,
+ 310384210
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Gillisdorpstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "6.4",
+ "wikidata": "Q2783609",
+ "wikipedia": "nl:Sint-Gillisdorpstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 238486299,
+ "nodes": [
+ 312713005,
+ 312713004
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Augustijnenrei",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.5",
+ "wikidata": "Q2705155",
+ "wikipedia": "nl:Augustijnenrei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 239999536,
+ "nodes": [
+ 26363638,
+ 26343806
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Grauwwerkersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.6",
+ "wikidata": "Q2020143",
+ "wikipedia": "nl:Grauwwerkersstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 239999546,
+ "nodes": [
+ 1976757118,
+ 1976757122,
+ 1976757121,
+ 5625004323,
+ 1976757126,
+ 1976757125,
+ 2477670974
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Willemijnendreef",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "3.0",
+ "wikidata": "Q2112317",
+ "wikipedia": "nl:Willemijnendreef"
+ }
+ },
+ {
+ "type": "way",
+ "id": 247349826,
+ "nodes": [
+ 17422442,
+ 17422443,
+ 17422444
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Rozenhoedkaai",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "sign",
+ "surface": "sett",
+ "width:carriageway": "4.3",
+ "wikidata": "Q2670532",
+ "wikipedia": "nl:Rozenhoedkaai"
+ }
+ },
+ {
+ "type": "way",
+ "id": 300651748,
+ "nodes": [
+ 312715420,
+ 26363625
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Vlamingstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "sign",
+ "surface": "asphalt",
+ "width:carriageway": "5.5",
+ "wikidata": "Q1829055",
+ "wikipedia": "nl:Vlamingstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 300651750,
+ "nodes": [
+ 26343806,
+ 26343809,
+ 5595443792,
+ 26343810,
+ 26343811,
+ 26343812,
+ 26363686
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Grauwwerkersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.1",
+ "wikidata": "Q2020143",
+ "wikipedia": "nl:Grauwwerkersstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 300651752,
+ "nodes": [
+ 1178980261,
+ 312714806,
+ 312714807,
+ 312714808,
+ 312714809
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Naaldenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.9",
+ "wikidata": "Q2597874",
+ "wikipedia": "nl:Naaldenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 300654964,
+ "nodes": [
+ 315741673,
+ 315741426
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Moerstraat",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.6",
+ "wikidata": "Q2170266",
+ "wikipedia": "nl:Moerstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 300655233,
+ "nodes": [
+ 315742704,
+ 315742664
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway:left": "shared_lane",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Beenhouwersstraat",
+ "name:etymology:wikidata": "Q329737",
+ "oneway": "no",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "asphalt",
+ "width:carriageway": "6.1",
+ "wikidata": "Q5062623",
+ "wikipedia": "nl:Beenhouwersstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 305523123,
+ "nodes": [
+ 4044318767,
+ 4044318768
+ ],
+ "tags": {
+ "bridge": "yes",
+ "highway": "unclassified",
+ "layer": "1",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Koningsbrug",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.5"
+ }
+ },
+ {
+ "type": "way",
+ "id": 369428424,
+ "nodes": [
+ 3732163712,
+ 2463184371,
+ 4985396471,
+ 2463184373
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Langerei",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.0",
+ "wikidata": "Q2093650",
+ "wikipedia": "nl:Langerei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 375608228,
+ "nodes": [
+ 3789624905,
+ 315741320
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "bridge": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "layer": "1",
+ "lit": "yes",
+ "loc_name": "Wulvagerstraat",
+ "maxspeed": "30",
+ "name": "Wulfhagestraat",
+ "oneway": "no",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2712813",
+ "wikipedia": "nl:Wulfhagestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 431118054,
+ "nodes": [
+ 2373295010,
+ 2492015563,
+ 315737911,
+ 262555518
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "highway": "secondary",
+ "maxspeed": "30",
+ "name": "Smedenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:left": "parallell_parking",
+ "parking:lane:right": "no_parking",
+ "ref": "N32",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "6.0",
+ "wikidata": "Q2187012",
+ "wikipedia": "nl:Smedenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 485944273,
+ "nodes": [
+ 315739622,
+ 4787008333
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Schutterstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.8"
+ }
+ },
+ {
+ "type": "way",
+ "id": 485944274,
+ "nodes": [
+ 315739621,
+ 5468190514,
+ 5468190513,
+ 5468190516,
+ 4787008333
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Schutterstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.8"
+ }
+ },
+ {
+ "type": "way",
+ "id": 504318135,
+ "nodes": [
+ 2492034924,
+ 312708353,
+ 144293088,
+ 1756316518,
+ 315738044,
+ 5364545433,
+ 144293090
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Hauwerstraat",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "source:maxspeed": "BE:zone30",
+ "surface": "asphalt",
+ "width:carriageway": "7.2",
+ "wikidata": "Q2007277",
+ "wikipedia": "nl:Hauwerstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 508876686,
+ "nodes": [
+ 310384186,
+ 312711523,
+ 7126734983,
+ 1492536187,
+ 312711522
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kleine Hoedenmakersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.6",
+ "wikipedia": "nl:Kleine Hoedenmakersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 527779277,
+ "nodes": [
+ 1107610118,
+ 1728795604,
+ 1685985153,
+ 315739621
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Hugo Losschaertstraat",
+ "name:etymology:wikidata": "Q84850761",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2285930",
+ "wikipedia": "nl:Hugo Losschaertstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 533187140,
+ "nodes": [
+ 310386962,
+ 310386965,
+ 26343722
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Snaggaardstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:both": "no_parking",
+ "surface": "sett",
+ "width:carriageway": "3.9",
+ "wikidata": "Q2339374",
+ "wikipedia": "nl:Snaggaardstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 539442971,
+ "nodes": [
+ 1685985159,
+ 26363741,
+ 4787687913,
+ 5221822088
+ ],
+ "tags": {
+ "cycleway:right": "lane",
+ "cycleway:right:width": "1.25",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Jorisstraat",
+ "name:etymology:wikidata": "Q48438",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q3544890",
+ "wikipedia": "nl:Sint-Jorisstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 539522302,
+ "nodes": [
+ 315741426,
+ 315741411
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Moerstraat",
+ "oneway": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.6",
+ "wikidata": "Q2170266",
+ "wikipedia": "nl:Moerstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 539522852,
+ "nodes": [
+ 315742150,
+ 7560012811,
+ 315742125
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Prinsenhof",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.7",
+ "wikidata": "Q3403687",
+ "wikipedia": "nl:Prinsenhof (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 539681366,
+ "nodes": [
+ 5221822088,
+ 312714071
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Jorisstraat",
+ "name:etymology:wikidata": "Q48438",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "6.8",
+ "wikidata": "Q3544890",
+ "wikipedia": "nl:Sint-Jorisstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 540088309,
+ "nodes": [
+ 26364281,
+ 2379321734,
+ 26343801
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Vlamingstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "sign",
+ "surface": "asphalt",
+ "width:carriageway": "8.5",
+ "wikidata": "Q1829055",
+ "wikipedia": "nl:Vlamingstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 540088310,
+ "nodes": [
+ 2509830664,
+ 26364281
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Vlamingstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "sidewalk:left:width": "0.15",
+ "source:maxspeed": "sign",
+ "surface": "asphalt",
+ "width:carriageway": "6.7",
+ "wikidata": "Q1829055",
+ "wikipedia": "nl:Vlamingstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 540174933,
+ "nodes": [
+ 2477670965,
+ 315738219,
+ 5364545432,
+ 315738225,
+ 5364545431,
+ 315738320,
+ 315738044
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Maagdenstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "website": "https://inventaris.onroerenderfgoed.be/dibe/geheel/12089",
+ "width:carriageway": "5.9",
+ "wikidata": "Q2128492",
+ "wikipedia": "nl:Maagdenstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 540421990,
+ "nodes": [
+ 1492554046,
+ 312714405,
+ 2379279888,
+ 2384097643,
+ 312714404,
+ 312714501,
+ 312714403,
+ 312714402,
+ 26343822
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Spanjaardstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "paving_stones",
+ "width:carriageway": "5.6",
+ "wikidata": "Q2197624",
+ "wikipedia": "nl:Spanjaardstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 540421991,
+ "nodes": [
+ 312711962,
+ 1206268636,
+ 1206268640,
+ 7126783786,
+ 26343785,
+ 7126783787,
+ 26343786
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Oost-Gistelhof",
+ "name:etymology:wikidata": "Q63419362",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "no",
+ "surface": "sett",
+ "width:carriageway": "7.5",
+ "wikidata": "Q2612016",
+ "wikipedia": "nl:Gistelhof"
+ }
+ },
+ {
+ "type": "way",
+ "id": 540451348,
+ "nodes": [
+ 26343777,
+ 26343776,
+ 26343775,
+ 26343774
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Spiegelrei",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.9",
+ "wikidata": "Q2702244",
+ "wikipedia": "nl:Spiegelrei"
+ }
+ },
+ {
+ "type": "way",
+ "id": 540734066,
+ "nodes": [
+ 312711522,
+ 4971141904,
+ 7590403605
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Noord-Gistelhof",
+ "name:etymology:wikidata": "Q63419362",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "5.4",
+ "wikidata": "Q2612016",
+ "wikipedia": "nl:Gistelhof"
+ }
+ },
+ {
+ "type": "way",
+ "id": 540734954,
+ "nodes": [
+ 5230685854,
+ 1913726004,
+ 1165547316,
+ 1165547306,
+ 310387293,
+ 5391303747,
+ 310387294,
+ 1070885339,
+ 1165547327
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Oliebaan",
+ "oneway": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2230274",
+ "wikipedia": "nl:Oliebaan"
+ }
+ },
+ {
+ "type": "way",
+ "id": 541785160,
+ "nodes": [
+ 109936405,
+ 305436021,
+ 305438461,
+ 109928577
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Schaarstraat",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q1926138",
+ "wikipedia": "nl:Schaarstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 542291462,
+ "nodes": [
+ 5243026735,
+ 310384185,
+ 5520910025,
+ 5243026736,
+ 310384183,
+ 310384182
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Hoedenmakersstraat",
+ "oneway": "no",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.3",
+ "wikidata": "Q1922928",
+ "wikipedia": "nl:Hoedenmakersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 586345554,
+ "nodes": [
+ 5602314023,
+ 5602314024,
+ 6561942361,
+ 6561942362,
+ 7027365013
+ ],
+ "tags": {
+ "access": "destination",
+ "highway": "residential",
+ "name": "Eugeen Van Steenkistestraat",
+ "name:etymology:wikidata": "Q57197744",
+ "parking:lane:both": "no_parking",
+ "surface": "paving_stones",
+ "width:carriageway": "4.6"
+ }
+ },
+ {
+ "type": "way",
+ "id": 601555522,
+ "nodes": [
+ 1594444212,
+ 5717002567
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Westmeers",
+ "parking:lane:both": "no_parking",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.5",
+ "wikidata": "Q2104517",
+ "wikipedia": "nl:Westmeers"
+ }
+ },
+ {
+ "type": "way",
+ "id": 630740124,
+ "nodes": [
+ 1435705231,
+ 2541338056,
+ 1680025412
+ ],
+ "tags": {
+ "cycleway": "lane",
+ "cycleway:width": "1.2",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Boeveriestraat",
+ "oneway": "yes",
+ "parking:lane:both": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "11.4",
+ "wikidata": "Q2869372",
+ "wikipedia": "nl:Boeveriestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 645472436,
+ "nodes": [
+ 1435705231,
+ 144295594,
+ 7674094112,
+ 315738321
+ ],
+ "tags": {
+ "cycleway": "lane",
+ "cycleway:width": "1.2",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Boeveriestraat",
+ "oneway": "no",
+ "parking:lane:both": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "10.8",
+ "wikidata": "Q2869372",
+ "wikipedia": "nl:Boeveriestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 657655913,
+ "nodes": [
+ 5732270549,
+ 144295590,
+ 5666296860,
+ 5497440150,
+ 315738046
+ ],
+ "tags": {
+ "cycleway": "shared_lane",
+ "cycleway:width": "1.2",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Boeveriestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "9.0",
+ "wikidata": "Q2869372",
+ "wikipedia": "nl:Boeveriestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 692982429,
+ "nodes": [
+ 315742664,
+ 1732627281,
+ 802395286,
+ 4702024441,
+ 1731869067,
+ 1731869065,
+ 310383761,
+ 310383773,
+ 310383774,
+ 489327705,
+ 7685522175,
+ 315743194,
+ 312716402,
+ 7553524251,
+ 315740876,
+ 312716404,
+ 3684779944
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway:left": "shared_lane",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Beenhouwersstraat",
+ "name:etymology:wikidata": "Q329737",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "surface": "asphalt",
+ "width:carriageway": "5.6",
+ "wikidata": "Q5062623",
+ "wikipedia": "nl:Beenhouwersstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 699882213,
+ "nodes": [
+ 26363687,
+ 315739159
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "maxweight": "3.5",
+ "maxweight:conditional": "12 @ (06:00-11:00,19:00-21:00)",
+ "name": "Ezelstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "source:maxspeed": "BE-VLG:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.6",
+ "wikidata": "Q1991265",
+ "wikipedia": "nl:Ezelstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 757316703,
+ "nodes": [
+ 2495524926,
+ 5732270549
+ ],
+ "tags": {
+ "cycleway:right": "lane",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Boeveriestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "7.5",
+ "wikidata": "Q2869372",
+ "wikipedia": "nl:Boeveriestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 762730434,
+ "nodes": [
+ 312714252,
+ 26343778,
+ 26343777
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxlength": "8",
+ "maxspeed": "30",
+ "name": "Spiegelrei",
+ "oneway": "yes",
+ "oneway:bicycle": "yes",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "4.0",
+ "wikidata": "Q2702244",
+ "wikipedia": "nl:Spiegelrei",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 770857634,
+ "nodes": [
+ 315740951,
+ 5624522027,
+ 7553524250,
+ 315741030
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Gieterijstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "9.1",
+ "wikidata": "Q2679143",
+ "wikipedia": "nl:Gieterijstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 803413377,
+ "nodes": [
+ 1927150828,
+ 312709083,
+ 1927246459,
+ 271930116,
+ 5226749874,
+ 1927313430,
+ 271930118,
+ 1014589661,
+ 1014589649,
+ 5602314023,
+ 298086769,
+ 271930120
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Julius en Maurits Sabbestraat",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "smoothness": "very_good",
+ "surface": "asphalt",
+ "width:carriageway": "8.9",
+ "wikidata": "Q2377865",
+ "wikipedia": "nl:Julius en Maurits Sabbestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 807126042,
+ "nodes": [
+ 312714051,
+ 312712021
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Sint-Clarastraat",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.9",
+ "wikidata": "Q2565507",
+ "wikipedia": "nl:Sint-Clarastraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 807126043,
+ "nodes": [
+ 315739208,
+ 5155766153,
+ 315739216
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Klaverstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "sidewalk:surface": "sett",
+ "surface": "sett",
+ "width:carriageway": "5.1",
+ "wikidata": "Q2254134",
+ "wikipedia": "nl:Klaverstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 807126044,
+ "nodes": [
+ 315739159,
+ 1685484560,
+ 5240131580,
+ 315739208
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Klaverstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk:surface": "sett",
+ "surface": "sett",
+ "width:carriageway": "3.6",
+ "wikidata": "Q2254134",
+ "wikipedia": "nl:Klaverstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 807599374,
+ "nodes": [
+ 7613425763,
+ 5217147996,
+ 5599997071
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Groenestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.4",
+ "wikidata": "Q2251953",
+ "wikipedia": "nl:Groenestraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 807599375,
+ "nodes": [
+ 5599997071,
+ 5678259726,
+ 315740876
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Groenestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.3",
+ "wikidata": "Q2251953",
+ "wikipedia": "nl:Groenestraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 807602048,
+ "nodes": [
+ 315741030,
+ 315740789
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Raamstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.0",
+ "wikidata": "Q3036381",
+ "wikipedia": "nl:Raamstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 807602049,
+ "nodes": [
+ 7552176258,
+ 315740790,
+ 7685447953,
+ 7552176259
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Raamstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.4",
+ "wikidata": "Q3036381",
+ "wikipedia": "nl:Raamstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 807602050,
+ "nodes": [
+ 7552176259,
+ 1164763920,
+ 315740338
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Raamstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.7",
+ "wikidata": "Q3036381",
+ "wikipedia": "nl:Raamstraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 807605392,
+ "nodes": [
+ 7552191173,
+ 802395304,
+ 310383832,
+ 310383774
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Oude Zak",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "surface": "asphalt",
+ "width:carriageway": "5.6",
+ "wikidata": "Q2793691",
+ "wikipedia": "nl:Oude Zak",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 808144584,
+ "nodes": [
+ 17421926,
+ 1588161106,
+ 315741501
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "motor_vehicle:conditional": "no @ (Sa 13:00-18:00; Su[1] 13:00-18:00)",
+ "name": "Geldmuntstraat",
+ "note": "There is no curb for the sidewalk, but as there are a lot of obstacles, the street feels like one which has sidewalks (at least regarding width:carriageway)",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.7",
+ "wikidata": "Q2263733",
+ "wikipedia": "nl:Geldmuntstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812651116,
+ "nodes": [
+ 312712021,
+ 312713834
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Clarastraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "3.8",
+ "wikidata": "Q2565507",
+ "wikipedia": "nl:Sint-Clarastraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812651117,
+ "nodes": [
+ 312713834,
+ 7590356768
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Sint-Clarastraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.9",
+ "wikidata": "Q2565507",
+ "wikipedia": "nl:Sint-Clarastraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812652712,
+ "nodes": [
+ 7590403605,
+ 312711959,
+ 312711957
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Noord-Gistelhof",
+ "name:etymology:wikidata": "Q63419362",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "6.3",
+ "wikidata": "Q2612016",
+ "wikipedia": "nl:Gistelhof"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812936735,
+ "nodes": [
+ 312709480,
+ 1686657161,
+ 312712665,
+ 7593240134
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Baliestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "surface": "sett",
+ "width:carriageway": "3.8",
+ "wikidata": "Q3246467",
+ "wikipedia": "nl:Baliestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812936736,
+ "nodes": [
+ 7593240134,
+ 312711007,
+ 312709481
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Baliestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "surface": "sett",
+ "width:carriageway": "5.7",
+ "wikidata": "Q3246467",
+ "wikipedia": "nl:Baliestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812941133,
+ "nodes": [
+ 312709412,
+ 312709413
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "James Wealestraat",
+ "name:etymology:wikidata": "Q2062803",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "parallel",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "6.7",
+ "wikidata": "Q2196310",
+ "wikipedia": "nl:James Wealestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812941134,
+ "nodes": [
+ 312709413,
+ 7606382704
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "James Wealestraat",
+ "name:etymology:wikidata": "Q2062803",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "parallel",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "6.8",
+ "wikidata": "Q2196310",
+ "wikipedia": "nl:James Wealestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812944138,
+ "nodes": [
+ 312709349,
+ 312709346,
+ 5602301649
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Willem de Dekenstraat",
+ "name:etymology:wikidata": "Q2907281",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "3.8"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812944139,
+ "nodes": [
+ 5602301649,
+ 5373736320,
+ 312709347
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Willem de Dekenstraat",
+ "name:etymology:wikidata": "Q2907281",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "3.3"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812944140,
+ "nodes": [
+ 312709347,
+ 312709348
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Willem de Dekenstraat",
+ "name:etymology:wikidata": "Q2907281",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "5.3"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812951695,
+ "nodes": [
+ 1728795598,
+ 4580122488,
+ 5156123208,
+ 26363709,
+ 315740745,
+ 315739623
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "maxweight": "3.5",
+ "maxweight:conditional": "12 @ (06:00-11:00,19:00-21:00)",
+ "name": "Ezelstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "source:maxspeed": "BE-VLG:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.7",
+ "wikidata": "Q1991265",
+ "wikipedia": "nl:Ezelstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812951696,
+ "nodes": [
+ 7593448255,
+ 1728835427,
+ 1164764140,
+ 5523193063,
+ 1728795598
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "maxweight": "3.5",
+ "maxweight:conditional": "12 @ (06:00-11:00,19:00-21:00)",
+ "name": "Ezelstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "source:maxspeed": "BE-VLG:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.5",
+ "wikidata": "Q1991265",
+ "wikipedia": "nl:Ezelstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812951697,
+ "nodes": [
+ 7593448256,
+ 315741241,
+ 5240131569,
+ 7593448255
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "maxweight": "3.5",
+ "maxweight:conditional": "12 @ (06:00-11:00,19:00-21:00)",
+ "name": "Ezelstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "source:maxspeed": "BE-VLG:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.0",
+ "wikidata": "Q1991265",
+ "wikipedia": "nl:Ezelstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 812951698,
+ "nodes": [
+ 315739159,
+ 6505923909,
+ 7593448256
+ ],
+ "tags": {
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "maxweight": "3.5",
+ "maxweight:conditional": "12 @ (06:00-11:00,19:00-21:00)",
+ "name": "Ezelstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "source:maxspeed": "BE-VLG:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.9",
+ "wikidata": "Q1991265",
+ "wikipedia": "nl:Ezelstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 813954184,
+ "nodes": [
+ 7603400154,
+ 26343781,
+ 26343782,
+ 1789677055,
+ 7126783788,
+ 26343783,
+ 26343785
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Gouden-Handstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "left",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q2479270",
+ "wikipedia": "nl:Gouden-Handstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 813983969,
+ "nodes": [
+ 315739885,
+ 7606329635,
+ 7606329636,
+ 7606329634
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Poitevinstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.1",
+ "wikidata": "Q2279382",
+ "wikipedia": "nl:Poitevinstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 813987447,
+ "nodes": [
+ 26343806,
+ 7603687959
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Pieter Pourbusstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "smoothness": "intermediate",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "vehicle": "destination",
+ "width:carriageway": "4.5",
+ "wikidata": "Q2115120",
+ "wikipedia": "nl:Pieter Pourbusstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 814274453,
+ "nodes": [
+ 315739967,
+ 4977194115,
+ 1728634986,
+ 315739968,
+ 948649934,
+ 312713005
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "foot": "yes",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "motor_vehicle": "destination",
+ "name": "Pottenmakersstraat",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.4",
+ "wikidata": "Q14161820",
+ "wikipedia": "nl:Pottenmakersstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 814274454,
+ "nodes": [
+ 7606329634,
+ 26363613
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Poitevinstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "2.9",
+ "wikidata": "Q2279382",
+ "wikipedia": "nl:Poitevinstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 814274455,
+ "nodes": [
+ 7606329637,
+ 1728634979,
+ 4977194324,
+ 315739967
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "foot": "yes",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "motor_vehicle": "destination",
+ "name": "Pottenmakersstraat",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.5",
+ "wikidata": "Q14161820",
+ "wikipedia": "nl:Pottenmakersstraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 814276895,
+ "nodes": [
+ 312714071,
+ 7606351657
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Vlamingdam",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "6.3",
+ "wikidata": "Q2230099",
+ "wikipedia": "nl:Vlamingdam"
+ }
+ },
+ {
+ "type": "way",
+ "id": 814276896,
+ "nodes": [
+ 7606351657,
+ 315739209,
+ 7606351658,
+ 5521256340,
+ 7606351659
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "tertiary",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Vlamingdam",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "4.5",
+ "wikidata": "Q2230099",
+ "wikipedia": "nl:Vlamingdam"
+ }
+ },
+ {
+ "type": "way",
+ "id": 814278382,
+ "nodes": [
+ 7606382702,
+ 7606382703
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "James Wealestraat",
+ "name:etymology:wikidata": "Q2062803",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "tunnel": "building_passage",
+ "width:carriageway": "3",
+ "wikidata": "Q2196310",
+ "wikipedia": "nl:James Wealestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 814278384,
+ "nodes": [
+ 7606382704,
+ 5241432573,
+ 7606382702
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "James Wealestraat",
+ "name:etymology:wikidata": "Q2062803",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "3",
+ "wikidata": "Q2196310",
+ "wikipedia": "nl:James Wealestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 814308797,
+ "nodes": [
+ 26343793,
+ 26343796,
+ 26343798,
+ 2640820586,
+ 26343801
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kortewinkel",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.3",
+ "wikidata": "Q1976395",
+ "wikipedia": "nl:Kortewinkel"
+ }
+ },
+ {
+ "type": "way",
+ "id": 814333819,
+ "nodes": [
+ 1866130085,
+ 1492558260
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Krom Genthof",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.7",
+ "wikidata": "Q13745987",
+ "wikipedia": "nl:Krom Genthof"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815071516,
+ "nodes": [
+ 7613349436,
+ 310383521,
+ 1732613327,
+ 310383492
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Neststraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "surface": "sett",
+ "width:carriageway": "3.3",
+ "wikidata": "Q13894847",
+ "wikipedia": "nl:Neststraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815075455,
+ "nodes": [
+ 315742945,
+ 310383760,
+ 310383745
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Bollaardstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "3.7",
+ "wikidata": "Q2318716",
+ "wikipedia": "nl:Bollaardstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815076477,
+ "nodes": [
+ 315740949,
+ 7618650552
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Groenestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.4",
+ "wikidata": "Q2251953",
+ "wikipedia": "nl:Groenestraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815735077,
+ "nodes": [
+ 109928608,
+ 5192399682,
+ 5238719836,
+ 109928577
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Coupure",
+ "oneway": "no",
+ "parking:lane:both": "parallel",
+ "sidewalk": "left",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "8.9"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815735601,
+ "nodes": [
+ 271928949,
+ 271928966
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Violierstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2110298",
+ "wikipedia": "nl:Violierstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815738169,
+ "nodes": [
+ 7618388970,
+ 318730633,
+ 5030722509,
+ 271928962,
+ 4294801445,
+ 305436001
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Violierstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2110298",
+ "wikipedia": "nl:Violierstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815739830,
+ "nodes": [
+ 7618472519,
+ 1976757123,
+ 2477670974
+ ],
+ "tags": {
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Willemijnendreef",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "2.7",
+ "wikidata": "Q2112317",
+ "wikipedia": "nl:Willemijnendreef"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815755196,
+ "nodes": [
+ 7618650547,
+ 7618650548,
+ 318730633,
+ 318730662,
+ 318730632,
+ 109928608
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Gapaardstraat",
+ "oneway": "yes",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.2",
+ "wikidata": "Q2421855",
+ "wikipedia": "nl:Gapaardstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815755197,
+ "nodes": [
+ 1731869057,
+ 315742945
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Kleine Kuipersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sidewalk": "none",
+ "surface": "sett",
+ "width:carriageway": "6.5",
+ "wikidata": "Q1847780",
+ "wikipedia": "nl:Kleine Kuipersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 815755198,
+ "nodes": [
+ 7618650552,
+ 7613425763
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Groenestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sett:type": "cubes",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "3.4",
+ "wikidata": "Q2251953",
+ "wikipedia": "nl:Groenestraat (Brugge)"
+ }
+ },
+ {
+ "type": "way",
+ "id": 817923902,
+ "nodes": [
+ 271928696,
+ 7650036981,
+ 7650041885,
+ 305207022
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Waalsestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.7",
+ "wikidata": "Q2482133",
+ "wikipedia": "nl:Waalsestraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 817924422,
+ "nodes": [
+ 305437109,
+ 305438220
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Zwarte Leertouwersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "4.7",
+ "wikidata": "Q2720286",
+ "wikipedia": "nl:Zwarteleertouwersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 817924423,
+ "nodes": [
+ 305438220,
+ 305438219
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Zwarte Leertouwersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "4.9",
+ "wikidata": "Q2720286",
+ "wikipedia": "nl:Zwarteleertouwersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 817924469,
+ "nodes": [
+ 305438220,
+ 305207022
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Waalsestraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.7",
+ "wikidata": "Q2482133",
+ "wikipedia": "nl:Waalsestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 817924997,
+ "nodes": [
+ 271928703,
+ 271928695,
+ 305437110
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Witteleertouwersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.1",
+ "wikidata": "Q1978415",
+ "wikipedia": "nl:Witteleertouwersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 817926056,
+ "nodes": [
+ 305437110,
+ 1165286193,
+ 5044489095,
+ 305438466
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Witteleertouwersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.4",
+ "wikidata": "Q1978415",
+ "wikipedia": "nl:Witteleertouwersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 817927147,
+ "nodes": [
+ 305438511,
+ 1165523945
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Zwarte Leertouwersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "4.3",
+ "wikidata": "Q2720286",
+ "wikipedia": "nl:Zwarteleertouwersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 817927174,
+ "nodes": [
+ 1165523945,
+ 305437109
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "maxspeed": "30",
+ "name": "Zwarte Leertouwersstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "oneway:moped_a": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "5.4",
+ "wikidata": "Q2720286",
+ "wikipedia": "nl:Zwarteleertouwersstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 818456497,
+ "nodes": [
+ 271928696,
+ 305206582
+ ],
+ "tags": {
+ "highway": "pedestrian",
+ "maxspeed": "30",
+ "motor_vehicle": "destination",
+ "motor_vehicle:conditional": "destination @ (06:00-11:00; 19:00-21:00)",
+ "name": "Jozef Suveestraat",
+ "name:etymology:wikidata": "Q2564914",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "sidewalk": "none",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "7.2",
+ "wikidata": "Q2377340",
+ "wikipedia": "nl:Jozef Suvéestraat",
+ "zone:traffic": "BE-VLG:urban"
+ }
+ },
+ {
+ "type": "way",
+ "id": 821884222,
+ "nodes": [
+ 315738321,
+ 315738226,
+ 144295592,
+ 315738046
+ ],
+ "tags": {
+ "cycleway": "lane",
+ "cycleway:width": "1.2",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Boeveriestraat",
+ "oneway": "no",
+ "parking:lane:both": "parallel",
+ "sett:pattern": "arc",
+ "sidewalk": "both",
+ "surface": "sett",
+ "width:carriageway": "9.4",
+ "wikidata": "Q2869372",
+ "wikipedia": "nl:Boeveriestraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 822326730,
+ "nodes": [
+ 7678251513,
+ 318175976,
+ 2373295010
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Leemputstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "6.1",
+ "wikidata": "Q2220265",
+ "wikipedia": "nl:Leemputstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 822327449,
+ "nodes": [
+ 318174957,
+ 7678243786
+ ],
+ "tags": {
+ "bicycle": "yes",
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Greinschuurstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:left": "parallel",
+ "parking:lane:right": "no_parking",
+ "sidewalk": "both",
+ "source:maxspeed": "BE:zone30",
+ "surface": "sett",
+ "width:carriageway": "5.2",
+ "wikidata": "Q2079959",
+ "wikipedia": "nl:Greinschuurstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 823462952,
+ "nodes": [
+ 1165547327,
+ 1070885334
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Oliebaan",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "sett:pattern": "arc",
+ "surface": "sett",
+ "width:carriageway": "2.6",
+ "wikidata": "Q2230274",
+ "wikipedia": "nl:Oliebaan"
+ }
+ },
+ {
+ "type": "way",
+ "id": 823464281,
+ "nodes": [
+ 310386962,
+ 310387100,
+ 310387101
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Gotje",
+ "oneway": "no",
+ "parking:lane:left": "no_parking",
+ "parking:lane:right": "parallel",
+ "surface": "sett",
+ "width:carriageway": "5.0",
+ "wikidata": "Q5554763",
+ "wikipedia": "nl:Gotje"
+ }
+ },
+ {
+ "type": "way",
+ "id": 823477844,
+ "nodes": [
+ 310384811,
+ 7688029840
+ ],
+ "tags": {
+ "cycleway": "opposite",
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Speelmansstraat",
+ "oneway": "yes",
+ "oneway:bicycle": "no",
+ "parking:lane:both": "no_parking",
+ "surface": "sett",
+ "width:carriageway": "3.7",
+ "wikidata": "Q2194402",
+ "wikipedia": "nl:Speelmansstraat"
+ }
+ },
+ {
+ "type": "way",
+ "id": 823483311,
+ "nodes": [
+ 310384700,
+ 310387611,
+ 5072243352,
+ 310387613,
+ 310387614
+ ],
+ "tags": {
+ "highway": "residential",
+ "lit": "yes",
+ "maxspeed": "30",
+ "name": "Leestenburg",
+ "oneway": "no",
+ "parking:lane:both": "no_parking",
+ "surface": "asphalt",
+ "width:carriageway": "5.8",
+ "wikidata": "Q2533290",
+ "wikipedia": "nl:Leestenburg"
+ }
+ },
+ {
+ "type": "node",
+ "id": 144293088,
+ "lat": 51.2039630,
+ "lon": 3.2154953
+ },
+ {
+ "type": "node",
+ "id": 144293090,
+ "lat": 51.2034488,
+ "lon": 3.2138478
+ },
+ {
+ "type": "node",
+ "id": 144294421,
+ "lat": 51.2005861,
+ "lon": 3.2155399
+ },
+ {
+ "type": "node",
+ "id": 144294459,
+ "lat": 51.2029675,
+ "lon": 3.2141268
+ },
+ {
+ "type": "node",
+ "id": 144294461,
+ "lat": 51.2019951,
+ "lon": 3.2146721
+ },
+ {
+ "type": "node",
+ "id": 144295590,
+ "lat": 51.2014435,
+ "lon": 3.2158554
+ },
+ {
+ "type": "node",
+ "id": 144295592,
+ "lat": 51.2023469,
+ "lon": 3.2159777
+ },
+ {
+ "type": "node",
+ "id": 144295594,
+ "lat": 51.2033548,
+ "lon": 3.2164362
+ },
+ {
+ "type": "node",
+ "id": 262555518,
+ "lat": 51.2047882,
+ "lon": 3.2130679
+ },
+ {
+ "type": "node",
+ "id": 310383481,
+ "lat": 51.2041789,
+ "lon": 3.2134286
+ },
+ {
+ "type": "node",
+ "id": 312708353,
+ "lat": 51.2041945,
+ "lon": 3.2161764
+ },
+ {
+ "type": "node",
+ "id": 315737911,
+ "lat": 51.2049097,
+ "lon": 3.2134721
+ },
+ {
+ "type": "node",
+ "id": 315738043,
+ "lat": 51.2043128,
+ "lon": 3.2139377
+ },
+ {
+ "type": "node",
+ "id": 315738044,
+ "lat": 51.2036421,
+ "lon": 3.2144651
+ },
+ {
+ "type": "node",
+ "id": 315738046,
+ "lat": 51.2020427,
+ "lon": 3.2159187
+ },
+ {
+ "type": "node",
+ "id": 315738219,
+ "lat": 51.2020360,
+ "lon": 3.2156564
+ },
+ {
+ "type": "node",
+ "id": 315738220,
+ "lat": 51.2024075,
+ "lon": 3.2144469
+ },
+ {
+ "type": "node",
+ "id": 315738225,
+ "lat": 51.2025925,
+ "lon": 3.2152478
+ },
+ {
+ "type": "node",
+ "id": 315738226,
+ "lat": 51.2026339,
+ "lon": 3.2160748
+ },
+ {
+ "type": "node",
+ "id": 315738320,
+ "lat": 51.2031285,
+ "lon": 3.2148500
+ },
+ {
+ "type": "node",
+ "id": 315738321,
+ "lat": 51.2031196,
+ "lon": 3.2162500
+ },
+ {
+ "type": "node",
+ "id": 318174957,
+ "lat": 51.2064476,
+ "lon": 3.2138865
+ },
+ {
+ "type": "node",
+ "id": 318175144,
+ "lat": 51.2057074,
+ "lon": 3.2163888
+ },
+ {
+ "type": "node",
+ "id": 318175166,
+ "lat": 51.2056529,
+ "lon": 3.2159252
+ },
+ {
+ "type": "node",
+ "id": 318175497,
+ "lat": 51.2055853,
+ "lon": 3.2155580
+ },
+ {
+ "type": "node",
+ "id": 318175503,
+ "lat": 51.2054415,
+ "lon": 3.2150982
+ },
+ {
+ "type": "node",
+ "id": 318175743,
+ "lat": 51.2053839,
+ "lon": 3.2131689
+ },
+ {
+ "type": "node",
+ "id": 318175976,
+ "lat": 51.2053677,
+ "lon": 3.2144067
+ },
+ {
+ "type": "node",
+ "id": 771807754,
+ "lat": 51.2060602,
+ "lon": 3.2175434
+ },
+ {
+ "type": "node",
+ "id": 1167190149,
+ "lat": 51.2007423,
+ "lon": 3.2153839
+ },
+ {
+ "type": "node",
+ "id": 1167190213,
+ "lat": 51.2006718,
+ "lon": 3.2154400
+ },
+ {
+ "type": "node",
+ "id": 1172056001,
+ "lat": 51.2064811,
+ "lon": 3.2171976
+ },
+ {
+ "type": "node",
+ "id": 1172056004,
+ "lat": 51.2063315,
+ "lon": 3.2173224
+ },
+ {
+ "type": "node",
+ "id": 1172772713,
+ "lat": 51.2059541,
+ "lon": 3.2162917
+ },
+ {
+ "type": "node",
+ "id": 1435705231,
+ "lat": 51.2037055,
+ "lon": 3.2167652
+ },
+ {
+ "type": "node",
+ "id": 1476999119,
+ "lat": 51.2031753,
+ "lon": 3.2151417
+ },
+ {
+ "type": "node",
+ "id": 1476999144,
+ "lat": 51.2053820,
+ "lon": 3.2137527
+ },
+ {
+ "type": "node",
+ "id": 1476999169,
+ "lat": 51.2064921,
+ "lon": 3.2145290
+ },
+ {
+ "type": "node",
+ "id": 1675757218,
+ "lat": 51.2026499,
+ "lon": 3.2156849
+ },
+ {
+ "type": "node",
+ "id": 1680025412,
+ "lat": 51.2041337,
+ "lon": 3.2172145
+ },
+ {
+ "type": "node",
+ "id": 1708356149,
+ "lat": 51.2060077,
+ "lon": 3.2175813
+ },
+ {
+ "type": "node",
+ "id": 1756316518,
+ "lat": 51.2038120,
+ "lon": 3.2150006
+ },
+ {
+ "type": "node",
+ "id": 2373295004,
+ "lat": 51.2063501,
+ "lon": 3.2155839
+ },
+ {
+ "type": "node",
+ "id": 2373295005,
+ "lat": 51.2055332,
+ "lon": 3.2150418
+ },
+ {
+ "type": "node",
+ "id": 2373295010,
+ "lat": 51.2052355,
+ "lon": 3.2145081
+ },
+ {
+ "type": "node",
+ "id": 2373924765,
+ "lat": 51.2054222,
+ "lon": 3.2143909
+ },
+ {
+ "type": "node",
+ "id": 2373972118,
+ "lat": 51.2060448,
+ "lon": 3.2147484
+ },
+ {
+ "type": "node",
+ "id": 2477670965,
+ "lat": 51.2020423,
+ "lon": 3.2158700
+ },
+ {
+ "type": "node",
+ "id": 2492015563,
+ "lat": 51.2052130,
+ "lon": 3.2144385
+ },
+ {
+ "type": "node",
+ "id": 2492034924,
+ "lat": 51.2043937,
+ "lon": 3.2168032
+ },
+ {
+ "type": "node",
+ "id": 2495524926,
+ "lat": 51.2007565,
+ "lon": 3.2156596
+ },
+ {
+ "type": "node",
+ "id": 2495524935,
+ "lat": 51.2031267,
+ "lon": 3.2162167
+ },
+ {
+ "type": "node",
+ "id": 2495524950,
+ "lat": 51.2026371,
+ "lon": 3.2160372
+ },
+ {
+ "type": "node",
+ "id": 2541338056,
+ "lat": 51.2038922,
+ "lon": 3.2169426
+ },
+ {
+ "type": "node",
+ "id": 4979578509,
+ "lat": 51.2058608,
+ "lon": 3.2163378
+ },
+ {
+ "type": "node",
+ "id": 5221762246,
+ "lat": 51.2056742,
+ "lon": 3.2132218
+ },
+ {
+ "type": "node",
+ "id": 5364545430,
+ "lat": 51.2020065,
+ "lon": 3.2147556
+ },
+ {
+ "type": "node",
+ "id": 5364545431,
+ "lat": 51.2026657,
+ "lon": 3.2152149
+ },
+ {
+ "type": "node",
+ "id": 5364545432,
+ "lat": 51.2025405,
+ "lon": 3.2152712
+ },
+ {
+ "type": "node",
+ "id": 5364545433,
+ "lat": 51.2034665,
+ "lon": 3.2139321
+ },
+ {
+ "type": "node",
+ "id": 5497440150,
+ "lat": 51.2018776,
+ "lon": 3.2159013
+ },
+ {
+ "type": "node",
+ "id": 5666296843,
+ "lat": 51.2009467,
+ "lon": 3.2152678
+ },
+ {
+ "type": "node",
+ "id": 5666296845,
+ "lat": 51.2010334,
+ "lon": 3.2152174
+ },
+ {
+ "type": "node",
+ "id": 5666296860,
+ "lat": 51.2014759,
+ "lon": 3.2158588
+ },
+ {
+ "type": "node",
+ "id": 5732270549,
+ "lat": 51.2013365,
+ "lon": 3.2158240
+ },
+ {
+ "type": "node",
+ "id": 7674094112,
+ "lat": 51.2032359,
+ "lon": 3.2163267
+ },
+ {
+ "type": "node",
+ "id": 7678243786,
+ "lat": 51.2059480,
+ "lon": 3.2141323
+ },
+ {
+ "type": "node",
+ "id": 7678251513,
+ "lat": 51.2053793,
+ "lon": 3.2138781
+ },
+ {
+ "type": "node",
+ "id": 26344337,
+ "lat": 51.2050369,
+ "lon": 3.2211084
+ },
+ {
+ "type": "node",
+ "id": 26362453,
+ "lat": 51.2061473,
+ "lon": 3.2213824
+ },
+ {
+ "type": "node",
+ "id": 183415523,
+ "lat": 51.2039889,
+ "lon": 3.2207842
+ },
+ {
+ "type": "node",
+ "id": 262550785,
+ "lat": 51.2039370,
+ "lon": 3.2197691
+ },
+ {
+ "type": "node",
+ "id": 305434446,
+ "lat": 51.2033593,
+ "lon": 3.2208370
+ },
+ {
+ "type": "node",
+ "id": 305434479,
+ "lat": 51.2034099,
+ "lon": 3.2198783
+ },
+ {
+ "type": "node",
+ "id": 305434498,
+ "lat": 51.2036480,
+ "lon": 3.2207831
+ },
+ {
+ "type": "node",
+ "id": 305434546,
+ "lat": 51.2036718,
+ "lon": 3.2198203
+ },
+ {
+ "type": "node",
+ "id": 315788024,
+ "lat": 51.2057960,
+ "lon": 3.2208159
+ },
+ {
+ "type": "node",
+ "id": 315790675,
+ "lat": 51.2049674,
+ "lon": 3.2206685
+ },
+ {
+ "type": "node",
+ "id": 315790677,
+ "lat": 51.2048554,
+ "lon": 3.2202995
+ },
+ {
+ "type": "node",
+ "id": 315790679,
+ "lat": 51.2048010,
+ "lon": 3.2196501
+ },
+ {
+ "type": "node",
+ "id": 315790680,
+ "lat": 51.2048658,
+ "lon": 3.2187746
+ },
+ {
+ "type": "node",
+ "id": 315790740,
+ "lat": 51.2051784,
+ "lon": 3.2185583
+ },
+ {
+ "type": "node",
+ "id": 315790939,
+ "lat": 51.2044310,
+ "lon": 3.2190475
+ },
+ {
+ "type": "node",
+ "id": 315790941,
+ "lat": 51.2044536,
+ "lon": 3.2196875
+ },
+ {
+ "type": "node",
+ "id": 766773072,
+ "lat": 51.2060148,
+ "lon": 3.2211708
+ },
+ {
+ "type": "node",
+ "id": 1172796108,
+ "lat": 51.2048036,
+ "lon": 3.2199461
+ },
+ {
+ "type": "node",
+ "id": 1398733692,
+ "lat": 51.2048663,
+ "lon": 3.2190040
+ },
+ {
+ "type": "node",
+ "id": 1398733710,
+ "lat": 51.2048578,
+ "lon": 3.2191719
+ },
+ {
+ "type": "node",
+ "id": 1398733735,
+ "lat": 51.2048415,
+ "lon": 3.2193091
+ },
+ {
+ "type": "node",
+ "id": 1594444212,
+ "lat": 51.2044145,
+ "lon": 3.2196917
+ },
+ {
+ "type": "node",
+ "id": 3102844915,
+ "lat": 51.2036487,
+ "lon": 3.2206095
+ },
+ {
+ "type": "node",
+ "id": 5017010016,
+ "lat": 51.2048331,
+ "lon": 3.2201753
+ },
+ {
+ "type": "node",
+ "id": 5462731466,
+ "lat": 51.2050090,
+ "lon": 3.2209022
+ },
+ {
+ "type": "node",
+ "id": 5717002567,
+ "lat": 51.2041586,
+ "lon": 3.2197333
+ },
+ {
+ "type": "node",
+ "id": 7674103654,
+ "lat": 51.2048727,
+ "lon": 3.2188828
+ },
+ {
+ "type": "node",
+ "id": 262555628,
+ "lat": 51.2077896,
+ "lon": 3.2136362
+ },
+ {
+ "type": "node",
+ "id": 262555629,
+ "lat": 51.2092114,
+ "lon": 3.2139161
+ },
+ {
+ "type": "node",
+ "id": 310383492,
+ "lat": 51.2072393,
+ "lon": 3.2172442
+ },
+ {
+ "type": "node",
+ "id": 310383493,
+ "lat": 51.2069610,
+ "lon": 3.2170908
+ },
+ {
+ "type": "node",
+ "id": 310383521,
+ "lat": 51.2072510,
+ "lon": 3.2170109
+ },
+ {
+ "type": "node",
+ "id": 310383522,
+ "lat": 51.2073510,
+ "lon": 3.2169189
+ },
+ {
+ "type": "node",
+ "id": 310383523,
+ "lat": 51.2076783,
+ "lon": 3.2166159
+ },
+ {
+ "type": "node",
+ "id": 310383535,
+ "lat": 51.2075014,
+ "lon": 3.2161335
+ },
+ {
+ "type": "node",
+ "id": 310383743,
+ "lat": 51.2083307,
+ "lon": 3.2158736
+ },
+ {
+ "type": "node",
+ "id": 310383745,
+ "lat": 51.2089829,
+ "lon": 3.2157495
+ },
+ {
+ "type": "node",
+ "id": 310383760,
+ "lat": 51.2090272,
+ "lon": 3.2160299
+ },
+ {
+ "type": "node",
+ "id": 310383761,
+ "lat": 51.2092374,
+ "lon": 3.2167779
+ },
+ {
+ "type": "node",
+ "id": 310383773,
+ "lat": 51.2094684,
+ "lon": 3.2165947
+ },
+ {
+ "type": "node",
+ "id": 310383774,
+ "lat": 51.2097473,
+ "lon": 3.2163970
+ },
+ {
+ "type": "node",
+ "id": 310383832,
+ "lat": 51.2099970,
+ "lon": 3.2171343
+ },
+ {
+ "type": "node",
+ "id": 312716402,
+ "lat": 51.2104512,
+ "lon": 3.2158230
+ },
+ {
+ "type": "node",
+ "id": 312716404,
+ "lat": 51.2115237,
+ "lon": 3.2147612
+ },
+ {
+ "type": "node",
+ "id": 315740876,
+ "lat": 51.2110294,
+ "lon": 3.2152891
+ },
+ {
+ "type": "node",
+ "id": 315740949,
+ "lat": 51.2117046,
+ "lon": 3.2173374
+ },
+ {
+ "type": "node",
+ "id": 315740950,
+ "lat": 51.2124116,
+ "lon": 3.2166297
+ },
+ {
+ "type": "node",
+ "id": 315740951,
+ "lat": 51.2129313,
+ "lon": 3.2165261
+ },
+ {
+ "type": "node",
+ "id": 315742568,
+ "lat": 51.2071696,
+ "lon": 3.2164725
+ },
+ {
+ "type": "node",
+ "id": 315742664,
+ "lat": 51.2080700,
+ "lon": 3.2176277
+ },
+ {
+ "type": "node",
+ "id": 315742705,
+ "lat": 51.2073036,
+ "lon": 3.2172966
+ },
+ {
+ "type": "node",
+ "id": 315742796,
+ "lat": 51.2067030,
+ "lon": 3.2167723
+ },
+ {
+ "type": "node",
+ "id": 315742821,
+ "lat": 51.2095906,
+ "lon": 3.2158264
+ },
+ {
+ "type": "node",
+ "id": 315742825,
+ "lat": 51.2078183,
+ "lon": 3.2169517
+ },
+ {
+ "type": "node",
+ "id": 315742944,
+ "lat": 51.2082977,
+ "lon": 3.2166072
+ },
+ {
+ "type": "node",
+ "id": 315742945,
+ "lat": 51.2090861,
+ "lon": 3.2162406
+ },
+ {
+ "type": "node",
+ "id": 315743074,
+ "lat": 51.2094685,
+ "lon": 3.2145783
+ },
+ {
+ "type": "node",
+ "id": 315743194,
+ "lat": 51.2104008,
+ "lon": 3.2158607
+ },
+ {
+ "type": "node",
+ "id": 318174636,
+ "lat": 51.2082319,
+ "lon": 3.2153408
+ },
+ {
+ "type": "node",
+ "id": 318174653,
+ "lat": 51.2074665,
+ "lon": 3.2160172
+ },
+ {
+ "type": "node",
+ "id": 318174956,
+ "lat": 51.2072395,
+ "lon": 3.2155346
+ },
+ {
+ "type": "node",
+ "id": 318175383,
+ "lat": 51.2070587,
+ "lon": 3.2151721
+ },
+ {
+ "type": "node",
+ "id": 318175386,
+ "lat": 51.2068706,
+ "lon": 3.2147797
+ },
+ {
+ "type": "node",
+ "id": 318175622,
+ "lat": 51.2066810,
+ "lon": 3.2143959
+ },
+ {
+ "type": "node",
+ "id": 318176136,
+ "lat": 51.2068457,
+ "lon": 3.2134351
+ },
+ {
+ "type": "node",
+ "id": 489327705,
+ "lat": 51.2100273,
+ "lon": 3.2161503
+ },
+ {
+ "type": "node",
+ "id": 802395286,
+ "lat": 51.2085493,
+ "lon": 3.2173121
+ },
+ {
+ "type": "node",
+ "id": 802395304,
+ "lat": 51.2101505,
+ "lon": 3.2175093
+ },
+ {
+ "type": "node",
+ "id": 894038785,
+ "lat": 51.2070890,
+ "lon": 3.2152183
+ },
+ {
+ "type": "node",
+ "id": 894038794,
+ "lat": 51.2079488,
+ "lon": 3.2143912
+ },
+ {
+ "type": "node",
+ "id": 902318889,
+ "lat": 51.2098348,
+ "lon": 3.2143236
+ },
+ {
+ "type": "node",
+ "id": 1476999112,
+ "lat": 51.2086936,
+ "lon": 3.2157651
+ },
+ {
+ "type": "node",
+ "id": 1476999172,
+ "lat": 51.2097840,
+ "lon": 3.2158906
+ },
+ {
+ "type": "node",
+ "id": 1510095415,
+ "lat": 51.2081226,
+ "lon": 3.2166840
+ },
+ {
+ "type": "node",
+ "id": 1510095417,
+ "lat": 51.2099028,
+ "lon": 3.2159664
+ },
+ {
+ "type": "node",
+ "id": 1510095420,
+ "lat": 51.2091690,
+ "lon": 3.2164818
+ },
+ {
+ "type": "node",
+ "id": 1510095421,
+ "lat": 51.2093959,
+ "lon": 3.2157849
+ },
+ {
+ "type": "node",
+ "id": 1679583578,
+ "lat": 51.2074341,
+ "lon": 3.2159541
+ },
+ {
+ "type": "node",
+ "id": 1680025415,
+ "lat": 51.2082014,
+ "lon": 3.2152363
+ },
+ {
+ "type": "node",
+ "id": 1680025465,
+ "lat": 51.2075311,
+ "lon": 3.2162328
+ },
+ {
+ "type": "node",
+ "id": 1731548813,
+ "lat": 51.2099780,
+ "lon": 3.2147466
+ },
+ {
+ "type": "node",
+ "id": 1731548883,
+ "lat": 51.2101040,
+ "lon": 3.2150767
+ },
+ {
+ "type": "node",
+ "id": 1731851868,
+ "lat": 51.2094883,
+ "lon": 3.2146756
+ },
+ {
+ "type": "node",
+ "id": 1731869049,
+ "lat": 51.2092061,
+ "lon": 3.2157527
+ },
+ {
+ "type": "node",
+ "id": 1731869054,
+ "lat": 51.2097027,
+ "lon": 3.2158587
+ },
+ {
+ "type": "node",
+ "id": 1731869055,
+ "lat": 51.2090365,
+ "lon": 3.2157452
+ },
+ {
+ "type": "node",
+ "id": 1731869057,
+ "lat": 51.2085434,
+ "lon": 3.2165127
+ },
+ {
+ "type": "node",
+ "id": 1731869062,
+ "lat": 51.2081907,
+ "lon": 3.2166445
+ },
+ {
+ "type": "node",
+ "id": 1731869065,
+ "lat": 51.2090134,
+ "lon": 3.2169195
+ },
+ {
+ "type": "node",
+ "id": 1731869067,
+ "lat": 51.2088334,
+ "lon": 3.2170798
+ },
+ {
+ "type": "node",
+ "id": 1731869079,
+ "lat": 51.2080581,
+ "lon": 3.2167317
+ },
+ {
+ "type": "node",
+ "id": 1732613327,
+ "lat": 51.2072460,
+ "lon": 3.2171477
+ },
+ {
+ "type": "node",
+ "id": 1732613335,
+ "lat": 51.2076978,
+ "lon": 3.2177442
+ },
+ {
+ "type": "node",
+ "id": 1732627281,
+ "lat": 51.2082321,
+ "lon": 3.2175210
+ },
+ {
+ "type": "node",
+ "id": 1736923439,
+ "lat": 51.2129366,
+ "lon": 3.2164516
+ },
+ {
+ "type": "node",
+ "id": 1736925302,
+ "lat": 51.2118264,
+ "lon": 3.2176195
+ },
+ {
+ "type": "node",
+ "id": 1737342480,
+ "lat": 51.2113815,
+ "lon": 3.2177906
+ },
+ {
+ "type": "node",
+ "id": 1743328898,
+ "lat": 51.2068992,
+ "lon": 3.2157479
+ },
+ {
+ "type": "node",
+ "id": 1743361457,
+ "lat": 51.2072631,
+ "lon": 3.2155856
+ },
+ {
+ "type": "node",
+ "id": 1743361461,
+ "lat": 51.2077087,
+ "lon": 3.2151448
+ },
+ {
+ "type": "node",
+ "id": 1976817915,
+ "lat": 51.2131149,
+ "lon": 3.2150063
+ },
+ {
+ "type": "node",
+ "id": 2373972132,
+ "lat": 51.2066234,
+ "lon": 3.2149580
+ },
+ {
+ "type": "node",
+ "id": 2491531581,
+ "lat": 51.2071766,
+ "lon": 3.2165061
+ },
+ {
+ "type": "node",
+ "id": 2506128491,
+ "lat": 51.2072547,
+ "lon": 3.2168119
+ },
+ {
+ "type": "node",
+ "id": 2517460453,
+ "lat": 51.2067206,
+ "lon": 3.2168053
+ },
+ {
+ "type": "node",
+ "id": 3684779944,
+ "lat": 51.2116338,
+ "lon": 3.2146448
+ },
+ {
+ "type": "node",
+ "id": 4702024441,
+ "lat": 51.2085957,
+ "lon": 3.2172741
+ },
+ {
+ "type": "node",
+ "id": 4976026149,
+ "lat": 51.2099403,
+ "lon": 3.2158672
+ },
+ {
+ "type": "node",
+ "id": 4979624579,
+ "lat": 51.2069109,
+ "lon": 3.2169867
+ },
+ {
+ "type": "node",
+ "id": 4979629649,
+ "lat": 51.2070169,
+ "lon": 3.2171073
+ },
+ {
+ "type": "node",
+ "id": 5217147996,
+ "lat": 51.2114796,
+ "lon": 3.2166732
+ },
+ {
+ "type": "node",
+ "id": 5221762243,
+ "lat": 51.2069724,
+ "lon": 3.2134621
+ },
+ {
+ "type": "node",
+ "id": 5521131636,
+ "lat": 51.2118503,
+ "lon": 3.2176897
+ },
+ {
+ "type": "node",
+ "id": 5599997071,
+ "lat": 51.2114715,
+ "lon": 3.2166484
+ },
+ {
+ "type": "node",
+ "id": 5624522027,
+ "lat": 51.2129291,
+ "lon": 3.2166259
+ },
+ {
+ "type": "node",
+ "id": 5647687234,
+ "lat": 51.2087981,
+ "lon": 3.2157595
+ },
+ {
+ "type": "node",
+ "id": 5678259726,
+ "lat": 51.2112886,
+ "lon": 3.2160861
+ },
+ {
+ "type": "node",
+ "id": 5678259729,
+ "lat": 51.2121827,
+ "lon": 3.2168560
+ },
+ {
+ "type": "node",
+ "id": 5709000728,
+ "lat": 51.2073871,
+ "lon": 3.2135505
+ },
+ {
+ "type": "node",
+ "id": 7425843431,
+ "lat": 51.2078754,
+ "lon": 3.2171050
+ },
+ {
+ "type": "node",
+ "id": 7553524250,
+ "lat": 51.2129802,
+ "lon": 3.2168190
+ },
+ {
+ "type": "node",
+ "id": 7553524251,
+ "lat": 51.2106515,
+ "lon": 3.2156381
+ },
+ {
+ "type": "node",
+ "id": 7613349436,
+ "lat": 51.2072517,
+ "lon": 3.2169746
+ },
+ {
+ "type": "node",
+ "id": 7613425763,
+ "lat": 51.2115690,
+ "lon": 3.2169479
+ },
+ {
+ "type": "node",
+ "id": 7618650552,
+ "lat": 51.2116324,
+ "lon": 3.2171427
+ },
+ {
+ "type": "node",
+ "id": 7685522174,
+ "lat": 51.2099955,
+ "lon": 3.2160330
+ },
+ {
+ "type": "node",
+ "id": 7685522175,
+ "lat": 51.2100331,
+ "lon": 3.2161458
+ },
+ {
+ "type": "node",
+ "id": 17421081,
+ "lat": 51.2083532,
+ "lon": 3.2211776
+ },
+ {
+ "type": "node",
+ "id": 17421303,
+ "lat": 51.2077144,
+ "lon": 3.2233305
+ },
+ {
+ "type": "node",
+ "id": 17421926,
+ "lat": 51.2092201,
+ "lon": 3.2228441
+ },
+ {
+ "type": "node",
+ "id": 26343793,
+ "lat": 51.2128607,
+ "lon": 3.2243534
+ },
+ {
+ "type": "node",
+ "id": 26343796,
+ "lat": 51.2126368,
+ "lon": 3.2240649
+ },
+ {
+ "type": "node",
+ "id": 26343798,
+ "lat": 51.2123502,
+ "lon": 3.2235613
+ },
+ {
+ "type": "node",
+ "id": 26343801,
+ "lat": 51.2121633,
+ "lon": 3.2230993
+ },
+ {
+ "type": "node",
+ "id": 26343806,
+ "lat": 51.2116247,
+ "lon": 3.2223925
+ },
+ {
+ "type": "node",
+ "id": 26343809,
+ "lat": 51.2117969,
+ "lon": 3.2216889
+ },
+ {
+ "type": "node",
+ "id": 26343810,
+ "lat": 51.2118025,
+ "lon": 3.2215339
+ },
+ {
+ "type": "node",
+ "id": 26343811,
+ "lat": 51.2117446,
+ "lon": 3.2213817
+ },
+ {
+ "type": "node",
+ "id": 26343812,
+ "lat": 51.2115957,
+ "lon": 3.2210570
+ },
+ {
+ "type": "node",
+ "id": 26343816,
+ "lat": 51.2109244,
+ "lon": 3.2208275
+ },
+ {
+ "type": "node",
+ "id": 26363613,
+ "lat": 51.2127405,
+ "lon": 3.2218670
+ },
+ {
+ "type": "node",
+ "id": 26363625,
+ "lat": 51.2123268,
+ "lon": 3.2227544
+ },
+ {
+ "type": "node",
+ "id": 26363632,
+ "lat": 51.2106994,
+ "lon": 3.2204036
+ },
+ {
+ "type": "node",
+ "id": 26363638,
+ "lat": 51.2114190,
+ "lon": 3.2228966
+ },
+ {
+ "type": "node",
+ "id": 26363677,
+ "lat": 51.2107714,
+ "lon": 3.2205311
+ },
+ {
+ "type": "node",
+ "id": 26363686,
+ "lat": 51.2114113,
+ "lon": 3.2207362
+ },
+ {
+ "type": "node",
+ "id": 26363727,
+ "lat": 51.2128924,
+ "lon": 3.2217866
+ },
+ {
+ "type": "node",
+ "id": 26363743,
+ "lat": 51.2104333,
+ "lon": 3.2201612
+ },
+ {
+ "type": "node",
+ "id": 26363768,
+ "lat": 51.2113070,
+ "lon": 3.2240700
+ },
+ {
+ "type": "node",
+ "id": 26363809,
+ "lat": 51.2124631,
+ "lon": 3.2223932
+ },
+ {
+ "type": "node",
+ "id": 26364281,
+ "lat": 51.2117436,
+ "lon": 3.2236846
+ },
+ {
+ "type": "node",
+ "id": 26364283,
+ "lat": 51.2125691,
+ "lon": 3.2221344
+ },
+ {
+ "type": "node",
+ "id": 33824884,
+ "lat": 51.2077965,
+ "lon": 3.2206247
+ },
+ {
+ "type": "node",
+ "id": 144296222,
+ "lat": 51.2066880,
+ "lon": 3.2192500
+ },
+ {
+ "type": "node",
+ "id": 310383833,
+ "lat": 51.2105295,
+ "lon": 3.2184553
+ },
+ {
+ "type": "node",
+ "id": 310383834,
+ "lat": 51.2108154,
+ "lon": 3.2190547
+ },
+ {
+ "type": "node",
+ "id": 310383835,
+ "lat": 51.2116120,
+ "lon": 3.2203958
+ },
+ {
+ "type": "node",
+ "id": 312713003,
+ "lat": 51.2129600,
+ "lon": 3.2239359
+ },
+ {
+ "type": "node",
+ "id": 312713004,
+ "lat": 51.2126212,
+ "lon": 3.2231109
+ },
+ {
+ "type": "node",
+ "id": 312713005,
+ "lat": 51.2123900,
+ "lon": 3.2225945
+ },
+ {
+ "type": "node",
+ "id": 312714475,
+ "lat": 51.2111577,
+ "lon": 3.2241343
+ },
+ {
+ "type": "node",
+ "id": 312714506,
+ "lat": 51.2120902,
+ "lon": 3.2242954
+ },
+ {
+ "type": "node",
+ "id": 312714507,
+ "lat": 51.2119125,
+ "lon": 3.2241442
+ },
+ {
+ "type": "node",
+ "id": 312714780,
+ "lat": 51.2097844,
+ "lon": 3.2217881
+ },
+ {
+ "type": "node",
+ "id": 312714805,
+ "lat": 51.2100428,
+ "lon": 3.2220294
+ },
+ {
+ "type": "node",
+ "id": 312714806,
+ "lat": 51.2105419,
+ "lon": 3.2221128
+ },
+ {
+ "type": "node",
+ "id": 312714807,
+ "lat": 51.2109246,
+ "lon": 3.2222317
+ },
+ {
+ "type": "node",
+ "id": 312714808,
+ "lat": 51.2110633,
+ "lon": 3.2223588
+ },
+ {
+ "type": "node",
+ "id": 312714809,
+ "lat": 51.2111954,
+ "lon": 3.2225808
+ },
+ {
+ "type": "node",
+ "id": 312714859,
+ "lat": 51.2111125,
+ "lon": 3.2241259
+ },
+ {
+ "type": "node",
+ "id": 312714860,
+ "lat": 51.2111226,
+ "lon": 3.2240268
+ },
+ {
+ "type": "node",
+ "id": 312714861,
+ "lat": 51.2111536,
+ "lon": 3.2235337
+ },
+ {
+ "type": "node",
+ "id": 312714862,
+ "lat": 51.2112495,
+ "lon": 3.2232807
+ },
+ {
+ "type": "node",
+ "id": 312715176,
+ "lat": 51.2108682,
+ "lon": 3.2242202
+ },
+ {
+ "type": "node",
+ "id": 312715420,
+ "lat": 51.2121945,
+ "lon": 3.2230416
+ },
+ {
+ "type": "node",
+ "id": 315739623,
+ "lat": 51.2128627,
+ "lon": 3.2187867
+ },
+ {
+ "type": "node",
+ "id": 315739824,
+ "lat": 51.2118993,
+ "lon": 3.2199352
+ },
+ {
+ "type": "node",
+ "id": 315739885,
+ "lat": 51.2124171,
+ "lon": 3.2208696
+ },
+ {
+ "type": "node",
+ "id": 315739967,
+ "lat": 51.2121258,
+ "lon": 3.2212892
+ },
+ {
+ "type": "node",
+ "id": 315739968,
+ "lat": 51.2122265,
+ "lon": 3.2220673
+ },
+ {
+ "type": "node",
+ "id": 315740336,
+ "lat": 51.2112965,
+ "lon": 3.2188156
+ },
+ {
+ "type": "node",
+ "id": 315740338,
+ "lat": 51.2114251,
+ "lon": 3.2190564
+ },
+ {
+ "type": "node",
+ "id": 315740745,
+ "lat": 51.2129195,
+ "lon": 3.2186689
+ },
+ {
+ "type": "node",
+ "id": 315740789,
+ "lat": 51.2126319,
+ "lon": 3.2179919
+ },
+ {
+ "type": "node",
+ "id": 315740790,
+ "lat": 51.2120978,
+ "lon": 3.2184752
+ },
+ {
+ "type": "node",
+ "id": 315740929,
+ "lat": 51.2106224,
+ "lon": 3.2186810
+ },
+ {
+ "type": "node",
+ "id": 315741320,
+ "lat": 51.2077607,
+ "lon": 3.2178872
+ },
+ {
+ "type": "node",
+ "id": 315741411,
+ "lat": 51.2093161,
+ "lon": 3.2196287
+ },
+ {
+ "type": "node",
+ "id": 315741412,
+ "lat": 51.2088768,
+ "lon": 3.2191414
+ },
+ {
+ "type": "node",
+ "id": 315741413,
+ "lat": 51.2079159,
+ "lon": 3.2184939
+ },
+ {
+ "type": "node",
+ "id": 315741414,
+ "lat": 51.2078516,
+ "lon": 3.2184264
+ },
+ {
+ "type": "node",
+ "id": 315741415,
+ "lat": 51.2076305,
+ "lon": 3.2181338
+ },
+ {
+ "type": "node",
+ "id": 315741426,
+ "lat": 51.2097483,
+ "lon": 3.2198641
+ },
+ {
+ "type": "node",
+ "id": 315741466,
+ "lat": 51.2100443,
+ "lon": 3.2190060
+ },
+ {
+ "type": "node",
+ "id": 315741500,
+ "lat": 51.2093983,
+ "lon": 3.2206580
+ },
+ {
+ "type": "node",
+ "id": 315741501,
+ "lat": 51.2086919,
+ "lon": 3.2217461
+ },
+ {
+ "type": "node",
+ "id": 315741525,
+ "lat": 51.2091405,
+ "lon": 3.2211323
+ },
+ {
+ "type": "node",
+ "id": 315741609,
+ "lat": 51.2090233,
+ "lon": 3.2213004
+ },
+ {
+ "type": "node",
+ "id": 315741632,
+ "lat": 51.2085638,
+ "lon": 3.2214984
+ },
+ {
+ "type": "node",
+ "id": 315741673,
+ "lat": 51.2101304,
+ "lon": 3.2200284
+ },
+ {
+ "type": "node",
+ "id": 315741892,
+ "lat": 51.2086577,
+ "lon": 3.2189842
+ },
+ {
+ "type": "node",
+ "id": 315742111,
+ "lat": 51.2082204,
+ "lon": 3.2196734
+ },
+ {
+ "type": "node",
+ "id": 315742113,
+ "lat": 51.2080630,
+ "lon": 3.2200180
+ },
+ {
+ "type": "node",
+ "id": 315742125,
+ "lat": 51.2080585,
+ "lon": 3.2208899
+ },
+ {
+ "type": "node",
+ "id": 315742150,
+ "lat": 51.2083196,
+ "lon": 3.2203423
+ },
+ {
+ "type": "node",
+ "id": 315742165,
+ "lat": 51.2074423,
+ "lon": 3.2202280
+ },
+ {
+ "type": "node",
+ "id": 315742202,
+ "lat": 51.2081583,
+ "lon": 3.2187012
+ },
+ {
+ "type": "node",
+ "id": 315742217,
+ "lat": 51.2073394,
+ "lon": 3.2184786
+ },
+ {
+ "type": "node",
+ "id": 315742469,
+ "lat": 51.2075658,
+ "lon": 3.2190016
+ },
+ {
+ "type": "node",
+ "id": 315742470,
+ "lat": 51.2071289,
+ "lon": 3.2198284
+ },
+ {
+ "type": "node",
+ "id": 315742704,
+ "lat": 51.2077708,
+ "lon": 3.2178702
+ },
+ {
+ "type": "node",
+ "id": 315788548,
+ "lat": 51.2075236,
+ "lon": 3.2231139
+ },
+ {
+ "type": "node",
+ "id": 315788650,
+ "lat": 51.2066341,
+ "lon": 3.2221356
+ },
+ {
+ "type": "node",
+ "id": 315792928,
+ "lat": 51.2108922,
+ "lon": 3.2228373
+ },
+ {
+ "type": "node",
+ "id": 766782322,
+ "lat": 51.2099499,
+ "lon": 3.2192604
+ },
+ {
+ "type": "node",
+ "id": 948649934,
+ "lat": 51.2123525,
+ "lon": 3.2224744
+ },
+ {
+ "type": "node",
+ "id": 995023903,
+ "lat": 51.2067531,
+ "lon": 3.2222867
+ },
+ {
+ "type": "node",
+ "id": 995023916,
+ "lat": 51.2070578,
+ "lon": 3.2226588
+ },
+ {
+ "type": "node",
+ "id": 1147372419,
+ "lat": 51.2096002,
+ "lon": 3.2202843
+ },
+ {
+ "type": "node",
+ "id": 1163584536,
+ "lat": 51.2078280,
+ "lon": 3.2234825
+ },
+ {
+ "type": "node",
+ "id": 1163648876,
+ "lat": 51.2106992,
+ "lon": 3.2235016
+ },
+ {
+ "type": "node",
+ "id": 1163648924,
+ "lat": 51.2109682,
+ "lon": 3.2234605
+ },
+ {
+ "type": "node",
+ "id": 1163648930,
+ "lat": 51.2108599,
+ "lon": 3.2234036
+ },
+ {
+ "type": "node",
+ "id": 1164763920,
+ "lat": 51.2116802,
+ "lon": 3.2187248
+ },
+ {
+ "type": "node",
+ "id": 1172086459,
+ "lat": 51.2076834,
+ "lon": 3.2198553
+ },
+ {
+ "type": "node",
+ "id": 1172086488,
+ "lat": 51.2075601,
+ "lon": 3.2199865
+ },
+ {
+ "type": "node",
+ "id": 1172086495,
+ "lat": 51.2077544,
+ "lon": 3.2197333
+ },
+ {
+ "type": "node",
+ "id": 1172086511,
+ "lat": 51.2080479,
+ "lon": 3.2190298
+ },
+ {
+ "type": "node",
+ "id": 1178980261,
+ "lat": 51.2104496,
+ "lon": 3.2221137
+ },
+ {
+ "type": "node",
+ "id": 1491792991,
+ "lat": 51.2105808,
+ "lon": 3.2202585
+ },
+ {
+ "type": "node",
+ "id": 1588161106,
+ "lat": 51.2091135,
+ "lon": 3.2226306
+ },
+ {
+ "type": "node",
+ "id": 1728433559,
+ "lat": 51.2072690,
+ "lon": 3.2185592
+ },
+ {
+ "type": "node",
+ "id": 1728634979,
+ "lat": 51.2120516,
+ "lon": 3.2210877
+ },
+ {
+ "type": "node",
+ "id": 1728634982,
+ "lat": 51.2112972,
+ "lon": 3.2197925
+ },
+ {
+ "type": "node",
+ "id": 1728634983,
+ "lat": 51.2116310,
+ "lon": 3.2203652
+ },
+ {
+ "type": "node",
+ "id": 1728634986,
+ "lat": 51.2122022,
+ "lon": 3.2218070
+ },
+ {
+ "type": "node",
+ "id": 1736925292,
+ "lat": 51.2124794,
+ "lon": 3.2181208
+ },
+ {
+ "type": "node",
+ "id": 1930863228,
+ "lat": 51.2123706,
+ "lon": 3.2226407
+ },
+ {
+ "type": "node",
+ "id": 1942971323,
+ "lat": 51.2105561,
+ "lon": 3.2229478
+ },
+ {
+ "type": "node",
+ "id": 2350604001,
+ "lat": 51.2114364,
+ "lon": 3.2206917
+ },
+ {
+ "type": "node",
+ "id": 2350604005,
+ "lat": 51.2114969,
+ "lon": 3.2205843
+ },
+ {
+ "type": "node",
+ "id": 2350606291,
+ "lat": 51.2100978,
+ "lon": 3.2189223
+ },
+ {
+ "type": "node",
+ "id": 2379321734,
+ "lat": 51.2119779,
+ "lon": 3.2234004
+ },
+ {
+ "type": "node",
+ "id": 2505426830,
+ "lat": 51.2110388,
+ "lon": 3.2227437
+ },
+ {
+ "type": "node",
+ "id": 2509830662,
+ "lat": 51.2112026,
+ "lon": 3.2241249
+ },
+ {
+ "type": "node",
+ "id": 2509830663,
+ "lat": 51.2112519,
+ "lon": 3.2241031
+ },
+ {
+ "type": "node",
+ "id": 2509830664,
+ "lat": 51.2113608,
+ "lon": 3.2240255
+ },
+ {
+ "type": "node",
+ "id": 2640820586,
+ "lat": 51.2122040,
+ "lon": 3.2231999
+ },
+ {
+ "type": "node",
+ "id": 3056350312,
+ "lat": 51.2084140,
+ "lon": 3.2212367
+ },
+ {
+ "type": "node",
+ "id": 3281984947,
+ "lat": 51.2101742,
+ "lon": 3.2220801
+ },
+ {
+ "type": "node",
+ "id": 3789624905,
+ "lat": 51.2076844,
+ "lon": 3.2180170
+ },
+ {
+ "type": "node",
+ "id": 4702024445,
+ "lat": 51.2100468,
+ "lon": 3.2190004
+ },
+ {
+ "type": "node",
+ "id": 4937380535,
+ "lat": 51.2110894,
+ "lon": 3.2235088
+ },
+ {
+ "type": "node",
+ "id": 4974122796,
+ "lat": 51.2120297,
+ "lon": 3.2228179
+ },
+ {
+ "type": "node",
+ "id": 4975276157,
+ "lat": 51.2075562,
+ "lon": 3.2191075
+ },
+ {
+ "type": "node",
+ "id": 4975276159,
+ "lat": 51.2075707,
+ "lon": 3.2190480
+ },
+ {
+ "type": "node",
+ "id": 4975276205,
+ "lat": 51.2078912,
+ "lon": 3.2194522
+ },
+ {
+ "type": "node",
+ "id": 4977194115,
+ "lat": 51.2121569,
+ "lon": 3.2214519
+ },
+ {
+ "type": "node",
+ "id": 4977194324,
+ "lat": 51.2120897,
+ "lon": 3.2211660
+ },
+ {
+ "type": "node",
+ "id": 4977308234,
+ "lat": 51.2121744,
+ "lon": 3.2203976
+ },
+ {
+ "type": "node",
+ "id": 4977403228,
+ "lat": 51.2120068,
+ "lon": 3.2181487
+ },
+ {
+ "type": "node",
+ "id": 4978127142,
+ "lat": 51.2128118,
+ "lon": 3.2218158
+ },
+ {
+ "type": "node",
+ "id": 5221800072,
+ "lat": 51.2108131,
+ "lon": 3.2206119
+ },
+ {
+ "type": "node",
+ "id": 5437890373,
+ "lat": 51.2081333,
+ "lon": 3.2198591
+ },
+ {
+ "type": "node",
+ "id": 5437890375,
+ "lat": 51.2085785,
+ "lon": 3.2191384
+ },
+ {
+ "type": "node",
+ "id": 5437890376,
+ "lat": 51.2084860,
+ "lon": 3.2192423
+ },
+ {
+ "type": "node",
+ "id": 5520872860,
+ "lat": 51.2129392,
+ "lon": 3.2238853
+ },
+ {
+ "type": "node",
+ "id": 5521131628,
+ "lat": 51.2110347,
+ "lon": 3.2181871
+ },
+ {
+ "type": "node",
+ "id": 5595443792,
+ "lat": 51.2118154,
+ "lon": 3.2215880
+ },
+ {
+ "type": "node",
+ "id": 6472535089,
+ "lat": 51.2099624,
+ "lon": 3.2219543
+ },
+ {
+ "type": "node",
+ "id": 6657744108,
+ "lat": 51.2107038,
+ "lon": 3.2188628
+ },
+ {
+ "type": "node",
+ "id": 6658507943,
+ "lat": 51.2082393,
+ "lon": 3.2240409
+ },
+ {
+ "type": "node",
+ "id": 7425744032,
+ "lat": 51.2094947,
+ "lon": 3.2204796
+ },
+ {
+ "type": "node",
+ "id": 7425843430,
+ "lat": 51.2075117,
+ "lon": 3.2182745
+ },
+ {
+ "type": "node",
+ "id": 7552176258,
+ "lat": 51.2121868,
+ "lon": 3.2183810
+ },
+ {
+ "type": "node",
+ "id": 7552176259,
+ "lat": 51.2118726,
+ "lon": 3.2186304
+ },
+ {
+ "type": "node",
+ "id": 7552191173,
+ "lat": 51.2103584,
+ "lon": 3.2180282
+ },
+ {
+ "type": "node",
+ "id": 7560012809,
+ "lat": 51.2081443,
+ "lon": 3.2198356
+ },
+ {
+ "type": "node",
+ "id": 7560012810,
+ "lat": 51.2080442,
+ "lon": 3.2200609
+ },
+ {
+ "type": "node",
+ "id": 7560012811,
+ "lat": 51.2082992,
+ "lon": 3.2203851
+ },
+ {
+ "type": "node",
+ "id": 7603687959,
+ "lat": 51.2118869,
+ "lon": 3.2226679
+ },
+ {
+ "type": "node",
+ "id": 7606329634,
+ "lat": 51.2126132,
+ "lon": 3.2214265
+ },
+ {
+ "type": "node",
+ "id": 7606329635,
+ "lat": 51.2124605,
+ "lon": 3.2209590
+ },
+ {
+ "type": "node",
+ "id": 7606329636,
+ "lat": 51.2125059,
+ "lon": 3.2210859
+ },
+ {
+ "type": "node",
+ "id": 7606329637,
+ "lat": 51.2119318,
+ "lon": 3.2208819
+ },
+ {
+ "type": "node",
+ "id": 7685447953,
+ "lat": 51.2119710,
+ "lon": 3.2185750
+ },
+ {
+ "type": "node",
+ "id": 26343848,
+ "lat": 51.2063650,
+ "lon": 3.2279631
+ },
+ {
+ "type": "node",
+ "id": 305206353,
+ "lat": 51.2065200,
+ "lon": 3.2290926
+ },
+ {
+ "type": "node",
+ "id": 5032969175,
+ "lat": 51.2064394,
+ "lon": 3.2281726
+ },
+ {
+ "type": "node",
+ "id": 5032980454,
+ "lat": 51.2064928,
+ "lon": 3.2283686
+ },
+ {
+ "type": "node",
+ "id": 5233181841,
+ "lat": 51.2065470,
+ "lon": 3.2290485
+ },
+ {
+ "type": "node",
+ "id": 109928606,
+ "lat": 51.2048925,
+ "lon": 3.2363110
+ },
+ {
+ "type": "node",
+ "id": 109928608,
+ "lat": 51.2057560,
+ "lon": 3.2355287
+ },
+ {
+ "type": "node",
+ "id": 109936405,
+ "lat": 51.2063285,
+ "lon": 3.2334807
+ },
+ {
+ "type": "node",
+ "id": 113543202,
+ "lat": 51.2044858,
+ "lon": 3.2318559
+ },
+ {
+ "type": "node",
+ "id": 271928949,
+ "lat": 51.2045227,
+ "lon": 3.2359189
+ },
+ {
+ "type": "node",
+ "id": 271928950,
+ "lat": 51.2040076,
+ "lon": 3.2353201
+ },
+ {
+ "type": "node",
+ "id": 271928962,
+ "lat": 51.2054810,
+ "lon": 3.2338461
+ },
+ {
+ "type": "node",
+ "id": 271928964,
+ "lat": 51.2048273,
+ "lon": 3.2343311
+ },
+ {
+ "type": "node",
+ "id": 271928965,
+ "lat": 51.2047796,
+ "lon": 3.2346029
+ },
+ {
+ "type": "node",
+ "id": 271928966,
+ "lat": 51.2046725,
+ "lon": 3.2351744
+ },
+ {
+ "type": "node",
+ "id": 305205265,
+ "lat": 51.2048690,
+ "lon": 3.2322408
+ },
+ {
+ "type": "node",
+ "id": 305205266,
+ "lat": 51.2058097,
+ "lon": 3.2330200
+ },
+ {
+ "type": "node",
+ "id": 305207023,
+ "lat": 51.2065225,
+ "lon": 3.2318583
+ },
+ {
+ "type": "node",
+ "id": 305436001,
+ "lat": 51.2060150,
+ "lon": 3.2331810
+ },
+ {
+ "type": "node",
+ "id": 305436021,
+ "lat": 51.2065488,
+ "lon": 3.2336794
+ },
+ {
+ "type": "node",
+ "id": 305436494,
+ "lat": 51.2058514,
+ "lon": 3.2347237
+ },
+ {
+ "type": "node",
+ "id": 305436495,
+ "lat": 51.2054891,
+ "lon": 3.2350845
+ },
+ {
+ "type": "node",
+ "id": 305436498,
+ "lat": 51.2051648,
+ "lon": 3.2351330
+ },
+ {
+ "type": "node",
+ "id": 305436499,
+ "lat": 51.2047456,
+ "lon": 3.2351785
+ },
+ {
+ "type": "node",
+ "id": 318730124,
+ "lat": 51.2051892,
+ "lon": 3.2325176
+ },
+ {
+ "type": "node",
+ "id": 318730632,
+ "lat": 51.2055880,
+ "lon": 3.2350485
+ },
+ {
+ "type": "node",
+ "id": 318730633,
+ "lat": 51.2052625,
+ "lon": 3.2340596
+ },
+ {
+ "type": "node",
+ "id": 318730660,
+ "lat": 51.2051224,
+ "lon": 3.2328541
+ },
+ {
+ "type": "node",
+ "id": 318730661,
+ "lat": 51.2051272,
+ "lon": 3.2334484
+ },
+ {
+ "type": "node",
+ "id": 318730662,
+ "lat": 51.2053806,
+ "lon": 3.2344050
+ },
+ {
+ "type": "node",
+ "id": 1321891804,
+ "lat": 51.2053655,
+ "lon": 3.2326554
+ },
+ {
+ "type": "node",
+ "id": 1976757118,
+ "lat": 51.2049168,
+ "lon": 3.2322963
+ },
+ {
+ "type": "node",
+ "id": 1976757119,
+ "lat": 51.2042442,
+ "lon": 3.2343196
+ },
+ {
+ "type": "node",
+ "id": 1976757121,
+ "lat": 51.2048054,
+ "lon": 3.2325899
+ },
+ {
+ "type": "node",
+ "id": 1976757122,
+ "lat": 51.2048899,
+ "lon": 3.2323894
+ },
+ {
+ "type": "node",
+ "id": 1976757123,
+ "lat": 51.2043976,
+ "lon": 3.2337288
+ },
+ {
+ "type": "node",
+ "id": 1976757125,
+ "lat": 51.2045148,
+ "lon": 3.2332558
+ },
+ {
+ "type": "node",
+ "id": 1976757126,
+ "lat": 51.2045627,
+ "lon": 3.2331196
+ },
+ {
+ "type": "node",
+ "id": 1976757148,
+ "lat": 51.2040938,
+ "lon": 3.2349895
+ },
+ {
+ "type": "node",
+ "id": 2477670974,
+ "lat": 51.2044461,
+ "lon": 3.2335521
+ },
+ {
+ "type": "node",
+ "id": 4294801445,
+ "lat": 51.2058037,
+ "lon": 3.2334628
+ },
+ {
+ "type": "node",
+ "id": 4294801459,
+ "lat": 51.2062179,
+ "lon": 3.2342103
+ },
+ {
+ "type": "node",
+ "id": 5030722504,
+ "lat": 51.2051798,
+ "lon": 3.2341379
+ },
+ {
+ "type": "node",
+ "id": 5030722509,
+ "lat": 51.2053436,
+ "lon": 3.2339718
+ },
+ {
+ "type": "node",
+ "id": 5043666212,
+ "lat": 51.2056303,
+ "lon": 3.2350260
+ },
+ {
+ "type": "node",
+ "id": 5192399680,
+ "lat": 51.2054931,
+ "lon": 3.2357669
+ },
+ {
+ "type": "node",
+ "id": 5192399682,
+ "lat": 51.2063813,
+ "lon": 3.2349896
+ },
+ {
+ "type": "node",
+ "id": 5238648993,
+ "lat": 51.2048570,
+ "lon": 3.2343148
+ },
+ {
+ "type": "node",
+ "id": 5238719835,
+ "lat": 51.2050334,
+ "lon": 3.2361834
+ },
+ {
+ "type": "node",
+ "id": 5291873752,
+ "lat": 51.2064191,
+ "lon": 3.2333396
+ },
+ {
+ "type": "node",
+ "id": 5370131131,
+ "lat": 51.2060481,
+ "lon": 3.2326177
+ },
+ {
+ "type": "node",
+ "id": 5625004323,
+ "lat": 51.2047105,
+ "lon": 3.2327970
+ },
+ {
+ "type": "node",
+ "id": 7618388970,
+ "lat": 51.2052204,
+ "lon": 3.2340995
+ },
+ {
+ "type": "node",
+ "id": 7618472519,
+ "lat": 51.2043051,
+ "lon": 3.2340850
+ },
+ {
+ "type": "node",
+ "id": 7618650547,
+ "lat": 51.2051383,
+ "lon": 3.2335497
+ },
+ {
+ "type": "node",
+ "id": 7618650548,
+ "lat": 51.2051974,
+ "lon": 3.2338210
+ },
+ {
+ "type": "node",
+ "id": 17421435,
+ "lat": 51.2085178,
+ "lon": 3.2255764
+ },
+ {
+ "type": "node",
+ "id": 17422441,
+ "lat": 51.2075390,
+ "lon": 3.2283405
+ },
+ {
+ "type": "node",
+ "id": 17422442,
+ "lat": 51.2069480,
+ "lon": 3.2271168
+ },
+ {
+ "type": "node",
+ "id": 17422443,
+ "lat": 51.2071956,
+ "lon": 3.2276300
+ },
+ {
+ "type": "node",
+ "id": 17422444,
+ "lat": 51.2073303,
+ "lon": 3.2279056
+ },
+ {
+ "type": "node",
+ "id": 17422448,
+ "lat": 51.2076025,
+ "lon": 3.2284714
+ },
+ {
+ "type": "node",
+ "id": 26343775,
+ "lat": 51.2128817,
+ "lon": 3.2288817
+ },
+ {
+ "type": "node",
+ "id": 26343776,
+ "lat": 51.2127966,
+ "lon": 3.2289130
+ },
+ {
+ "type": "node",
+ "id": 26343777,
+ "lat": 51.2127495,
+ "lon": 3.2289113
+ },
+ {
+ "type": "node",
+ "id": 26343778,
+ "lat": 51.2126877,
+ "lon": 3.2288359
+ },
+ {
+ "type": "node",
+ "id": 26343822,
+ "lat": 51.2130326,
+ "lon": 3.2249006
+ },
+ {
+ "type": "node",
+ "id": 26343841,
+ "lat": 51.2082669,
+ "lon": 3.2297917
+ },
+ {
+ "type": "node",
+ "id": 26363611,
+ "lat": 51.2122755,
+ "lon": 3.2278509
+ },
+ {
+ "type": "node",
+ "id": 26363634,
+ "lat": 51.2129352,
+ "lon": 3.2244457
+ },
+ {
+ "type": "node",
+ "id": 26363669,
+ "lat": 51.2130288,
+ "lon": 3.2247511
+ },
+ {
+ "type": "node",
+ "id": 26363711,
+ "lat": 51.2126341,
+ "lon": 3.2261789
+ },
+ {
+ "type": "node",
+ "id": 26363754,
+ "lat": 51.2129981,
+ "lon": 3.2245710
+ },
+ {
+ "type": "node",
+ "id": 271928696,
+ "lat": 51.2071952,
+ "lon": 3.2290689
+ },
+ {
+ "type": "node",
+ "id": 305206582,
+ "lat": 51.2068208,
+ "lon": 3.2296640
+ },
+ {
+ "type": "node",
+ "id": 305207022,
+ "lat": 51.2078190,
+ "lon": 3.2302344
+ },
+ {
+ "type": "node",
+ "id": 305207175,
+ "lat": 51.2066646,
+ "lon": 3.2288567
+ },
+ {
+ "type": "node",
+ "id": 305208181,
+ "lat": 51.2068947,
+ "lon": 3.2284945
+ },
+ {
+ "type": "node",
+ "id": 305438219,
+ "lat": 51.2085518,
+ "lon": 3.2305641
+ },
+ {
+ "type": "node",
+ "id": 305444537,
+ "lat": 51.2066019,
+ "lon": 3.2292530
+ },
+ {
+ "type": "node",
+ "id": 312714246,
+ "lat": 51.2130470,
+ "lon": 3.2279509
+ },
+ {
+ "type": "node",
+ "id": 312714247,
+ "lat": 51.2123200,
+ "lon": 3.2265087
+ },
+ {
+ "type": "node",
+ "id": 312714249,
+ "lat": 51.2119299,
+ "lon": 3.2261164
+ },
+ {
+ "type": "node",
+ "id": 312714252,
+ "lat": 51.2124976,
+ "lon": 3.2284197
+ },
+ {
+ "type": "node",
+ "id": 312714373,
+ "lat": 51.2125189,
+ "lon": 3.2258926
+ },
+ {
+ "type": "node",
+ "id": 312714374,
+ "lat": 51.2121466,
+ "lon": 3.2263003
+ },
+ {
+ "type": "node",
+ "id": 312714402,
+ "lat": 51.2127818,
+ "lon": 3.2250817
+ },
+ {
+ "type": "node",
+ "id": 312714403,
+ "lat": 51.2125582,
+ "lon": 3.2252112
+ },
+ {
+ "type": "node",
+ "id": 312714404,
+ "lat": 51.2121886,
+ "lon": 3.2251901
+ },
+ {
+ "type": "node",
+ "id": 312714405,
+ "lat": 51.2118998,
+ "lon": 3.2251301
+ },
+ {
+ "type": "node",
+ "id": 312714406,
+ "lat": 51.2114866,
+ "lon": 3.2253295
+ },
+ {
+ "type": "node",
+ "id": 312714501,
+ "lat": 51.2122845,
+ "lon": 3.2252085
+ },
+ {
+ "type": "node",
+ "id": 312714505,
+ "lat": 51.2122692,
+ "lon": 3.2247745
+ },
+ {
+ "type": "node",
+ "id": 835868554,
+ "lat": 51.2074036,
+ "lon": 3.2280643
+ },
+ {
+ "type": "node",
+ "id": 1163822372,
+ "lat": 51.2126787,
+ "lon": 3.2262196
+ },
+ {
+ "type": "node",
+ "id": 1163822403,
+ "lat": 51.2116620,
+ "lon": 3.2258451
+ },
+ {
+ "type": "node",
+ "id": 1164716557,
+ "lat": 51.2119905,
+ "lon": 3.2270143
+ },
+ {
+ "type": "node",
+ "id": 1164716597,
+ "lat": 51.2073527,
+ "lon": 3.2279542
+ },
+ {
+ "type": "node",
+ "id": 1164730104,
+ "lat": 51.2117425,
+ "lon": 3.2261441
+ },
+ {
+ "type": "node",
+ "id": 1164730109,
+ "lat": 51.2118514,
+ "lon": 3.2260246
+ },
+ {
+ "type": "node",
+ "id": 1165301427,
+ "lat": 51.2073302,
+ "lon": 3.2306747
+ },
+ {
+ "type": "node",
+ "id": 1165301436,
+ "lat": 51.2074823,
+ "lon": 3.2305724
+ },
+ {
+ "type": "node",
+ "id": 1322128263,
+ "lat": 51.2085391,
+ "lon": 3.2257304
+ },
+ {
+ "type": "node",
+ "id": 1396130046,
+ "lat": 51.2086023,
+ "lon": 3.2262165
+ },
+ {
+ "type": "node",
+ "id": 1492549250,
+ "lat": 51.2112992,
+ "lon": 3.2245495
+ },
+ {
+ "type": "node",
+ "id": 1492554046,
+ "lat": 51.2117406,
+ "lon": 3.2251621
+ },
+ {
+ "type": "node",
+ "id": 1492558258,
+ "lat": 51.2129176,
+ "lon": 3.2280508
+ },
+ {
+ "type": "node",
+ "id": 1492558260,
+ "lat": 51.2128952,
+ "lon": 3.2275387
+ },
+ {
+ "type": "node",
+ "id": 1726452185,
+ "lat": 51.2121064,
+ "lon": 3.2262662
+ },
+ {
+ "type": "node",
+ "id": 1726452192,
+ "lat": 51.2123505,
+ "lon": 3.2265504
+ },
+ {
+ "type": "node",
+ "id": 1865839125,
+ "lat": 51.2084608,
+ "lon": 3.2250074
+ },
+ {
+ "type": "node",
+ "id": 1866130090,
+ "lat": 51.2129957,
+ "lon": 3.2260816
+ },
+ {
+ "type": "node",
+ "id": 1866130092,
+ "lat": 51.2130427,
+ "lon": 3.2263750
+ },
+ {
+ "type": "node",
+ "id": 2379279888,
+ "lat": 51.2120409,
+ "lon": 3.2251594
+ },
+ {
+ "type": "node",
+ "id": 2384097643,
+ "lat": 51.2121679,
+ "lon": 3.2251858
+ },
+ {
+ "type": "node",
+ "id": 2640683162,
+ "lat": 51.2127974,
+ "lon": 3.2261674
+ },
+ {
+ "type": "node",
+ "id": 3307892288,
+ "lat": 51.2084698,
+ "lon": 3.2250970
+ },
+ {
+ "type": "node",
+ "id": 4044318767,
+ "lat": 51.2121138,
+ "lon": 3.2279908
+ },
+ {
+ "type": "node",
+ "id": 4044318768,
+ "lat": 51.2122027,
+ "lon": 3.2279176
+ },
+ {
+ "type": "node",
+ "id": 5061727861,
+ "lat": 51.2127047,
+ "lon": 3.2262079
+ },
+ {
+ "type": "node",
+ "id": 5238150633,
+ "lat": 51.2122577,
+ "lon": 3.2247437
+ },
+ {
+ "type": "node",
+ "id": 5241464513,
+ "lat": 51.2073914,
+ "lon": 3.2306326
+ },
+ {
+ "type": "node",
+ "id": 6060994259,
+ "lat": 51.2074327,
+ "lon": 3.2306972
+ },
+ {
+ "type": "node",
+ "id": 7626723728,
+ "lat": 51.2127040,
+ "lon": 3.2282187
+ },
+ {
+ "type": "node",
+ "id": 7650036981,
+ "lat": 51.2073487,
+ "lon": 3.2293557
+ },
+ {
+ "type": "node",
+ "id": 7650041885,
+ "lat": 51.2074453,
+ "lon": 3.2295320
+ },
+ {
+ "type": "node",
+ "id": 109928577,
+ "lat": 51.2070955,
+ "lon": 3.2343737
+ },
+ {
+ "type": "node",
+ "id": 271928695,
+ "lat": 51.2085020,
+ "lon": 3.2318311
+ },
+ {
+ "type": "node",
+ "id": 271928703,
+ "lat": 51.2088478,
+ "lon": 3.2313062
+ },
+ {
+ "type": "node",
+ "id": 305437109,
+ "lat": 51.2077501,
+ "lon": 3.2314150
+ },
+ {
+ "type": "node",
+ "id": 305437110,
+ "lat": 51.2081880,
+ "lon": 3.2322886
+ },
+ {
+ "type": "node",
+ "id": 305438220,
+ "lat": 51.2081281,
+ "lon": 3.2310075
+ },
+ {
+ "type": "node",
+ "id": 305438461,
+ "lat": 51.2067732,
+ "lon": 3.2339259
+ },
+ {
+ "type": "node",
+ "id": 305438466,
+ "lat": 51.2072047,
+ "lon": 3.2333299
+ },
+ {
+ "type": "node",
+ "id": 305438511,
+ "lat": 51.2068726,
+ "lon": 3.2326328
+ },
+ {
+ "type": "node",
+ "id": 1165286151,
+ "lat": 51.2069527,
+ "lon": 3.2336215
+ },
+ {
+ "type": "node",
+ "id": 1165286193,
+ "lat": 51.2079945,
+ "lon": 3.2325343
+ },
+ {
+ "type": "node",
+ "id": 1165523945,
+ "lat": 51.2071129,
+ "lon": 3.2323199
+ },
+ {
+ "type": "node",
+ "id": 1321891681,
+ "lat": 51.2067339,
+ "lon": 3.2315509
+ },
+ {
+ "type": "node",
+ "id": 2367635155,
+ "lat": 51.2066426,
+ "lon": 3.2321309
+ },
+ {
+ "type": "node",
+ "id": 2463184342,
+ "lat": 51.2071152,
+ "lon": 3.2331248
+ },
+ {
+ "type": "node",
+ "id": 5043667547,
+ "lat": 51.2069415,
+ "lon": 3.2327409
+ },
+ {
+ "type": "node",
+ "id": 5044489095,
+ "lat": 51.2072725,
+ "lon": 3.2332663
+ },
+ {
+ "type": "node",
+ "id": 5044489162,
+ "lat": 51.2068688,
+ "lon": 3.2337559
+ },
+ {
+ "type": "node",
+ "id": 5044489172,
+ "lat": 51.2071040,
+ "lon": 3.2334338
+ },
+ {
+ "type": "node",
+ "id": 5238719836,
+ "lat": 51.2068476,
+ "lon": 3.2345875
+ },
+ {
+ "type": "node",
+ "id": 5641033535,
+ "lat": 51.2084566,
+ "lon": 3.2317077
+ },
+ {
+ "type": "node",
+ "id": 5641033536,
+ "lat": 51.2081697,
+ "lon": 3.2310806
+ },
+ {
+ "type": "node",
+ "id": 6509999130,
+ "lat": 51.2065828,
+ "lon": 3.2330834
+ },
+ {
+ "type": "node",
+ "id": 26363687,
+ "lat": 51.2148728,
+ "lon": 3.2164978
+ },
+ {
+ "type": "node",
+ "id": 315739159,
+ "lat": 51.2144509,
+ "lon": 3.2167985
+ },
+ {
+ "type": "node",
+ "id": 315739215,
+ "lat": 51.2160281,
+ "lon": 3.2174966
+ },
+ {
+ "type": "node",
+ "id": 315740744,
+ "lat": 51.2136941,
+ "lon": 3.2169322
+ },
+ {
+ "type": "node",
+ "id": 315740952,
+ "lat": 51.2131269,
+ "lon": 3.2149400
+ },
+ {
+ "type": "node",
+ "id": 315741030,
+ "lat": 51.2131510,
+ "lon": 3.2174645
+ },
+ {
+ "type": "node",
+ "id": 315741241,
+ "lat": 51.2141285,
+ "lon": 3.2170983
+ },
+ {
+ "type": "node",
+ "id": 1164764140,
+ "lat": 51.2138206,
+ "lon": 3.2175964
+ },
+ {
+ "type": "node",
+ "id": 1206268625,
+ "lat": 51.2133721,
+ "lon": 3.2171273
+ },
+ {
+ "type": "node",
+ "id": 1206268663,
+ "lat": 51.2133229,
+ "lon": 3.2173120
+ },
+ {
+ "type": "node",
+ "id": 1685484560,
+ "lat": 51.2146756,
+ "lon": 3.2174894
+ },
+ {
+ "type": "node",
+ "id": 1728795598,
+ "lat": 51.2137616,
+ "lon": 3.2176680
+ },
+ {
+ "type": "node",
+ "id": 1728835427,
+ "lat": 51.2139755,
+ "lon": 3.2173646
+ },
+ {
+ "type": "node",
+ "id": 1976828508,
+ "lat": 51.2159962,
+ "lon": 3.2175198
+ },
+ {
+ "type": "node",
+ "id": 4580122488,
+ "lat": 51.2137074,
+ "lon": 3.2177338
+ },
+ {
+ "type": "node",
+ "id": 4977890075,
+ "lat": 51.2133311,
+ "lon": 3.2172323
+ },
+ {
+ "type": "node",
+ "id": 4977890093,
+ "lat": 51.2135795,
+ "lon": 3.2170147
+ },
+ {
+ "type": "node",
+ "id": 4977893939,
+ "lat": 51.2135114,
+ "lon": 3.2170220
+ },
+ {
+ "type": "node",
+ "id": 5190253531,
+ "lat": 51.2160009,
+ "lon": 3.2175163
+ },
+ {
+ "type": "node",
+ "id": 5240131569,
+ "lat": 51.2140816,
+ "lon": 3.2171774
+ },
+ {
+ "type": "node",
+ "id": 5523193046,
+ "lat": 51.2135379,
+ "lon": 3.2170192
+ },
+ {
+ "type": "node",
+ "id": 5523193063,
+ "lat": 51.2137926,
+ "lon": 3.2176304
+ },
+ {
+ "type": "node",
+ "id": 5523193065,
+ "lat": 51.2136658,
+ "lon": 3.2169505
+ },
+ {
+ "type": "node",
+ "id": 5586848442,
+ "lat": 51.2156881,
+ "lon": 3.2177439
+ },
+ {
+ "type": "node",
+ "id": 5624929612,
+ "lat": 51.2133360,
+ "lon": 3.2172196
+ },
+ {
+ "type": "node",
+ "id": 6505923909,
+ "lat": 51.2142330,
+ "lon": 3.2169725
+ },
+ {
+ "type": "node",
+ "id": 7593448255,
+ "lat": 51.2140079,
+ "lon": 3.2173097
+ },
+ {
+ "type": "node",
+ "id": 7593448256,
+ "lat": 51.2141624,
+ "lon": 3.2170536
+ },
+ {
+ "type": "node",
+ "id": 26343982,
+ "lat": 51.2181563,
+ "lon": 3.2202656
+ },
+ {
+ "type": "node",
+ "id": 26363709,
+ "lat": 51.2133373,
+ "lon": 3.2181820
+ },
+ {
+ "type": "node",
+ "id": 26363741,
+ "lat": 51.2142420,
+ "lon": 3.2215674
+ },
+ {
+ "type": "node",
+ "id": 271927356,
+ "lat": 51.2180645,
+ "lon": 3.2242298
+ },
+ {
+ "type": "node",
+ "id": 271927360,
+ "lat": 51.2156657,
+ "lon": 3.2226265
+ },
+ {
+ "type": "node",
+ "id": 310384185,
+ "lat": 51.2136859,
+ "lon": 3.2241787
+ },
+ {
+ "type": "node",
+ "id": 310384186,
+ "lat": 51.2141614,
+ "lon": 3.2239051
+ },
+ {
+ "type": "node",
+ "id": 310384187,
+ "lat": 51.2147526,
+ "lon": 3.2235496
+ },
+ {
+ "type": "node",
+ "id": 310384189,
+ "lat": 51.2152868,
+ "lon": 3.2237141
+ },
+ {
+ "type": "node",
+ "id": 312709346,
+ "lat": 51.2182732,
+ "lon": 3.2210670
+ },
+ {
+ "type": "node",
+ "id": 312709347,
+ "lat": 51.2175464,
+ "lon": 3.2212601
+ },
+ {
+ "type": "node",
+ "id": 312709348,
+ "lat": 51.2175889,
+ "lon": 3.2216274
+ },
+ {
+ "type": "node",
+ "id": 312709349,
+ "lat": 51.2183099,
+ "lon": 3.2214283
+ },
+ {
+ "type": "node",
+ "id": 312709412,
+ "lat": 51.2182272,
+ "lon": 3.2234397
+ },
+ {
+ "type": "node",
+ "id": 312709413,
+ "lat": 51.2174584,
+ "lon": 3.2230450
+ },
+ {
+ "type": "node",
+ "id": 312709415,
+ "lat": 51.2176389,
+ "lon": 3.2219926
+ },
+ {
+ "type": "node",
+ "id": 312709416,
+ "lat": 51.2175697,
+ "lon": 3.2224931
+ },
+ {
+ "type": "node",
+ "id": 312711524,
+ "lat": 51.2141030,
+ "lon": 3.2231218
+ },
+ {
+ "type": "node",
+ "id": 312711525,
+ "lat": 51.2140496,
+ "lon": 3.2220734
+ },
+ {
+ "type": "node",
+ "id": 312711957,
+ "lat": 51.2148570,
+ "lon": 3.2234867
+ },
+ {
+ "type": "node",
+ "id": 312711959,
+ "lat": 51.2147459,
+ "lon": 3.2241981
+ },
+ {
+ "type": "node",
+ "id": 312712021,
+ "lat": 51.2150793,
+ "lon": 3.2226351
+ },
+ {
+ "type": "node",
+ "id": 312713834,
+ "lat": 51.2148713,
+ "lon": 3.2226245
+ },
+ {
+ "type": "node",
+ "id": 312713835,
+ "lat": 51.2142954,
+ "lon": 3.2219229
+ },
+ {
+ "type": "node",
+ "id": 312714051,
+ "lat": 51.2154806,
+ "lon": 3.2225958
+ },
+ {
+ "type": "node",
+ "id": 312714070,
+ "lat": 51.2154532,
+ "lon": 3.2223289
+ },
+ {
+ "type": "node",
+ "id": 312714071,
+ "lat": 51.2152235,
+ "lon": 3.2212079
+ },
+ {
+ "type": "node",
+ "id": 315739208,
+ "lat": 51.2149470,
+ "lon": 3.2183010
+ },
+ {
+ "type": "node",
+ "id": 315739209,
+ "lat": 51.2156301,
+ "lon": 3.2210903
+ },
+ {
+ "type": "node",
+ "id": 315739216,
+ "lat": 51.2152977,
+ "lon": 3.2195995
+ },
+ {
+ "type": "node",
+ "id": 315739242,
+ "lat": 51.2164491,
+ "lon": 3.2187218
+ },
+ {
+ "type": "node",
+ "id": 315739243,
+ "lat": 51.2166162,
+ "lon": 3.2182807
+ },
+ {
+ "type": "node",
+ "id": 315739244,
+ "lat": 51.2154859,
+ "lon": 3.2203253
+ },
+ {
+ "type": "node",
+ "id": 315739310,
+ "lat": 51.2169068,
+ "lon": 3.2195170
+ },
+ {
+ "type": "node",
+ "id": 315739311,
+ "lat": 51.2170509,
+ "lon": 3.2193952
+ },
+ {
+ "type": "node",
+ "id": 315739312,
+ "lat": 51.2172230,
+ "lon": 3.2190922
+ },
+ {
+ "type": "node",
+ "id": 315739621,
+ "lat": 51.2143915,
+ "lon": 3.2202605
+ },
+ {
+ "type": "node",
+ "id": 315739622,
+ "lat": 51.2138317,
+ "lon": 3.2207922
+ },
+ {
+ "type": "node",
+ "id": 1014678935,
+ "lat": 51.2131471,
+ "lon": 3.2226481
+ },
+ {
+ "type": "node",
+ "id": 1107610118,
+ "lat": 51.2136589,
+ "lon": 3.2189953
+ },
+ {
+ "type": "node",
+ "id": 1206268631,
+ "lat": 51.2150708,
+ "lon": 3.2228618
+ },
+ {
+ "type": "node",
+ "id": 1206268644,
+ "lat": 51.2140225,
+ "lon": 3.2216495
+ },
+ {
+ "type": "node",
+ "id": 1206268669,
+ "lat": 51.2149007,
+ "lon": 3.2232466
+ },
+ {
+ "type": "node",
+ "id": 1492546423,
+ "lat": 51.2152815,
+ "lon": 3.2215689
+ },
+ {
+ "type": "node",
+ "id": 1492546427,
+ "lat": 51.2155988,
+ "lon": 3.2208558
+ },
+ {
+ "type": "node",
+ "id": 1588161105,
+ "lat": 51.2174329,
+ "lon": 3.2205136
+ },
+ {
+ "type": "node",
+ "id": 1588161109,
+ "lat": 51.2168214,
+ "lon": 3.2207550
+ },
+ {
+ "type": "node",
+ "id": 1682832848,
+ "lat": 51.2162257,
+ "lon": 3.2189152
+ },
+ {
+ "type": "node",
+ "id": 1682891218,
+ "lat": 51.2153998,
+ "lon": 3.2179535
+ },
+ {
+ "type": "node",
+ "id": 1685985153,
+ "lat": 51.2141732,
+ "lon": 3.2197545
+ },
+ {
+ "type": "node",
+ "id": 1685985159,
+ "lat": 51.2141600,
+ "lon": 3.2216202
+ },
+ {
+ "type": "node",
+ "id": 1687009750,
+ "lat": 51.2179934,
+ "lon": 3.2203153
+ },
+ {
+ "type": "node",
+ "id": 1687050090,
+ "lat": 51.2154391,
+ "lon": 3.2221001
+ },
+ {
+ "type": "node",
+ "id": 1728795604,
+ "lat": 51.2137060,
+ "lon": 3.2190866
+ },
+ {
+ "type": "node",
+ "id": 1976829258,
+ "lat": 51.2165932,
+ "lon": 3.2183408
+ },
+ {
+ "type": "node",
+ "id": 1976830098,
+ "lat": 51.2171997,
+ "lon": 3.2191293
+ },
+ {
+ "type": "node",
+ "id": 2660048996,
+ "lat": 51.2133228,
+ "lon": 3.2197355
+ },
+ {
+ "type": "node",
+ "id": 2660049014,
+ "lat": 51.2133825,
+ "lon": 3.2217248
+ },
+ {
+ "type": "node",
+ "id": 3514695244,
+ "lat": 51.2170383,
+ "lon": 3.2206694
+ },
+ {
+ "type": "node",
+ "id": 4787008333,
+ "lat": 51.2140681,
+ "lon": 3.2206041
+ },
+ {
+ "type": "node",
+ "id": 4787687913,
+ "lat": 51.2145957,
+ "lon": 3.2214170
+ },
+ {
+ "type": "node",
+ "id": 4787687914,
+ "lat": 51.2142542,
+ "lon": 3.2218627
+ },
+ {
+ "type": "node",
+ "id": 4944410202,
+ "lat": 51.2134874,
+ "lon": 3.2185500
+ },
+ {
+ "type": "node",
+ "id": 4982676734,
+ "lat": 51.2169794,
+ "lon": 3.2194712
+ },
+ {
+ "type": "node",
+ "id": 5130352130,
+ "lat": 51.2133836,
+ "lon": 3.2182731
+ },
+ {
+ "type": "node",
+ "id": 5155766153,
+ "lat": 51.2151024,
+ "lon": 3.2188764
+ },
+ {
+ "type": "node",
+ "id": 5156123208,
+ "lat": 51.2134546,
+ "lon": 3.2180552
+ },
+ {
+ "type": "node",
+ "id": 5190253532,
+ "lat": 51.2166018,
+ "lon": 3.2183186
+ },
+ {
+ "type": "node",
+ "id": 5190253533,
+ "lat": 51.2172098,
+ "lon": 3.2191132
+ },
+ {
+ "type": "node",
+ "id": 5221822088,
+ "lat": 51.2149811,
+ "lon": 3.2212998
+ },
+ {
+ "type": "node",
+ "id": 5240131580,
+ "lat": 51.2148866,
+ "lon": 3.2180750
+ },
+ {
+ "type": "node",
+ "id": 5241432573,
+ "lat": 51.2173862,
+ "lon": 3.2233734
+ },
+ {
+ "type": "node",
+ "id": 5241432575,
+ "lat": 51.2181559,
+ "lon": 3.2237860
+ },
+ {
+ "type": "node",
+ "id": 5243026735,
+ "lat": 51.2137605,
+ "lon": 3.2241358
+ },
+ {
+ "type": "node",
+ "id": 5243026736,
+ "lat": 51.2134373,
+ "lon": 3.2243336
+ },
+ {
+ "type": "node",
+ "id": 5250359561,
+ "lat": 51.2153069,
+ "lon": 3.2216545
+ },
+ {
+ "type": "node",
+ "id": 5373736320,
+ "lat": 51.2178981,
+ "lon": 3.2211667
+ },
+ {
+ "type": "node",
+ "id": 5373738222,
+ "lat": 51.2179391,
+ "lon": 3.2215307
+ },
+ {
+ "type": "node",
+ "id": 5468190513,
+ "lat": 51.2143717,
+ "lon": 3.2203650
+ },
+ {
+ "type": "node",
+ "id": 5468190514,
+ "lat": 51.2143942,
+ "lon": 3.2203169
+ },
+ {
+ "type": "node",
+ "id": 5468190516,
+ "lat": 51.2143420,
+ "lon": 3.2203884
+ },
+ {
+ "type": "node",
+ "id": 5516265643,
+ "lat": 51.2158309,
+ "lon": 3.2192063
+ },
+ {
+ "type": "node",
+ "id": 5520910025,
+ "lat": 51.2135693,
+ "lon": 3.2242514
+ },
+ {
+ "type": "node",
+ "id": 5521026843,
+ "lat": 51.2132803,
+ "lon": 3.2225632
+ },
+ {
+ "type": "node",
+ "id": 5521256340,
+ "lat": 51.2160949,
+ "lon": 3.2209697
+ },
+ {
+ "type": "node",
+ "id": 5521256348,
+ "lat": 51.2153335,
+ "lon": 3.2217442
+ },
+ {
+ "type": "node",
+ "id": 5574156261,
+ "lat": 51.2172396,
+ "lon": 3.2205899
+ },
+ {
+ "type": "node",
+ "id": 5582947910,
+ "lat": 51.2134834,
+ "lon": 3.2224337
+ },
+ {
+ "type": "node",
+ "id": 5602301649,
+ "lat": 51.2182227,
+ "lon": 3.2210804
+ },
+ {
+ "type": "node",
+ "id": 5602301650,
+ "lat": 51.2182576,
+ "lon": 3.2214427
+ },
+ {
+ "type": "node",
+ "id": 5697643294,
+ "lat": 51.2150443,
+ "lon": 3.2229251
+ },
+ {
+ "type": "node",
+ "id": 7126734984,
+ "lat": 51.2140913,
+ "lon": 3.2229703
+ },
+ {
+ "type": "node",
+ "id": 7126783785,
+ "lat": 51.2141229,
+ "lon": 3.2234852
+ },
+ {
+ "type": "node",
+ "id": 7590356768,
+ "lat": 51.2145986,
+ "lon": 3.2222923
+ },
+ {
+ "type": "node",
+ "id": 7606351657,
+ "lat": 51.2155710,
+ "lon": 3.2210855
+ },
+ {
+ "type": "node",
+ "id": 7606351658,
+ "lat": 51.2156726,
+ "lon": 3.2210912
+ },
+ {
+ "type": "node",
+ "id": 7606351659,
+ "lat": 51.2161312,
+ "lon": 3.2209585
+ },
+ {
+ "type": "node",
+ "id": 7606382702,
+ "lat": 51.2173557,
+ "lon": 3.2235409
+ },
+ {
+ "type": "node",
+ "id": 7606382703,
+ "lat": 51.2173386,
+ "lon": 3.2236312
+ },
+ {
+ "type": "node",
+ "id": 7606382704,
+ "lat": 51.2174016,
+ "lon": 3.2233035
+ },
+ {
+ "type": "node",
+ "id": 26343722,
+ "lat": 51.2152266,
+ "lon": 3.2295144
+ },
+ {
+ "type": "node",
+ "id": 26343767,
+ "lat": 51.2152159,
+ "lon": 3.2288289
+ },
+ {
+ "type": "node",
+ "id": 26343768,
+ "lat": 51.2149474,
+ "lon": 3.2288195
+ },
+ {
+ "type": "node",
+ "id": 26343769,
+ "lat": 51.2144939,
+ "lon": 3.2286653
+ },
+ {
+ "type": "node",
+ "id": 26343770,
+ "lat": 51.2143013,
+ "lon": 3.2285791
+ },
+ {
+ "type": "node",
+ "id": 26343771,
+ "lat": 51.2140860,
+ "lon": 3.2284912
+ },
+ {
+ "type": "node",
+ "id": 26343772,
+ "lat": 51.2137151,
+ "lon": 3.2284827
+ },
+ {
+ "type": "node",
+ "id": 26343774,
+ "lat": 51.2132287,
+ "lon": 3.2287150
+ },
+ {
+ "type": "node",
+ "id": 26343780,
+ "lat": 51.2135451,
+ "lon": 3.2285544
+ },
+ {
+ "type": "node",
+ "id": 26343781,
+ "lat": 51.2136124,
+ "lon": 3.2277183
+ },
+ {
+ "type": "node",
+ "id": 26343782,
+ "lat": 51.2136786,
+ "lon": 3.2268254
+ },
+ {
+ "type": "node",
+ "id": 26343783,
+ "lat": 51.2136352,
+ "lon": 3.2259284
+ },
+ {
+ "type": "node",
+ "id": 26343785,
+ "lat": 51.2136348,
+ "lon": 3.2254859
+ },
+ {
+ "type": "node",
+ "id": 26343786,
+ "lat": 51.2133553,
+ "lon": 3.2253800
+ },
+ {
+ "type": "node",
+ "id": 26343818,
+ "lat": 51.2132018,
+ "lon": 3.2259919
+ },
+ {
+ "type": "node",
+ "id": 26343819,
+ "lat": 51.2132570,
+ "lon": 3.2266069
+ },
+ {
+ "type": "node",
+ "id": 26343820,
+ "lat": 51.2133139,
+ "lon": 3.2273648
+ },
+ {
+ "type": "node",
+ "id": 26343821,
+ "lat": 51.2133198,
+ "lon": 3.2280245
+ },
+ {
+ "type": "node",
+ "id": 26343824,
+ "lat": 51.2131604,
+ "lon": 3.2256661
+ },
+ {
+ "type": "node",
+ "id": 26343835,
+ "lat": 51.2135618,
+ "lon": 3.2305253
+ },
+ {
+ "type": "node",
+ "id": 26363602,
+ "lat": 51.2170301,
+ "lon": 3.2283311
+ },
+ {
+ "type": "node",
+ "id": 26363622,
+ "lat": 51.2183566,
+ "lon": 3.2293812
+ },
+ {
+ "type": "node",
+ "id": 26363657,
+ "lat": 51.2167665,
+ "lon": 3.2283170
+ },
+ {
+ "type": "node",
+ "id": 26363672,
+ "lat": 51.2155718,
+ "lon": 3.2287346
+ },
+ {
+ "type": "node",
+ "id": 26363696,
+ "lat": 51.2177252,
+ "lon": 3.2289296
+ },
+ {
+ "type": "node",
+ "id": 26363732,
+ "lat": 51.2175511,
+ "lon": 3.2287328
+ },
+ {
+ "type": "node",
+ "id": 26363761,
+ "lat": 51.2194106,
+ "lon": 3.2297803
+ },
+ {
+ "type": "node",
+ "id": 26363762,
+ "lat": 51.2132929,
+ "lon": 3.2250263
+ },
+ {
+ "type": "node",
+ "id": 26363772,
+ "lat": 51.2153901,
+ "lon": 3.2287958
+ },
+ {
+ "type": "node",
+ "id": 26363802,
+ "lat": 51.2186495,
+ "lon": 3.2294690
+ },
+ {
+ "type": "node",
+ "id": 26363815,
+ "lat": 51.2158045,
+ "lon": 3.2286506
+ },
+ {
+ "type": "node",
+ "id": 271927355,
+ "lat": 51.2184226,
+ "lon": 3.2246277
+ },
+ {
+ "type": "node",
+ "id": 271927429,
+ "lat": 51.2147760,
+ "lon": 3.2252027
+ },
+ {
+ "type": "node",
+ "id": 271930116,
+ "lat": 51.2191515,
+ "lon": 3.2268702
+ },
+ {
+ "type": "node",
+ "id": 271930118,
+ "lat": 51.2187412,
+ "lon": 3.2269482
+ },
+ {
+ "type": "node",
+ "id": 271930120,
+ "lat": 51.2174158,
+ "lon": 3.2285783
+ },
+ {
+ "type": "node",
+ "id": 298086769,
+ "lat": 51.2177554,
+ "lon": 3.2278756
+ },
+ {
+ "type": "node",
+ "id": 298086980,
+ "lat": 51.2147269,
+ "lon": 3.2287639
+ },
+ {
+ "type": "node",
+ "id": 310384182,
+ "lat": 51.2131880,
+ "lon": 3.2245514
+ },
+ {
+ "type": "node",
+ "id": 310384183,
+ "lat": 51.2133002,
+ "lon": 3.2244566
+ },
+ {
+ "type": "node",
+ "id": 310384207,
+ "lat": 51.2161212,
+ "lon": 3.2285105
+ },
+ {
+ "type": "node",
+ "id": 310384210,
+ "lat": 51.2158562,
+ "lon": 3.2250356
+ },
+ {
+ "type": "node",
+ "id": 310386962,
+ "lat": 51.2152332,
+ "lon": 3.2305316
+ },
+ {
+ "type": "node",
+ "id": 310386965,
+ "lat": 51.2152300,
+ "lon": 3.2299229
+ },
+ {
+ "type": "node",
+ "id": 310387100,
+ "lat": 51.2154115,
+ "lon": 3.2305155
+ },
+ {
+ "type": "node",
+ "id": 310387101,
+ "lat": 51.2161310,
+ "lon": 3.2302994
+ },
+ {
+ "type": "node",
+ "id": 310387102,
+ "lat": 51.2160892,
+ "lon": 3.2298749
+ },
+ {
+ "type": "node",
+ "id": 310387103,
+ "lat": 51.2160091,
+ "lon": 3.2292595
+ },
+ {
+ "type": "node",
+ "id": 310387293,
+ "lat": 51.2166869,
+ "lon": 3.2305219
+ },
+ {
+ "type": "node",
+ "id": 310387294,
+ "lat": 51.2166993,
+ "lon": 3.2301152
+ },
+ {
+ "type": "node",
+ "id": 310387374,
+ "lat": 51.2171768,
+ "lon": 3.2302260
+ },
+ {
+ "type": "node",
+ "id": 310387375,
+ "lat": 51.2172187,
+ "lon": 3.2302021
+ },
+ {
+ "type": "node",
+ "id": 310387376,
+ "lat": 51.2174225,
+ "lon": 3.2296221
+ },
+ {
+ "type": "node",
+ "id": 310387377,
+ "lat": 51.2175816,
+ "lon": 3.2296098
+ },
+ {
+ "type": "node",
+ "id": 310387378,
+ "lat": 51.2176041,
+ "lon": 3.2295345
+ },
+ {
+ "type": "node",
+ "id": 310387379,
+ "lat": 51.2176663,
+ "lon": 3.2293744
+ },
+ {
+ "type": "node",
+ "id": 310387410,
+ "lat": 51.2179352,
+ "lon": 3.2291233
+ },
+ {
+ "type": "node",
+ "id": 312709082,
+ "lat": 51.2195039,
+ "lon": 3.2272639
+ },
+ {
+ "type": "node",
+ "id": 312709083,
+ "lat": 51.2194462,
+ "lon": 3.2268149
+ },
+ {
+ "type": "node",
+ "id": 312709477,
+ "lat": 51.2179602,
+ "lon": 3.2256037
+ },
+ {
+ "type": "node",
+ "id": 312709478,
+ "lat": 51.2177068,
+ "lon": 3.2257855
+ },
+ {
+ "type": "node",
+ "id": 312709479,
+ "lat": 51.2163814,
+ "lon": 3.2262094
+ },
+ {
+ "type": "node",
+ "id": 312709480,
+ "lat": 51.2159565,
+ "lon": 3.2262851
+ },
+ {
+ "type": "node",
+ "id": 312709481,
+ "lat": 51.2145755,
+ "lon": 3.2264134
+ },
+ {
+ "type": "node",
+ "id": 312709482,
+ "lat": 51.2163988,
+ "lon": 3.2283951
+ },
+ {
+ "type": "node",
+ "id": 312710287,
+ "lat": 51.2145720,
+ "lon": 3.2258677
+ },
+ {
+ "type": "node",
+ "id": 312710288,
+ "lat": 51.2145244,
+ "lon": 3.2272486
+ },
+ {
+ "type": "node",
+ "id": 312710747,
+ "lat": 51.2150803,
+ "lon": 3.2273685
+ },
+ {
+ "type": "node",
+ "id": 312710748,
+ "lat": 51.2158683,
+ "lon": 3.2272211
+ },
+ {
+ "type": "node",
+ "id": 312710920,
+ "lat": 51.2146866,
+ "lon": 3.2272979
+ },
+ {
+ "type": "node",
+ "id": 312711007,
+ "lat": 51.2150762,
+ "lon": 3.2264171
+ },
+ {
+ "type": "node",
+ "id": 312711522,
+ "lat": 51.2144264,
+ "lon": 3.2250965
+ },
+ {
+ "type": "node",
+ "id": 312711523,
+ "lat": 51.2142667,
+ "lon": 3.2244736
+ },
+ {
+ "type": "node",
+ "id": 312711610,
+ "lat": 51.2133786,
+ "lon": 3.2286383
+ },
+ {
+ "type": "node",
+ "id": 312711635,
+ "lat": 51.2133424,
+ "lon": 3.2259516
+ },
+ {
+ "type": "node",
+ "id": 312711756,
+ "lat": 51.2145441,
+ "lon": 3.2269220
+ },
+ {
+ "type": "node",
+ "id": 312711962,
+ "lat": 51.2142447,
+ "lon": 3.2254493
+ },
+ {
+ "type": "node",
+ "id": 312712198,
+ "lat": 51.2141296,
+ "lon": 3.2259329
+ },
+ {
+ "type": "node",
+ "id": 312712200,
+ "lat": 51.2140937,
+ "lon": 3.2262998
+ },
+ {
+ "type": "node",
+ "id": 312712201,
+ "lat": 51.2140300,
+ "lon": 3.2268693
+ },
+ {
+ "type": "node",
+ "id": 312712665,
+ "lat": 51.2154093,
+ "lon": 3.2263705
+ },
+ {
+ "type": "node",
+ "id": 312712835,
+ "lat": 51.2138096,
+ "lon": 3.2247520
+ },
+ {
+ "type": "node",
+ "id": 312714245,
+ "lat": 51.2131374,
+ "lon": 3.2284438
+ },
+ {
+ "type": "node",
+ "id": 1014589647,
+ "lat": 51.2139089,
+ "lon": 3.2284580
+ },
+ {
+ "type": "node",
+ "id": 1014589649,
+ "lat": 51.2182926,
+ "lon": 3.2272143
+ },
+ {
+ "type": "node",
+ "id": 1014589661,
+ "lat": 51.2185332,
+ "lon": 3.2270230
+ },
+ {
+ "type": "node",
+ "id": 1014589663,
+ "lat": 51.2172646,
+ "lon": 3.2284225
+ },
+ {
+ "type": "node",
+ "id": 1070885334,
+ "lat": 51.2167235,
+ "lon": 3.2288254
+ },
+ {
+ "type": "node",
+ "id": 1070885339,
+ "lat": 51.2167187,
+ "lon": 3.2295802
+ },
+ {
+ "type": "node",
+ "id": 1163822364,
+ "lat": 51.2132297,
+ "lon": 3.2247303
+ },
+ {
+ "type": "node",
+ "id": 1164745428,
+ "lat": 51.2133086,
+ "lon": 3.2277064
+ },
+ {
+ "type": "node",
+ "id": 1164745513,
+ "lat": 51.2190967,
+ "lon": 3.2296173
+ },
+ {
+ "type": "node",
+ "id": 1164745554,
+ "lat": 51.2133524,
+ "lon": 3.2284445
+ },
+ {
+ "type": "node",
+ "id": 1165547266,
+ "lat": 51.2173553,
+ "lon": 3.2296823
+ },
+ {
+ "type": "node",
+ "id": 1165547306,
+ "lat": 51.2166771,
+ "lon": 3.2307583
+ },
+ {
+ "type": "node",
+ "id": 1165547327,
+ "lat": 51.2167312,
+ "lon": 3.2289298
+ },
+ {
+ "type": "node",
+ "id": 1165547343,
+ "lat": 51.2194626,
+ "lon": 3.2271648
+ },
+ {
+ "type": "node",
+ "id": 1206268636,
+ "lat": 51.2140267,
+ "lon": 3.2254255
+ },
+ {
+ "type": "node",
+ "id": 1206268640,
+ "lat": 51.2138264,
+ "lon": 3.2254868
+ },
+ {
+ "type": "node",
+ "id": 1206268673,
+ "lat": 51.2141780,
+ "lon": 3.2256128
+ },
+ {
+ "type": "node",
+ "id": 1492536187,
+ "lat": 51.2143680,
+ "lon": 3.2250652
+ },
+ {
+ "type": "node",
+ "id": 1492536191,
+ "lat": 51.2172798,
+ "lon": 3.2260100
+ },
+ {
+ "type": "node",
+ "id": 1517538694,
+ "lat": 51.2166047,
+ "lon": 3.2283344
+ },
+ {
+ "type": "node",
+ "id": 1588366027,
+ "lat": 51.2160187,
+ "lon": 3.2293262
+ },
+ {
+ "type": "node",
+ "id": 1686655903,
+ "lat": 51.2180219,
+ "lon": 3.2255189
+ },
+ {
+ "type": "node",
+ "id": 1686657161,
+ "lat": 51.2158716,
+ "lon": 3.2262790
+ },
+ {
+ "type": "node",
+ "id": 1686658077,
+ "lat": 51.2181102,
+ "lon": 3.2253225
+ },
+ {
+ "type": "node",
+ "id": 1686682187,
+ "lat": 51.2175878,
+ "lon": 3.2258481
+ },
+ {
+ "type": "node",
+ "id": 1789677055,
+ "lat": 51.2136853,
+ "lon": 3.2263846
+ },
+ {
+ "type": "node",
+ "id": 1789677056,
+ "lat": 51.2139966,
+ "lon": 3.2284647
+ },
+ {
+ "type": "node",
+ "id": 1789677067,
+ "lat": 51.2146203,
+ "lon": 3.2277163
+ },
+ {
+ "type": "node",
+ "id": 1789677073,
+ "lat": 51.2146758,
+ "lon": 3.2277329
+ },
+ {
+ "type": "node",
+ "id": 1789677088,
+ "lat": 51.2149734,
+ "lon": 3.2273613
+ },
+ {
+ "type": "node",
+ "id": 1789677089,
+ "lat": 51.2150020,
+ "lon": 3.2277938
+ },
+ {
+ "type": "node",
+ "id": 1789677093,
+ "lat": 51.2152226,
+ "lon": 3.2293644
+ },
+ {
+ "type": "node",
+ "id": 1789677149,
+ "lat": 51.2181795,
+ "lon": 3.2293044
+ },
+ {
+ "type": "node",
+ "id": 1866130085,
+ "lat": 51.2131275,
+ "lon": 3.2273384
+ },
+ {
+ "type": "node",
+ "id": 1903803711,
+ "lat": 51.2132082,
+ "lon": 3.2260742
+ },
+ {
+ "type": "node",
+ "id": 1927246457,
+ "lat": 51.2188433,
+ "lon": 3.2295152
+ },
+ {
+ "type": "node",
+ "id": 1927246459,
+ "lat": 51.2192237,
+ "lon": 3.2268567
+ },
+ {
+ "type": "node",
+ "id": 1927313430,
+ "lat": 51.2188460,
+ "lon": 3.2269271
+ },
+ {
+ "type": "node",
+ "id": 2350591601,
+ "lat": 51.2132522,
+ "lon": 3.2288033
+ },
+ {
+ "type": "node",
+ "id": 2350591602,
+ "lat": 51.2133302,
+ "lon": 3.2290959
+ },
+ {
+ "type": "node",
+ "id": 2350591603,
+ "lat": 51.2134649,
+ "lon": 3.2285948
+ },
+ {
+ "type": "node",
+ "id": 2350604014,
+ "lat": 51.2132079,
+ "lon": 3.2247524
+ },
+ {
+ "type": "node",
+ "id": 2350604021,
+ "lat": 51.2134177,
+ "lon": 3.2259414
+ },
+ {
+ "type": "node",
+ "id": 2463184369,
+ "lat": 51.2168944,
+ "lon": 3.2283361
+ },
+ {
+ "type": "node",
+ "id": 2463184371,
+ "lat": 51.2170143,
+ "lon": 3.2276001
+ },
+ {
+ "type": "node",
+ "id": 2463184373,
+ "lat": 51.2171399,
+ "lon": 3.2275836
+ },
+ {
+ "type": "node",
+ "id": 3732163709,
+ "lat": 51.2168943,
+ "lon": 3.2282621
+ },
+ {
+ "type": "node",
+ "id": 3732163712,
+ "lat": 51.2169294,
+ "lon": 3.2280776
+ },
+ {
+ "type": "node",
+ "id": 4971141904,
+ "lat": 51.2145020,
+ "lon": 3.2249305
+ },
+ {
+ "type": "node",
+ "id": 4985396471,
+ "lat": 51.2171043,
+ "lon": 3.2275925
+ },
+ {
+ "type": "node",
+ "id": 5072140416,
+ "lat": 51.2167841,
+ "lon": 3.2301211
+ },
+ {
+ "type": "node",
+ "id": 5072141141,
+ "lat": 51.2172484,
+ "lon": 3.2301601
+ },
+ {
+ "type": "node",
+ "id": 5072243159,
+ "lat": 51.2173910,
+ "lon": 3.2296351
+ },
+ {
+ "type": "node",
+ "id": 5072243178,
+ "lat": 51.2175092,
+ "lon": 3.2296483
+ },
+ {
+ "type": "node",
+ "id": 5072243195,
+ "lat": 51.2175451,
+ "lon": 3.2296483
+ },
+ {
+ "type": "node",
+ "id": 5225221590,
+ "lat": 51.2196090,
+ "lon": 3.2274864
+ },
+ {
+ "type": "node",
+ "id": 5226749874,
+ "lat": 51.2189373,
+ "lon": 3.2269101
+ },
+ {
+ "type": "node",
+ "id": 5228768739,
+ "lat": 51.2132445,
+ "lon": 3.2259800
+ },
+ {
+ "type": "node",
+ "id": 5391303747,
+ "lat": 51.2166893,
+ "lon": 3.2304437
+ },
+ {
+ "type": "node",
+ "id": 5521195504,
+ "lat": 51.2169553,
+ "lon": 3.2260820
+ },
+ {
+ "type": "node",
+ "id": 5602314023,
+ "lat": 51.2178342,
+ "lon": 3.2277786
+ },
+ {
+ "type": "node",
+ "id": 5602314024,
+ "lat": 51.2177011,
+ "lon": 3.2274870
+ },
+ {
+ "type": "node",
+ "id": 5640768023,
+ "lat": 51.2154007,
+ "lon": 3.2273086
+ },
+ {
+ "type": "node",
+ "id": 5640768025,
+ "lat": 51.2153382,
+ "lon": 3.2273203
+ },
+ {
+ "type": "node",
+ "id": 6348562150,
+ "lat": 51.2154829,
+ "lon": 3.2287643
+ },
+ {
+ "type": "node",
+ "id": 6561942361,
+ "lat": 51.2176798,
+ "lon": 3.2274563
+ },
+ {
+ "type": "node",
+ "id": 6561942362,
+ "lat": 51.2177549,
+ "lon": 3.2270226
+ },
+ {
+ "type": "node",
+ "id": 6561942371,
+ "lat": 51.2177304,
+ "lon": 3.2289344
+ },
+ {
+ "type": "node",
+ "id": 6658682612,
+ "lat": 51.2175494,
+ "lon": 3.2258683
+ },
+ {
+ "type": "node",
+ "id": 7027365013,
+ "lat": 51.2178646,
+ "lon": 3.2269132
+ },
+ {
+ "type": "node",
+ "id": 7126734983,
+ "lat": 51.2143342,
+ "lon": 3.2248487
+ },
+ {
+ "type": "node",
+ "id": 7126783786,
+ "lat": 51.2137384,
+ "lon": 3.2255023
+ },
+ {
+ "type": "node",
+ "id": 7126783787,
+ "lat": 51.2135399,
+ "lon": 3.2254431
+ },
+ {
+ "type": "node",
+ "id": 7126783788,
+ "lat": 51.2136719,
+ "lon": 3.2261844
+ },
+ {
+ "type": "node",
+ "id": 7590403605,
+ "lat": 51.2146606,
+ "lon": 3.2244543
+ },
+ {
+ "type": "node",
+ "id": 7593240134,
+ "lat": 51.2152793,
+ "lon": 3.2263887
+ },
+ {
+ "type": "node",
+ "id": 7603400154,
+ "lat": 51.2135899,
+ "lon": 3.2279978
+ },
+ {
+ "type": "node",
+ "id": 7606892008,
+ "lat": 51.2131429,
+ "lon": 3.2272689
+ },
+ {
+ "type": "node",
+ "id": 26349092,
+ "lat": 51.2136994,
+ "lon": 3.2314889
+ },
+ {
+ "type": "node",
+ "id": 310384698,
+ "lat": 51.2195470,
+ "lon": 3.2316137
+ },
+ {
+ "type": "node",
+ "id": 310384700,
+ "lat": 51.2183585,
+ "lon": 3.2332160
+ },
+ {
+ "type": "node",
+ "id": 310384702,
+ "lat": 51.2171715,
+ "lon": 3.2351858
+ },
+ {
+ "type": "node",
+ "id": 310384703,
+ "lat": 51.2164066,
+ "lon": 3.2363716
+ },
+ {
+ "type": "node",
+ "id": 310384810,
+ "lat": 51.2138831,
+ "lon": 3.2324073
+ },
+ {
+ "type": "node",
+ "id": 310384811,
+ "lat": 51.2141694,
+ "lon": 3.2333978
+ },
+ {
+ "type": "node",
+ "id": 310384812,
+ "lat": 51.2145736,
+ "lon": 3.2343232
+ },
+ {
+ "type": "node",
+ "id": 310384813,
+ "lat": 51.2151763,
+ "lon": 3.2355708
+ },
+ {
+ "type": "node",
+ "id": 310386804,
+ "lat": 51.2137564,
+ "lon": 3.2314818
+ },
+ {
+ "type": "node",
+ "id": 310386805,
+ "lat": 51.2140495,
+ "lon": 3.2313547
+ },
+ {
+ "type": "node",
+ "id": 310386806,
+ "lat": 51.2141834,
+ "lon": 3.2316932
+ },
+ {
+ "type": "node",
+ "id": 310386807,
+ "lat": 51.2147222,
+ "lon": 3.2315010
+ },
+ {
+ "type": "node",
+ "id": 310386808,
+ "lat": 51.2147877,
+ "lon": 3.2312311
+ },
+ {
+ "type": "node",
+ "id": 310386809,
+ "lat": 51.2152510,
+ "lon": 3.2311913
+ },
+ {
+ "type": "node",
+ "id": 310386852,
+ "lat": 51.2141520,
+ "lon": 3.2310906
+ },
+ {
+ "type": "node",
+ "id": 310386853,
+ "lat": 51.2145147,
+ "lon": 3.2310702
+ },
+ {
+ "type": "node",
+ "id": 310386950,
+ "lat": 51.2158236,
+ "lon": 3.2346942
+ },
+ {
+ "type": "node",
+ "id": 310386953,
+ "lat": 51.2155780,
+ "lon": 3.2339486
+ },
+ {
+ "type": "node",
+ "id": 310386955,
+ "lat": 51.2154167,
+ "lon": 3.2333992
+ },
+ {
+ "type": "node",
+ "id": 310386957,
+ "lat": 51.2153397,
+ "lon": 3.2327550
+ },
+ {
+ "type": "node",
+ "id": 310386959,
+ "lat": 51.2152794,
+ "lon": 3.2318680
+ },
+ {
+ "type": "node",
+ "id": 310387184,
+ "lat": 51.2147354,
+ "lon": 3.2320491
+ },
+ {
+ "type": "node",
+ "id": 310387288,
+ "lat": 51.2169436,
+ "lon": 3.2344622
+ },
+ {
+ "type": "node",
+ "id": 310387289,
+ "lat": 51.2167981,
+ "lon": 3.2337477
+ },
+ {
+ "type": "node",
+ "id": 310387332,
+ "lat": 51.2164470,
+ "lon": 3.2339540
+ },
+ {
+ "type": "node",
+ "id": 310387333,
+ "lat": 51.2160273,
+ "lon": 3.2344286
+ },
+ {
+ "type": "node",
+ "id": 310387552,
+ "lat": 51.2192098,
+ "lon": 3.2336273
+ },
+ {
+ "type": "node",
+ "id": 310387611,
+ "lat": 51.2184856,
+ "lon": 3.2334503
+ },
+ {
+ "type": "node",
+ "id": 310387613,
+ "lat": 51.2187285,
+ "lon": 3.2336224
+ },
+ {
+ "type": "node",
+ "id": 310387614,
+ "lat": 51.2189099,
+ "lon": 3.2339750
+ },
+ {
+ "type": "node",
+ "id": 901157328,
+ "lat": 51.2180929,
+ "lon": 3.2351438
+ },
+ {
+ "type": "node",
+ "id": 1165320165,
+ "lat": 51.2139530,
+ "lon": 3.2327481
+ },
+ {
+ "type": "node",
+ "id": 1165547316,
+ "lat": 51.2166506,
+ "lon": 3.2313882
+ },
+ {
+ "type": "node",
+ "id": 1588366024,
+ "lat": 51.2196503,
+ "lon": 3.2314973
+ },
+ {
+ "type": "node",
+ "id": 1588366044,
+ "lat": 51.2195822,
+ "lon": 3.2315639
+ },
+ {
+ "type": "node",
+ "id": 1651562042,
+ "lat": 51.2196069,
+ "lon": 3.2315258
+ },
+ {
+ "type": "node",
+ "id": 1789677057,
+ "lat": 51.2140808,
+ "lon": 3.2312240
+ },
+ {
+ "type": "node",
+ "id": 1789677058,
+ "lat": 51.2141354,
+ "lon": 3.2314440
+ },
+ {
+ "type": "node",
+ "id": 1789677060,
+ "lat": 51.2144481,
+ "lon": 3.2316310
+ },
+ {
+ "type": "node",
+ "id": 1789677086,
+ "lat": 51.2149260,
+ "lon": 3.2312191
+ },
+ {
+ "type": "node",
+ "id": 1826530931,
+ "lat": 51.2161181,
+ "lon": 3.2355620
+ },
+ {
+ "type": "node",
+ "id": 1910151452,
+ "lat": 51.2151090,
+ "lon": 3.2354338
+ },
+ {
+ "type": "node",
+ "id": 1913726004,
+ "lat": 51.2166973,
+ "lon": 3.2321937
+ },
+ {
+ "type": "node",
+ "id": 4580122482,
+ "lat": 51.2137168,
+ "lon": 3.2315908
+ },
+ {
+ "type": "node",
+ "id": 4580122483,
+ "lat": 51.2157043,
+ "lon": 3.2365982
+ },
+ {
+ "type": "node",
+ "id": 4580122485,
+ "lat": 51.2159798,
+ "lon": 3.2370538
+ },
+ {
+ "type": "node",
+ "id": 5067195523,
+ "lat": 51.2139872,
+ "lon": 3.2328723
+ },
+ {
+ "type": "node",
+ "id": 5067375670,
+ "lat": 51.2147866,
+ "lon": 3.2348231
+ },
+ {
+ "type": "node",
+ "id": 5069360918,
+ "lat": 51.2141523,
+ "lon": 3.2315276
+ },
+ {
+ "type": "node",
+ "id": 5069361795,
+ "lat": 51.2147814,
+ "lon": 3.2313488
+ },
+ {
+ "type": "node",
+ "id": 5069361981,
+ "lat": 51.2140871,
+ "lon": 3.2313667
+ },
+ {
+ "type": "node",
+ "id": 5069362025,
+ "lat": 51.2141130,
+ "lon": 3.2313915
+ },
+ {
+ "type": "node",
+ "id": 5069362040,
+ "lat": 51.2145410,
+ "lon": 3.2310413
+ },
+ {
+ "type": "node",
+ "id": 5069362050,
+ "lat": 51.2146881,
+ "lon": 3.2315320
+ },
+ {
+ "type": "node",
+ "id": 5069362141,
+ "lat": 51.2142656,
+ "lon": 3.2310728
+ },
+ {
+ "type": "node",
+ "id": 5069362207,
+ "lat": 51.2148064,
+ "lon": 3.2310645
+ },
+ {
+ "type": "node",
+ "id": 5069362219,
+ "lat": 51.2149406,
+ "lon": 3.2310866
+ },
+ {
+ "type": "node",
+ "id": 5069511716,
+ "lat": 51.2148737,
+ "lon": 3.2319984
+ },
+ {
+ "type": "node",
+ "id": 5069512362,
+ "lat": 51.2150734,
+ "lon": 3.2319262
+ },
+ {
+ "type": "node",
+ "id": 5070096027,
+ "lat": 51.2150349,
+ "lon": 3.2329063
+ },
+ {
+ "type": "node",
+ "id": 5072243352,
+ "lat": 51.2186649,
+ "lon": 3.2335556
+ },
+ {
+ "type": "node",
+ "id": 5072243625,
+ "lat": 51.2182094,
+ "lon": 3.2349941
+ },
+ {
+ "type": "node",
+ "id": 5072243644,
+ "lat": 51.2188097,
+ "lon": 3.2341091
+ },
+ {
+ "type": "node",
+ "id": 5228742314,
+ "lat": 51.2147181,
+ "lon": 3.2310568
+ },
+ {
+ "type": "node",
+ "id": 5230685854,
+ "lat": 51.2167105,
+ "lon": 3.2323976
+ },
+ {
+ "type": "node",
+ "id": 5604763205,
+ "lat": 51.2154802,
+ "lon": 3.2336156
+ },
+ {
+ "type": "node",
+ "id": 7688029840,
+ "lat": 51.2143792,
+ "lon": 3.2332787
+ },
+ {
+ "type": "node",
+ "id": 26363639,
+ "lat": 51.2198738,
+ "lon": 3.2300644
+ },
+ {
+ "type": "node",
+ "id": 26363699,
+ "lat": 51.2196961,
+ "lon": 3.2299535
+ },
+ {
+ "type": "node",
+ "id": 26363726,
+ "lat": 51.2202414,
+ "lon": 3.2307765
+ },
+ {
+ "type": "node",
+ "id": 26363789,
+ "lat": 51.2200260,
+ "lon": 3.2301734
+ },
+ {
+ "type": "node",
+ "id": 26363810,
+ "lat": 51.2199772,
+ "lon": 3.2301236
+ },
+ {
+ "type": "node",
+ "id": 131914187,
+ "lat": 51.2205774,
+ "lon": 3.2307366
+ },
+ {
+ "type": "node",
+ "id": 131914189,
+ "lat": 51.2207648,
+ "lon": 3.2295373
+ },
+ {
+ "type": "node",
+ "id": 131914190,
+ "lat": 51.2209513,
+ "lon": 3.2278556
+ },
+ {
+ "type": "node",
+ "id": 131914193,
+ "lat": 51.2210126,
+ "lon": 3.2269793
+ },
+ {
+ "type": "node",
+ "id": 271927352,
+ "lat": 51.2210328,
+ "lon": 3.2267095
+ },
+ {
+ "type": "node",
+ "id": 271927353,
+ "lat": 51.2201448,
+ "lon": 3.2267080
+ },
+ {
+ "type": "node",
+ "id": 312708914,
+ "lat": 51.2201017,
+ "lon": 3.2293907
+ },
+ {
+ "type": "node",
+ "id": 312708915,
+ "lat": 51.2203091,
+ "lon": 3.2285973
+ },
+ {
+ "type": "node",
+ "id": 312708916,
+ "lat": 51.2205859,
+ "lon": 3.2275666
+ },
+ {
+ "type": "node",
+ "id": 312709050,
+ "lat": 51.2209234,
+ "lon": 3.2280828
+ },
+ {
+ "type": "node",
+ "id": 312709080,
+ "lat": 51.2200730,
+ "lon": 3.2284273
+ },
+ {
+ "type": "node",
+ "id": 312709081,
+ "lat": 51.2197140,
+ "lon": 3.2277089
+ },
+ {
+ "type": "node",
+ "id": 1164763931,
+ "lat": 51.2210009,
+ "lon": 3.2273388
+ },
+ {
+ "type": "node",
+ "id": 1165547371,
+ "lat": 51.2201041,
+ "lon": 3.2301997
+ },
+ {
+ "type": "node",
+ "id": 1789717059,
+ "lat": 51.2209360,
+ "lon": 3.2279797
+ },
+ {
+ "type": "node",
+ "id": 1789717060,
+ "lat": 51.2209839,
+ "lon": 3.2275960
+ },
+ {
+ "type": "node",
+ "id": 1927150828,
+ "lat": 51.2199554,
+ "lon": 3.2267364
+ },
+ {
+ "type": "node",
+ "id": 1927166220,
+ "lat": 51.2205534,
+ "lon": 3.2267017
+ },
+ {
+ "type": "node",
+ "id": 1927267438,
+ "lat": 51.2201538,
+ "lon": 3.2291914
+ },
+ {
+ "type": "node",
+ "id": 1927272704,
+ "lat": 51.2201226,
+ "lon": 3.2284844
+ },
+ {
+ "type": "node",
+ "id": 4580122491,
+ "lat": 51.2208544,
+ "lon": 3.2287154
+ },
+ {
+ "type": "node",
+ "id": 5226734750,
+ "lat": 51.2201282,
+ "lon": 3.2292893
+ },
+ {
+ "type": "node",
+ "id": 6260943454,
+ "lat": 51.2209565,
+ "lon": 3.2266961
+ },
+ {
+ "type": "node",
+ "id": 6348562148,
+ "lat": 51.2202019,
+ "lon": 3.2267051
+ },
+ {
+ "type": "node",
+ "id": 7039526731,
+ "lat": 51.2204786,
+ "lon": 3.2279661
+ },
+ {
+ "type": "node",
+ "id": 7649068031,
+ "lat": 51.2201501,
+ "lon": 3.2304557
+ },
+ {
+ "type": "node",
+ "id": 26343742,
+ "lat": 51.2199605,
+ "lon": 3.2311817
+ },
+ {
+ "type": "node",
+ "id": 26343755,
+ "lat": 51.2211675,
+ "lon": 3.2328363
+ },
+ {
+ "type": "node",
+ "id": 26343756,
+ "lat": 51.2216142,
+ "lon": 3.2335008
+ },
+ {
+ "type": "node",
+ "id": 26363614,
+ "lat": 51.2207213,
+ "lon": 3.2320263
+ },
+ {
+ "type": "node",
+ "id": 26363674,
+ "lat": 51.2206280,
+ "lon": 3.2318164
+ },
+ {
+ "type": "node",
+ "id": 131913801,
+ "lat": 51.2203374,
+ "lon": 3.2311131
+ },
+ {
+ "type": "node",
+ "id": 766991589,
+ "lat": 51.2207461,
+ "lon": 3.2320953
+ },
+ {
+ "type": "node",
+ "id": 766991590,
+ "lat": 51.2208351,
+ "lon": 3.2324419
+ },
+ {
+ "type": "node",
+ "id": 1107471155,
+ "lat": 51.2216804,
+ "lon": 3.2336543
+ },
+ {
+ "type": "node",
+ "id": 1165547361,
+ "lat": 51.2204473,
+ "lon": 3.2314145
+ },
+ {
+ "type": "node",
+ "id": 1651562059,
+ "lat": 51.2197007,
+ "lon": 3.2314550
+ },
+ {
+ "type": "node",
+ "id": 1789691190,
+ "lat": 51.2209809,
+ "lon": 3.2332265
+ },
+ {
+ "type": "node",
+ "id": 1789691458,
+ "lat": 51.2214052,
+ "lon": 3.2331707
+ },
+ {
+ "type": "node",
+ "id": 1789691460,
+ "lat": 51.2215490,
+ "lon": 3.2333666
+ },
+ {
+ "type": "node",
+ "id": 1930492255,
+ "lat": 51.2209146,
+ "lon": 3.2333458
+ },
+ {
+ "type": "node",
+ "id": 1930492256,
+ "lat": 51.2213180,
+ "lon": 3.2330480
+ },
+ {
+ "type": "node",
+ "id": 5124619738,
+ "lat": 51.2209198,
+ "lon": 3.2325945
+ },
+ {
+ "type": "node",
+ "id": 5124619739,
+ "lat": 51.2208613,
+ "lon": 3.2325146
+ }
+
+ ]
+}
diff --git a/assets/tree.svg b/assets/tree.svg
deleted file mode 100644
index 436c0ee46..000000000
--- a/assets/tree.svg
+++ /dev/null
@@ -1,167 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/assets/tree_white_background.svg b/assets/tree_white_background.svg
deleted file mode 100644
index 30473fbf2..000000000
--- a/assets/tree_white_background.svg
+++ /dev/null
@@ -1,1036 +0,0 @@
-
-
-
-
-
- image/svg+xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/clean.sh b/clean.sh
new file mode 100755
index 000000000..4fac85da8
--- /dev/null
+++ b/clean.sh
@@ -0,0 +1,12 @@
+#! /bin/bash
+rm *.js
+rm Logic/*.js
+rm Logic/*.js
+rm Logic/*/*.js
+rm Logic/*/*/*.js
+rm UI/*.js
+rm UI/*/*.js
+rm UI/*/*/*.js
+rm Customizations/*.js
+rm Customizations/*/*.js
+rm Customizations/*/*/*.js
diff --git a/deploy.sh b/deploy.sh
new file mode 100755
index 000000000..af9728faa
--- /dev/null
+++ b/deploy.sh
@@ -0,0 +1,9 @@
+#! /bin/bash
+
+npm run build
+rm -rf /home/pietervdvn/git/pietervdvn.github.io/MapComplete/*
+cp -r dist/* /home/pietervdvn/git/pietervdvn.github.io/MapComplete/
+cd /home/pietervdvn/git/pietervdvn.github.io/MapComplete/
+git add .
+git commit -m "New mapcomplete version"
+git push
diff --git a/index.css b/index.css
index 3c7afcf85..c3dceae91 100644
--- a/index.css
+++ b/index.css
@@ -615,9 +615,9 @@ form {
padding: 0.3em;
border-radius: 0.35em;
border: solid black 1px;
- margin-left: 1em;
+ margin-left: 0.5em;
top: 0.2em;
- position: absolute;
+ vertical-align: middle;
}
diff --git a/index.ts b/index.ts
index e4ad76697..9f9b5fa2e 100644
--- a/index.ts
+++ b/index.ts
@@ -29,14 +29,12 @@ import { Layout } from "./Customizations/Layout";
import ParkingType from "./Customizations/Questions/bike/ParkingType";
-
-
// --------------------- Read the URL parameters -----------------
// @ts-ignore
-if(location.href.startsWith("http://buurtnatuur.be")){
+if (location.href.startsWith("http://buurtnatuur.be")) {
// Reload the https version. This is important for the 'locate me' button
- window.location.replace("https://buurtnatuur.be");
+ window.location.replace("https://buurtnatuur.be");
}
@@ -45,10 +43,10 @@ let dryRun = false;
if (location.hostname === "localhost" || location.hostname === "127.0.0.1") {
// Set to true if testing and changes should NOT be saved
- // dryRun = true;
+ dryRun = true;
// If you have a testfile somewhere, enable this to spoof overpass
// This should be hosted independantly, e.g. with `cd assets; webfsd -p 8080` + a CORS plugin to disable cors rules
- Overpass.testUrl = null; // "http://127.0.0.1:8080/test.json";
+ //Overpass.testUrl = "http://127.0.0.1:8080/streetwidths.geojson";
}
@@ -80,8 +78,6 @@ if (window.location.search) {
var kv = param.split("=");
paramDict[kv[0]] = kv[1];
}
-
-
}
if (paramDict.layout) {
@@ -89,7 +85,7 @@ if (paramDict.layout) {
}
if (paramDict.test) {
- dryRun = true;
+ dryRun = paramDict.test === "true";
}
const layoutToUse: Layout = AllKnownLayouts.allSets[defaultLayout];
@@ -150,7 +146,7 @@ const bm = new Basemap("leafletDiv", locationControl, new VariableUiElement(
// ------------- Setup the layers -------------------------------
-
+const controls = {};
const addButtons: {
name: string,
icon: string,
@@ -180,6 +176,8 @@ for (const layer of layoutToUse.layers) {
const flayer = layer.asLayer(bm, allElements, changes, osmConnection.userDetails, selectedElement, generateInfo);
+ controls[layer.name] = flayer.isDisplayed;
+
const addButton = {
name: layer.name,
icon: layer.icon,
@@ -233,7 +231,7 @@ selectedElement.addCallback((data) => {
const pendingChanges = new PendingChanges(
- changes.pendingChangesES, secondsTillChangesAreSaved, changes.isSaving);
+ changes, secondsTillChangesAreSaved,);
new UserBadge(osmConnection.userDetails, pendingChanges, bm)
.AttachTo('userbadge');
@@ -262,7 +260,9 @@ leftMessage.setData(welcomeMessage);
welcomeMessage().AttachTo("messagesbox");
-var messageBox = new MessageBoxHandler(leftMessage, () => {selectedElement.setData(undefined)});
+var messageBox = new MessageBoxHandler(leftMessage, () => {
+ selectedElement.setData(undefined)
+});
new CenterMessageBox(
minZoom,
diff --git a/package-lock.json b/package-lock.json
index d4ff40f14..fc5d30e04 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -3775,9 +3775,9 @@
}
},
"lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ "version": "4.17.19",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ=="
},
"lodash.clone": {
"version": "4.5.0",
diff --git a/package.json b/package.json
index 6140d8bb0..8c40df31d 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"description": "A small website to edit OSM easily",
"main": "index.js",
"scripts": {
- "start": "parcel index.html land.html test.html assets/test.json assets/**/* UI/* Logic/* vendor/*",
+ "start": "parcel index.html land.html test.html assets/test.json assets/**/* UI/* Logic/** vendor/*",
"build": "rm -rf dist/ && parcel build --public-url ./ index.html land.html assets/* assets/*/*",
"test": "echo \"Error: no test specified\" && exit 1"
},
diff --git a/test.ts b/test.ts
index b7e9bd39c..8957dc070 100644
--- a/test.ts
+++ b/test.ts
@@ -7,11 +7,14 @@ import {OsmLink} from "./Customizations/Questions/OsmLink";
import {ConfirmDialog} from "./UI/ConfirmDialog";
import {Imgur} from "./Logic/Imgur";
import {VariableUiElement} from "./UI/Base/VariableUIElement";
+import {CheckBox} from "./UI/Base/CheckBox";
-const html = new UIEventSource("Some text");
+const eventSource = new UIEventSource(false);
+eventSource.addCallback(console.log)
-const uielement = new VariableUiElement(html);
-uielement.AttachTo("maindiv")
-
-window.setTimeout(() => {html.setData("Different text")}, 1000)
\ No newline at end of file
+new CheckBox(eventSource)
+ .onClick(() => {
+ eventSource.setData(!eventSource.data);
+ })
+ .AttachTo("maindiv");