mapcomplete/test/SplitAction.spec.ts

2111 lines
No EOL
95 KiB
TypeScript

import T from "./TestHelper";
import {Changes} from "../Logic/Osm/Changes";
import SplitAction from "../Logic/Osm/Actions/SplitAction";
import {equal} from "assert";
import {Utils} from "../Utils";
export default class SplitActionSpec extends T {
private static async split(): Promise<void> {
Utils.injectJsonDownloadForTests(
"https://www.openstreetmap.org/api/0.6/way/295132739/full",
{
"version": "0.6",
"generator": "CGImap 0.8.5 (3138407 spike-07.openstreetmap.org)",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"elements": [{
"type": "node",
"id": 170497153,
"lat": 51.1825167,
"lon": 3.2487885,
"timestamp": "2011-11-18T16:33:43Z",
"version": 5,
"changeset": 9865255,
"user": "TripleBee",
"uid": 497177
}, {
"type": "node",
"id": 170497155,
"lat": 51.1817632,
"lon": 3.2472706,
"timestamp": "2011-11-18T16:33:43Z",
"version": 5,
"changeset": 9865255,
"user": "TripleBee",
"uid": 497177
}, {
"type": "node",
"id": 170497157,
"lat": 51.1815203,
"lon": 3.2465569,
"timestamp": "2011-11-18T16:33:43Z",
"version": 5,
"changeset": 9865255,
"user": "TripleBee",
"uid": 497177
}, {
"type": "node",
"id": 170497158,
"lat": 51.1812261,
"lon": 3.2454261,
"timestamp": "2011-11-18T16:33:43Z",
"version": 5,
"changeset": 9865255,
"user": "TripleBee",
"uid": 497177
}, {
"type": "node",
"id": 170497160,
"lat": 51.1810957,
"lon": 3.2443030,
"timestamp": "2011-11-18T16:33:43Z",
"version": 5,
"changeset": 9865255,
"user": "TripleBee",
"uid": 497177
}, {
"type": "node",
"id": 1507524573,
"lat": 51.1810778,
"lon": 3.2437148,
"timestamp": "2011-11-18T16:33:36Z",
"version": 1,
"changeset": 9865255,
"user": "TripleBee",
"uid": 497177
}, {
"type": "node",
"id": 1507524582,
"lat": 51.1821130,
"lon": 3.2481284,
"timestamp": "2011-11-18T16:33:37Z",
"version": 1,
"changeset": 9865255,
"user": "TripleBee",
"uid": 497177
}, {
"type": "node",
"id": 1507524610,
"lat": 51.1811645,
"lon": 3.2450828,
"timestamp": "2011-11-18T16:33:38Z",
"version": 1,
"changeset": 9865255,
"user": "TripleBee",
"uid": 497177
}, {
"type": "node",
"id": 1575932830,
"lat": 51.1811153,
"lon": 3.2431503,
"timestamp": "2019-05-04T22:44:13Z",
"version": 2,
"changeset": 69891295,
"user": "Pieter Vander Vennet",
"uid": 3818858
}, {
"type": "node",
"id": 3208166178,
"lat": 51.1810837,
"lon": 3.2439090,
"timestamp": "2014-11-27T20:23:10Z",
"version": 1,
"changeset": 27076816,
"user": "JanFi",
"uid": 672253
}, {
"type": "node",
"id": 3208166179,
"lat": 51.1812062,
"lon": 3.2453151,
"timestamp": "2014-11-27T20:23:10Z",
"version": 1,
"changeset": 27076816,
"user": "JanFi",
"uid": 672253
}, {
"type": "node",
"id": 4524321710,
"lat": 51.1820656,
"lon": 3.2480253,
"timestamp": "2017-12-09T18:56:37Z",
"version": 2,
"changeset": 54493928,
"user": "CacherB",
"uid": 1999108
}, {
"type": "node",
"id": 5273988967,
"lat": 51.1826590,
"lon": 3.2490040,
"timestamp": "2017-12-09T18:40:21Z",
"version": 1,
"changeset": 54493533,
"user": "CacherB",
"uid": 1999108
}, {
"type": "node",
"id": 6448669326,
"lat": 51.1811346,
"lon": 3.2428910,
"timestamp": "2019-05-04T22:44:12Z",
"version": 1,
"changeset": 69891295,
"user": "Pieter Vander Vennet",
"uid": 3818858,
"tags": {"barrier": "bollard"}
}, {
"type": "way",
"id": 295132739,
"timestamp": "2021-07-29T21:14:53Z",
"version": 17,
"changeset": 108847202,
"user": "kaart_fietser",
"uid": 11022240,
"nodes": [5273988967, 170497153, 1507524582, 4524321710, 170497155, 170497157, 170497158, 3208166179, 1507524610, 170497160, 3208166178, 1507524573, 1575932830, 6448669326],
"tags": {
"highway": "cycleway",
"name": "Abdijenroute",
"railway": "abandoned",
"surface": "compacted"
}
}]
})
Utils.injectJsonDownloadForTests(
"https://www.openstreetmap.org/api/0.6/way/295132739/relations",
// Mimick that there are no relations relation is missing
{
"version": "0.6",
"generator": "CGImap 0.8.5 (2935793 spike-07.openstreetmap.org)",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"elements": []
}
)
// Lets split road https://www.openstreetmap.org/way/295132739
const id = "way/295132739"
const splitPoint: [number, number] = [3.246733546257019, 51.181710380278176]
const splitter = new SplitAction(id, [splitPoint], {
theme: "test"
})
const changeDescription = await splitter.CreateChangeDescriptions(new Changes())
equal(changeDescription[0].type, "node")
equal(changeDescription[0].id, -1)
equal(changeDescription[0].changes["lat"], 51.181710380278176)
equal(changeDescription[0].changes["lon"], 3.246733546257019)
equal(changeDescription[1].type, "way")
equal(changeDescription[1].id, -2)
equal(changeDescription[1].changes["coordinates"].length, 6)
equal(changeDescription[1].changes["coordinates"][5][0], splitPoint[0])
equal(changeDescription[1].changes["coordinates"][5][1], splitPoint[1])
equal(changeDescription[2].type, "way")
equal(changeDescription[2].id, 295132739)
equal(changeDescription[2].changes["coordinates"].length, 10)
equal(changeDescription[2].changes["coordinates"][0][0], splitPoint[0])
equal(changeDescription[2].changes["coordinates"][0][1], splitPoint[1])
}
private static async SplitHoutkaai(): Promise<void> {
Utils.injectJsonDownloadForTests(
"https://www.openstreetmap.org/api/0.6/way/61435323/full",
{
"version": "0.6",
"generator": "CGImap 0.8.5 (53092 spike-08.openstreetmap.org)",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"elements": [{
"type": "node",
"id": 766990983,
"lat": 51.2170219,
"lon": 3.2022337,
"timestamp": "2021-04-26T15:48:22Z",
"version": 6,
"changeset": 103647857,
"user": "M!dgard",
"uid": 763799
}, {
"type": "node",
"id": 766990985,
"lat": 51.2169574,
"lon": 3.2017548,
"timestamp": "2016-07-05T22:41:12Z",
"version": 6,
"changeset": 40511250,
"user": "M!dgard",
"uid": 763799
}, {
"type": "node",
"id": 8669018379,
"lat": 51.2169592,
"lon": 3.2017683,
"timestamp": "2021-04-26T15:48:22Z",
"version": 1,
"changeset": 103647857,
"user": "M!dgard",
"uid": 763799
}, {
"type": "way",
"id": 61435323,
"timestamp": "2021-08-21T12:24:13Z",
"version": 7,
"changeset": 110026637,
"user": "Thibault Rommel",
"uid": 5846458,
"nodes": [766990983, 8669018379, 766990985],
"tags": {
"bicycle": "yes",
"bridge": "yes",
"cycleway": "shared_lane",
"highway": "unclassified",
"layer": "1",
"maxspeed": "50",
"name": "Houtkaai",
"surface": "asphalt",
"zone:traffic": "BE-VLG:urban"
}
}]
}
)
Utils.injectJsonDownloadForTests(
"https://www.openstreetmap.org/api/0.6/way/61435323/relations",
{
"version": "0.6",
"generator": "CGImap 0.8.5 (3622541 spike-06.openstreetmap.org)",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"elements": [{
"type": "relation",
"id": 1723870,
"timestamp": "2021-09-18T06:29:31Z",
"version": 183,
"changeset": 111362343,
"user": "emvee",
"uid": 5211,
"members": [{"type": "way", "ref": 261428947, "role": ""}, {
"type": "way",
"ref": 162774622,
"role": ""
}, {"type": "way", "ref": 317060244, "role": ""}, {
"type": "way",
"ref": 81155378,
"role": ""
}, {"type": "way", "ref": 99749583, "role": ""}, {
"type": "way",
"ref": 131332113,
"role": ""
}, {"type": "way", "ref": 949518831, "role": ""}, {
"type": "way",
"ref": 99749584,
"role": ""
}, {"type": "way", "ref": 129133519, "role": ""}, {
"type": "way",
"ref": 73241312,
"role": ""
}, {"type": "way", "ref": 785514256, "role": ""}, {
"type": "way",
"ref": 58509643,
"role": ""
}, {"type": "way", "ref": 73241332, "role": ""}, {
"type": "way",
"ref": 58509653,
"role": ""
}, {"type": "way", "ref": 100044097, "role": ""}, {
"type": "way",
"ref": 946999067,
"role": ""
}, {"type": "way", "ref": 73241327, "role": ""}, {
"type": "way",
"ref": 58509617,
"role": ""
}, {"type": "way", "ref": 58509627, "role": ""}, {
"type": "way",
"ref": 69990655,
"role": ""
}, {"type": "way", "ref": 73241311, "role": ""}, {
"type": "way",
"ref": 123142336,
"role": ""
}, {"type": "way", "ref": 249671053, "role": ""}, {
"type": "way",
"ref": 73241324,
"role": ""
}, {"type": "way", "ref": 66706953, "role": ""}, {
"type": "way",
"ref": 112679357,
"role": ""
}, {"type": "way", "ref": 112679358, "role": ""}, {
"type": "way",
"ref": 53105113,
"role": ""
}, {"type": "way", "ref": 66706952, "role": ""}, {
"type": "way",
"ref": 64083661,
"role": ""
}, {"type": "way", "ref": 53105162, "role": ""}, {
"type": "way",
"ref": 249671070,
"role": ""
}, {"type": "way", "ref": 249671064, "role": ""}, {
"type": "way",
"ref": 101498587,
"role": ""
}, {"type": "way", "ref": 69001236, "role": ""}, {
"type": "way",
"ref": 101498585,
"role": ""
}, {"type": "way", "ref": 70909444, "role": ""}, {
"type": "way",
"ref": 73241314,
"role": ""
}, {"type": "way", "ref": 69001235, "role": ""}, {
"type": "way",
"ref": 113150200,
"role": ""
}, {"type": "way", "ref": 137305843, "role": ""}, {
"type": "way",
"ref": 936827687,
"role": ""
}, {"type": "way", "ref": 936827688, "role": ""}, {
"type": "way",
"ref": 112952373,
"role": ""
}, {"type": "way", "ref": 930798379, "role": ""}, {
"type": "way",
"ref": 930798378,
"role": ""
}, {"type": "way", "ref": 112951439, "role": ""}, {
"type": "way",
"ref": 445541591,
"role": ""
}, {"type": "way", "ref": 103843896, "role": ""}, {
"type": "way",
"ref": 23734118,
"role": ""
}, {"type": "way", "ref": 103840557, "role": ""}, {
"type": "way",
"ref": 433852210,
"role": ""
}, {"type": "way", "ref": 313604670, "role": ""}, {
"type": "way",
"ref": 103839402,
"role": ""
}, {"type": "way", "ref": 23736061, "role": ""}, {
"type": "way",
"ref": 73241328,
"role": ""
}, {"type": "way", "ref": 295392689, "role": ""}, {
"type": "way",
"ref": 297168171,
"role": ""
}, {"type": "way", "ref": 297168170, "role": ""}, {
"type": "way",
"ref": 433852205,
"role": ""
}, {"type": "way", "ref": 295392695, "role": ""}, {
"type": "way",
"ref": 663268954,
"role": ""
}, {"type": "way", "ref": 663267598, "role": ""}, {
"type": "way",
"ref": 292478843,
"role": ""
}, {"type": "way", "ref": 981853853, "role": ""}, {
"type": "way",
"ref": 663270140,
"role": ""
}, {"type": "way", "ref": 981853854, "role": ""}, {
"type": "way",
"ref": 295392703,
"role": ""
}, {"type": "way", "ref": 663304916, "role": ""}, {
"type": "way",
"ref": 297169116,
"role": ""
}, {"type": "way", "ref": 295400810, "role": ""}, {
"type": "way",
"ref": 981853855,
"role": ""
}, {"type": "way", "ref": 663304806, "role": ""}, {
"type": "way",
"ref": 516452870,
"role": ""
}, {"type": "way", "ref": 66459239, "role": ""}, {
"type": "way",
"ref": 791430504,
"role": ""
}, {"type": "way", "ref": 178926037, "role": ""}, {
"type": "way",
"ref": 864799431,
"role": ""
}, {"type": "way", "ref": 178926107, "role": ""}, {
"type": "way",
"ref": 663320459,
"role": ""
}, {"type": "way", "ref": 62033993, "role": ""}, {
"type": "way",
"ref": 62283023,
"role": ""
}, {"type": "way", "ref": 62283057, "role": ""}, {
"type": "way",
"ref": 62283032,
"role": ""
}, {"type": "way", "ref": 490551085, "role": ""}, {
"type": "way",
"ref": 435318979,
"role": ""
}, {"type": "way", "ref": 371750677, "role": ""}, {
"type": "way",
"ref": 371750670,
"role": ""
}, {"type": "way", "ref": 371750673, "role": ""}, {
"type": "way",
"ref": 371750675,
"role": ""
}, {"type": "way", "ref": 459885691, "role": ""}, {
"type": "way",
"ref": 371750669,
"role": ""
}, {"type": "way", "ref": 371750668, "role": ""}, {
"type": "way",
"ref": 371750667,
"role": ""
}, {"type": "way", "ref": 428848639, "role": ""}, {
"type": "way",
"ref": 371750666,
"role": ""
}, {"type": "way", "ref": 371750665, "role": ""}, {
"type": "way",
"ref": 825496473,
"role": ""
}, {"type": "way", "ref": 371750664, "role": ""}, {
"type": "way",
"ref": 371750662,
"role": ""
}, {"type": "way", "ref": 371750663, "role": ""}, {
"type": "way",
"ref": 371750660,
"role": ""
}, {"type": "way", "ref": 371750658, "role": ""}, {
"type": "way",
"ref": 40507374,
"role": ""
}, {"type": "way", "ref": 165878356, "role": ""}, {
"type": "way",
"ref": 165878355,
"role": ""
}, {"type": "way", "ref": 8494219, "role": ""}, {
"type": "way",
"ref": 5023947,
"role": ""
}, {"type": "way", "ref": 5023939, "role": ""}, {
"type": "way",
"ref": 26718843,
"role": ""
}, {"type": "way", "ref": 79437029, "role": ""}, {
"type": "way",
"ref": 87522151,
"role": ""
}, {"type": "way", "ref": 26718848, "role": ""}, {
"type": "way",
"ref": 233169831,
"role": ""
}, {"type": "way", "ref": 85934460, "role": ""}, {
"type": "way",
"ref": 145892210,
"role": ""
}, {"type": "way", "ref": 79434764, "role": ""}, {
"type": "way",
"ref": 127079185,
"role": ""
}, {"type": "way", "ref": 67794715, "role": ""}, {
"type": "way",
"ref": 85934250,
"role": ""
}, {"type": "way", "ref": 421566302, "role": ""}, {
"type": "way",
"ref": 123445537,
"role": ""
}, {"type": "way", "ref": 308077683, "role": ""}, {
"type": "way",
"ref": 308077684,
"role": ""
}, {"type": "way", "ref": 972955357, "role": ""}, {
"type": "way",
"ref": 308077682,
"role": ""
}, {"type": "way", "ref": 659880052, "role": ""}, {
"type": "way",
"ref": 308077681,
"role": ""
}, {"type": "way", "ref": 66364130, "role": ""}, {
"type": "way",
"ref": 51086959,
"role": ""
}, {"type": "way", "ref": 51086961, "role": ""}, {
"type": "way",
"ref": 102154586,
"role": ""
}, {"type": "way", "ref": 102154589, "role": ""}, {
"type": "way",
"ref": 703008376,
"role": ""
}, {"type": "way", "ref": 703008375, "role": ""}, {
"type": "way",
"ref": 54435150,
"role": ""
}, {"type": "way", "ref": 115913100, "role": ""}, {
"type": "way",
"ref": 79433785,
"role": ""
}, {"type": "way", "ref": 51204355, "role": ""}, {
"type": "way",
"ref": 422395066,
"role": ""
}, {"type": "way", "ref": 116628138, "role": ""}, {
"type": "way",
"ref": 690189323,
"role": ""
}, {"type": "way", "ref": 132068368, "role": ""}, {
"type": "way",
"ref": 690220771,
"role": ""
}, {"type": "way", "ref": 690220772, "role": ""}, {
"type": "way",
"ref": 690226744,
"role": ""
}, {"type": "way", "ref": 690226745, "role": ""}, {
"type": "way",
"ref": 60253953,
"role": ""
}, {"type": "way", "ref": 690195774, "role": ""}, {
"type": "way",
"ref": 688104939,
"role": ""
}, {"type": "way", "ref": 422395064, "role": "forward"}, {
"type": "way",
"ref": 422309497,
"role": "forward"
}, {"type": "way", "ref": 25677204, "role": "forward"}, {
"type": "way",
"ref": 51570941,
"role": ""
}, {"type": "way", "ref": 807329786, "role": ""}, {
"type": "way",
"ref": 165500495,
"role": ""
}, {"type": "way", "ref": 689494106, "role": ""}, {
"type": "way",
"ref": 131476435,
"role": ""
}, {"type": "way", "ref": 689493508, "role": ""}, {
"type": "way",
"ref": 12126873,
"role": ""
}, {"type": "way", "ref": 32789519, "role": ""}, {
"type": "way",
"ref": 27288122,
"role": ""
}, {"type": "way", "ref": 116717060, "role": ""}, {
"type": "way",
"ref": 176380249,
"role": ""
}, {"type": "way", "ref": 116717052, "role": ""}, {
"type": "way",
"ref": 176380250,
"role": ""
}, {"type": "way", "ref": 421998791, "role": ""}, {
"type": "way",
"ref": 34562745,
"role": ""
}, {"type": "way", "ref": 130473931, "role": ""}, {
"type": "way",
"ref": 136487196,
"role": ""
}, {"type": "way", "ref": 23792223, "role": ""}, {
"type": "way",
"ref": 23775021,
"role": ""
}, {"type": "way", "ref": 560506339, "role": ""}, {
"type": "way",
"ref": 337945886,
"role": ""
}, {"type": "way", "ref": 61435332, "role": ""}, {
"type": "way",
"ref": 61435323,
"role": ""
}, {"type": "way", "ref": 509668834, "role": ""}, {
"type": "way",
"ref": 130473917,
"role": ""
}, {"type": "way", "ref": 369929894, "role": ""}, {
"type": "way",
"ref": 805247467,
"role": "forward"
}, {"type": "way", "ref": 840210016, "role": "forward"}, {
"type": "way",
"ref": 539026983,
"role": "forward"
}, {"type": "way", "ref": 539037793, "role": "forward"}, {
"type": "way",
"ref": 244428576,
"role": "forward"
}, {"type": "way", "ref": 243333119, "role": "forward"}, {
"type": "way",
"ref": 243333108,
"role": "forward"
}, {"type": "way", "ref": 243333106, "role": "forward"}, {
"type": "way",
"ref": 243333110,
"role": "forward"
}, {"type": "way", "ref": 230511503, "role": "forward"}, {
"type": "way",
"ref": 510520445,
"role": "forward"
}, {"type": "way", "ref": 688103605, "role": "forward"}, {
"type": "way",
"ref": 668577053,
"role": "forward"
}, {"type": "way", "ref": 4332489, "role": "forward"}, {
"type": "way",
"ref": 668577051,
"role": "forward"
}, {"type": "way", "ref": 185476761, "role": "forward"}, {
"type": "way",
"ref": 100774483,
"role": "forward"
}, {"type": "way", "ref": 668672434, "role": "backward"}, {
"type": "way",
"ref": 488558133,
"role": "backward"
}, {"type": "way", "ref": 13943237, "role": "forward"}, {
"type": "way",
"ref": 840241791,
"role": "forward"
}, {"type": "way", "ref": 805247468, "role": "forward"}, {
"type": "way",
"ref": 539040946,
"role": "forward"
}, {"type": "way", "ref": 539026103, "role": "forward"}, {
"type": "way",
"ref": 539037781,
"role": "forward"
}, {"type": "way", "ref": 28942112, "role": "forward"}, {
"type": "way",
"ref": 699841535,
"role": "forward"
}, {"type": "way", "ref": 635374201, "role": "forward"}, {
"type": "way",
"ref": 28942118,
"role": "forward"
}, {"type": "way", "ref": 185476755, "role": "forward"}, {
"type": "way",
"ref": 78794903,
"role": "forward"
}, {"type": "way", "ref": 688103599, "role": "forward"}, {
"type": "way",
"ref": 688103600,
"role": "backward"
}, {"type": "way", "ref": 32699077, "role": "backward"}, {
"type": "way",
"ref": 249092420,
"role": "backward"
}, {"type": "way", "ref": 540048295, "role": ""}, {
"type": "way",
"ref": 13942938,
"role": ""
}, {"type": "way", "ref": 827705395, "role": ""}, {
"type": "way",
"ref": 72492953,
"role": ""
}, {"type": "way", "ref": 61435342, "role": ""}, {
"type": "way",
"ref": 95106180,
"role": ""
}, {"type": "way", "ref": 182691326, "role": ""}, {
"type": "way",
"ref": 180915274,
"role": ""
}, {"type": "way", "ref": 61435340, "role": ""}, {
"type": "way",
"ref": 95506626,
"role": ""
}, {"type": "way", "ref": 183330864, "role": ""}, {
"type": "way",
"ref": 318631002,
"role": ""
}, {"type": "way", "ref": 4332470, "role": ""}, {
"type": "way",
"ref": 318631014,
"role": ""
}, {"type": "way", "ref": 337969633, "role": ""}, {
"type": "way",
"ref": 668566903,
"role": ""
}, {"type": "way", "ref": 668566904, "role": ""}, {
"type": "way",
"ref": 248228679,
"role": ""
}, {"type": "way", "ref": 419296358, "role": ""}, {
"type": "way",
"ref": 601005356,
"role": ""
}, {"type": "way", "ref": 497802656, "role": ""}, {
"type": "way",
"ref": 948484806,
"role": ""
}, {"type": "way", "ref": 756223825, "role": ""}, {
"type": "way",
"ref": 23206884,
"role": ""
}, {"type": "way", "ref": 157436856, "role": ""}, {
"type": "way",
"ref": 829398288,
"role": ""
}, {"type": "way", "ref": 829398289, "role": ""}, {
"type": "way",
"ref": 674490354,
"role": ""
}, {"type": "way", "ref": 131704173, "role": ""}, {
"type": "way",
"ref": 120976014,
"role": ""
}, {"type": "way", "ref": 38864144, "role": ""}, {
"type": "way",
"ref": 38864143,
"role": ""
}, {"type": "way", "ref": 32147475, "role": ""}, {
"type": "way",
"ref": 962256846,
"role": ""
}, {"type": "way", "ref": 32147479, "role": ""}, {
"type": "way",
"ref": 32147481,
"role": ""
}, {"type": "way", "ref": 49486734, "role": ""}, {
"type": "way",
"ref": 829394351,
"role": ""
}, {"type": "way", "ref": 829394349, "role": ""}, {
"type": "way",
"ref": 235193261,
"role": ""
}, {"type": "way", "ref": 130495866, "role": ""}, {
"type": "way",
"ref": 978366962,
"role": ""
}, {"type": "way", "ref": 39588752, "role": ""}, {
"type": "way",
"ref": 436528651,
"role": ""
}, {"type": "way", "ref": 27370335, "role": ""}, {
"type": "way",
"ref": 157558803,
"role": ""
}, {"type": "way", "ref": 39590466, "role": ""}, {
"type": "way",
"ref": 157558804,
"role": ""
}, {"type": "way", "ref": 27370165, "role": ""}, {"type": "way", "ref": 970841665, "role": ""}],
"tags": {
"name": "Euroroute R1 - part Belgium",
"name:de": "Europaradweg R1 - Abschnitt Belgien",
"name:nl": "Euroroute R1 - deel België",
"network": "icn",
"ref": "R1",
"route": "bicycle",
"type": "route"
}
}, {
"type": "relation",
"id": 1757007,
"timestamp": "2020-10-13T01:31:44Z",
"version": 10,
"changeset": 92380204,
"user": "Diabolix",
"uid": 2123963,
"members": [{"type": "way", "ref": 509668834, "role": ""}, {
"type": "way",
"ref": 61435323,
"role": ""
}, {"type": "way", "ref": 61435332, "role": ""}, {
"type": "way",
"ref": 337945886,
"role": ""
}, {"type": "way", "ref": 560506339, "role": ""}, {
"type": "way",
"ref": 23775021,
"role": ""
}, {"type": "way", "ref": 23792223, "role": ""}],
"tags": {
"network": "rcn",
"network:type": "node_network",
"ref": "4-36",
"route": "bicycle",
"type": "route"
}
}, {
"type": "relation",
"id": 5150189,
"timestamp": "2021-09-09T20:15:58Z",
"version": 44,
"changeset": 110993632,
"user": "JosV",
"uid": 170722,
"members": [{"type": "way", "ref": 13943237, "role": ""}, {
"type": "way",
"ref": 488558133,
"role": ""
}, {"type": "way", "ref": 369929894, "role": ""}, {
"type": "way",
"ref": 130473917,
"role": ""
}, {"type": "way", "ref": 509668834, "role": ""}, {
"type": "way",
"ref": 61435323,
"role": ""
}, {"type": "way", "ref": 61435332, "role": ""}, {
"type": "way",
"ref": 337945886,
"role": ""
}, {"type": "way", "ref": 560506339, "role": ""}, {
"type": "way",
"ref": 23775021,
"role": ""
}, {"type": "way", "ref": 23792223, "role": ""}, {
"type": "way",
"ref": 136487196,
"role": ""
}, {"type": "way", "ref": 130473931, "role": ""}, {
"type": "way",
"ref": 34562745,
"role": ""
}, {"type": "way", "ref": 421998791, "role": ""}, {
"type": "way",
"ref": 126996864,
"role": ""
}, {"type": "way", "ref": 126996861, "role": ""}, {
"type": "way",
"ref": 170989337,
"role": ""
}, {"type": "way", "ref": 72482534, "role": ""}, {
"type": "way",
"ref": 58913500,
"role": ""
}, {"type": "way", "ref": 72482539, "role": ""}, {
"type": "way",
"ref": 246969243,
"role": ""
}, {"type": "way", "ref": 153150902, "role": ""}, {
"type": "way",
"ref": 116748588,
"role": ""
}, {"type": "way", "ref": 72482544, "role": ""}, {
"type": "way",
"ref": 72482542,
"role": ""
}, {"type": "way", "ref": 337013552, "role": ""}, {
"type": "way",
"ref": 132790401,
"role": ""
}, {"type": "way", "ref": 105166767, "role": ""}, {
"type": "way",
"ref": 720356345,
"role": ""
}, {"type": "way", "ref": 197829999, "role": ""}, {
"type": "way",
"ref": 105166552,
"role": ""
}, {"type": "way", "ref": 61979075, "role": ""}, {
"type": "way",
"ref": 197830184,
"role": ""
}, {"type": "way", "ref": 61979070, "role": ""}, {
"type": "way",
"ref": 948826013,
"role": ""
}, {"type": "way", "ref": 197830182, "role": ""}, {
"type": "way",
"ref": 672535497,
"role": ""
}, {"type": "way", "ref": 672535498, "role": ""}, {
"type": "way",
"ref": 948826015,
"role": ""
}, {"type": "way", "ref": 11378674, "role": ""}, {
"type": "way",
"ref": 672535496,
"role": ""
}, {"type": "way", "ref": 70023921, "role": ""}, {
"type": "way",
"ref": 948826017,
"role": ""
}, {"type": "way", "ref": 197830260, "role": ""}, {
"type": "way",
"ref": 152210843,
"role": ""
}, {"type": "way", "ref": 33748055, "role": ""}, {
"type": "way",
"ref": 344701437,
"role": ""
}, {"type": "way", "ref": 422150672, "role": ""}, {
"type": "way",
"ref": 156228338,
"role": ""
}, {"type": "way", "ref": 422150674, "role": ""}, {
"type": "way",
"ref": 223674432,
"role": ""
}, {"type": "way", "ref": 223674437, "role": ""}, {
"type": "way",
"ref": 156228327,
"role": ""
}, {"type": "way", "ref": 223674372, "role": ""}, {
"type": "way",
"ref": 592937889,
"role": ""
}, {"type": "way", "ref": 592937890, "role": ""}, {
"type": "way",
"ref": 422099666,
"role": ""
}, {"type": "way", "ref": 422100304, "role": ""}, {
"type": "way",
"ref": 948826022,
"role": ""
}, {"type": "way", "ref": 15092930, "role": ""}, {
"type": "way",
"ref": 948826024,
"role": ""
}, {"type": "way", "ref": 105182226, "role": ""}, {
"type": "way",
"ref": 133606215,
"role": ""
}, {"type": "way", "ref": 533395656, "role": ""}, {
"type": "way",
"ref": 187115987,
"role": ""
}, {"type": "way", "ref": 105182230, "role": ""}, {
"type": "way",
"ref": 105182232,
"role": ""
}, {"type": "way", "ref": 196011634, "role": ""}, {
"type": "way",
"ref": 153273480,
"role": ""
}, {"type": "way", "ref": 153273481, "role": ""}, {
"type": "way",
"ref": 881767783,
"role": ""
}, {"type": "way", "ref": 153273479, "role": ""}, {
"type": "way",
"ref": 13462242,
"role": ""
}, {"type": "way", "ref": 498093425, "role": ""}, {
"type": "way",
"ref": 70009137,
"role": ""
}, {"type": "way", "ref": 12086805, "role": ""}, {
"type": "way",
"ref": 52523332,
"role": ""
}, {"type": "way", "ref": 70009138, "role": ""}, {
"type": "way",
"ref": 592937884,
"role": ""
}, {"type": "way", "ref": 15071942, "role": ""}, {
"type": "way",
"ref": 180798233,
"role": ""
}, {"type": "way", "ref": 70010670, "role": ""}, {
"type": "way",
"ref": 15802818,
"role": ""
}, {"type": "way", "ref": 15802809, "role": ""}, {
"type": "way",
"ref": 70011254,
"role": ""
}, {"type": "way", "ref": 671368756, "role": ""}, {
"type": "way",
"ref": 840241791,
"role": ""
}, {"type": "way", "ref": 369929367, "role": ""}, {
"type": "way",
"ref": 539038988,
"role": ""
}, {"type": "way", "ref": 80130513, "role": ""}, {
"type": "way",
"ref": 540214122,
"role": ""
}, {"type": "way", "ref": 765795083, "role": ""}, {
"type": "way",
"ref": 13943005,
"role": ""
}, {"type": "way", "ref": 72492950, "role": ""}, {
"type": "way",
"ref": 183330864,
"role": ""
}, {"type": "way", "ref": 318631002, "role": ""}, {
"type": "way",
"ref": 4332470,
"role": ""
}, {"type": "way", "ref": 318631014, "role": ""}, {
"type": "way",
"ref": 337969633,
"role": ""
}, {"type": "way", "ref": 668566903, "role": ""}, {
"type": "way",
"ref": 668566904,
"role": ""
}, {"type": "way", "ref": 248228679, "role": ""}, {
"type": "way",
"ref": 419296358,
"role": ""
}, {"type": "way", "ref": 601005356, "role": ""}, {
"type": "way",
"ref": 497802656,
"role": ""
}, {"type": "way", "ref": 948484806, "role": ""}, {
"type": "way",
"ref": 100323579,
"role": ""
}, {"type": "way", "ref": 100708215, "role": ""}, {
"type": "way",
"ref": 124559834,
"role": ""
}, {"type": "way", "ref": 124559835, "role": ""}, {
"type": "way",
"ref": 239484694,
"role": ""
}, {"type": "way", "ref": 972646812, "role": ""}, {
"type": "way",
"ref": 124559832,
"role": ""
}, {"type": "way", "ref": 361686157, "role": ""}, {
"type": "way",
"ref": 361686155,
"role": ""
}, {"type": "way", "ref": 239484693, "role": ""}, {
"type": "way",
"ref": 19861731,
"role": ""
}, {"type": "way", "ref": 967906429, "role": ""}, {
"type": "way",
"ref": 126402539,
"role": ""
}, {"type": "way", "ref": 94427058, "role": ""}, {
"type": "way",
"ref": 126402541,
"role": ""
}, {"type": "way", "ref": 313693839, "role": ""}, {
"type": "way",
"ref": 313693838,
"role": ""
}, {"type": "way", "ref": 970740536, "role": ""}, {
"type": "way",
"ref": 361719175,
"role": ""
}, {"type": "way", "ref": 663186012, "role": ""}, {
"type": "way",
"ref": 744625794,
"role": ""
}, {"type": "way", "ref": 94569877, "role": ""}, {
"type": "way",
"ref": 188973964,
"role": ""
}, {"type": "way", "ref": 948484822, "role": ""}, {
"type": "way",
"ref": 28857260,
"role": ""
}, {"type": "way", "ref": 948484821, "role": ""}, {
"type": "way",
"ref": 219185860,
"role": ""
}, {"type": "way", "ref": 948484818, "role": ""}, {
"type": "way",
"ref": 219185861,
"role": ""
}, {"type": "way", "ref": 229885580, "role": ""}, {
"type": "way",
"ref": 28857247,
"role": ""
}, {"type": "way", "ref": 128813937, "role": ""}, {
"type": "way",
"ref": 32148201,
"role": ""
}, {"type": "way", "ref": 829398290, "role": ""}, {
"type": "way",
"ref": 829398288,
"role": ""
}, {"type": "way", "ref": 157436856, "role": ""}, {
"type": "way",
"ref": 23206887,
"role": ""
}, {"type": "way", "ref": 657081380, "role": ""}, {
"type": "way",
"ref": 948484817,
"role": ""
}, {"type": "way", "ref": 657081379, "role": ""}, {
"type": "way",
"ref": 657083379,
"role": ""
}, {"type": "way", "ref": 657083378, "role": ""}, {
"type": "way",
"ref": 72492956,
"role": ""
}, {"type": "way", "ref": 183763716, "role": ""}, {
"type": "way",
"ref": 497802654,
"role": ""
}, {"type": "way", "ref": 497802655, "role": ""}, {
"type": "way",
"ref": 348402994,
"role": ""
}, {"type": "way", "ref": 497802653, "role": ""}, {
"type": "way",
"ref": 948484813,
"role": ""
}, {"type": "way", "ref": 272353449, "role": "forward"}, {
"type": "way",
"ref": 497802652,
"role": "forward"
}, {"type": "way", "ref": 948484811, "role": ""}, {
"type": "way",
"ref": 948484810,
"role": ""
}, {"type": "way", "ref": 136564089, "role": ""}, {
"type": "way",
"ref": 970740538,
"role": ""
}, {"type": "way", "ref": 970740539, "role": ""}, {
"type": "way",
"ref": 433455263,
"role": ""
}, {"type": "way", "ref": 23206893, "role": ""}, {
"type": "way",
"ref": 95506626,
"role": ""
}, {"type": "way", "ref": 61435340, "role": ""}, {
"type": "way",
"ref": 180915274,
"role": ""
}, {"type": "way", "ref": 182691326, "role": ""}, {
"type": "way",
"ref": 95106180,
"role": ""
}, {"type": "way", "ref": 61435342, "role": ""}, {
"type": "way",
"ref": 72492953,
"role": ""
}, {"type": "way", "ref": 827705395, "role": ""}, {
"type": "way",
"ref": 13942938,
"role": ""
}, {"type": "way", "ref": 540048295, "role": ""}, {
"type": "way",
"ref": 249092420,
"role": ""
}, {"type": "way", "ref": 32699077, "role": ""}, {
"type": "way",
"ref": 688103600,
"role": ""
}, {"type": "way", "ref": 654338684, "role": "forward"}, {
"type": "way",
"ref": 11018710,
"role": "forward"
}, {"type": "way", "ref": 510825612, "role": "forward"}, {
"type": "way",
"ref": 70011248,
"role": "forward"
}, {"type": "way", "ref": 654338685, "role": "forward"}, {
"type": "way",
"ref": 14626290,
"role": ""
}, {"type": "way", "ref": 70011250, "role": ""}, {
"type": "way",
"ref": 12295471,
"role": ""
}, {"type": "way", "ref": 397097504, "role": ""}, {
"type": "way",
"ref": 12295484,
"role": ""
}, {"type": "way", "ref": 41990436, "role": ""}, {
"type": "way",
"ref": 70011252,
"role": ""
}, {"type": "way", "ref": 61503690, "role": ""}, {
"type": "way",
"ref": 182978284,
"role": ""
}, {"type": "way", "ref": 790820260, "role": "forward"}, {
"type": "way",
"ref": 592937894,
"role": "forward"
}, {"type": "way", "ref": 926028042, "role": "forward"}, {
"type": "way",
"ref": 592937902,
"role": "forward"
}, {"type": "way", "ref": 592937901, "role": "forward"}, {
"type": "way",
"ref": 182978255,
"role": "forward"
}, {"type": "way", "ref": 592937903, "role": "forward"}, {
"type": "way",
"ref": 12123659,
"role": "forward"
}, {"type": "way", "ref": 666877213, "role": "forward"}, {
"type": "way",
"ref": 790820259,
"role": "forward"
}, {"type": "way", "ref": 510825618, "role": ""}, {
"type": "way",
"ref": 13496412,
"role": ""
}, {"type": "way", "ref": 654338689, "role": ""}, {
"type": "way",
"ref": 740935312,
"role": ""
}, {"type": "way", "ref": 52288671, "role": ""}, {
"type": "way",
"ref": 52288667,
"role": ""
}, {"type": "way", "ref": 12123458, "role": ""}, {
"type": "way",
"ref": 508681905,
"role": ""
}, {"type": "way", "ref": 15071314, "role": ""}, {
"type": "way",
"ref": 61503700,
"role": ""
}, {"type": "way", "ref": 41989874, "role": ""}, {
"type": "way",
"ref": 328002077,
"role": ""
}, {"type": "way", "ref": 396377151, "role": ""}, {
"type": "way",
"ref": 396377150,
"role": ""
}, {"type": "way", "ref": 396377125, "role": ""}, {
"type": "way",
"ref": 328985990,
"role": ""
}, {"type": "way", "ref": 328985992, "role": ""}, {
"type": "way",
"ref": 328985993,
"role": ""
}, {"type": "way", "ref": 328985991, "role": ""}, {
"type": "way",
"ref": 632506298,
"role": ""
}, {"type": "way", "ref": 101191104, "role": ""}, {
"type": "way",
"ref": 499129522,
"role": ""
}, {"type": "way", "ref": 15071174, "role": ""}, {
"type": "way",
"ref": 297023609,
"role": ""
}, {"type": "way", "ref": 297023610, "role": ""}, {
"type": "way",
"ref": 297023608,
"role": ""
}, {"type": "way", "ref": 112695115, "role": ""}, {
"type": "way",
"ref": 584024902,
"role": ""
}, {"type": "way", "ref": 243543197, "role": ""}, {
"type": "way",
"ref": 101191119,
"role": "forward"
}, {"type": "way", "ref": 173530022, "role": "forward"}, {
"type": "way",
"ref": 265137637,
"role": "forward"
}, {"type": "way", "ref": 160627684, "role": "forward"}, {
"type": "way",
"ref": 657163351,
"role": "forward"
}, {"type": "way", "ref": 160627682, "role": "forward"}, {
"type": "way",
"ref": 160632906,
"role": "forward"
}, {"type": "way", "ref": 176870850, "role": "forward"}, {
"type": "way",
"ref": 173662701,
"role": "forward"
}, {"type": "way", "ref": 173662702, "role": ""}, {
"type": "way",
"ref": 467606230,
"role": ""
}, {"type": "way", "ref": 126267167, "role": ""}, {
"type": "way",
"ref": 301897426,
"role": ""
}, {"type": "way", "ref": 687866206, "role": ""}, {
"type": "way",
"ref": 295132739,
"role": ""
}, {"type": "way", "ref": 690497698, "role": ""}, {
"type": "way",
"ref": 627893684,
"role": ""
}, {"type": "way", "ref": 295132741, "role": ""}, {
"type": "way",
"ref": 301903120,
"role": ""
}, {"type": "way", "ref": 672541156, "role": ""}, {
"type": "way",
"ref": 126264330,
"role": ""
}, {"type": "way", "ref": 280440853, "role": ""}, {
"type": "way",
"ref": 838499667,
"role": ""
}, {"type": "way", "ref": 838499663, "role": ""}, {
"type": "way",
"ref": 690497623,
"role": ""
}, {"type": "way", "ref": 301902946, "role": ""}, {
"type": "way",
"ref": 280460715,
"role": ""
}, {"type": "way", "ref": 972534369, "role": ""}, {
"type": "way",
"ref": 588764361,
"role": ""
}, {"type": "way", "ref": 981365419, "role": ""}, {
"type": "way",
"ref": 188979882,
"role": ""
}, {"type": "way", "ref": 578030518, "role": ""}, {
"type": "way",
"ref": 124559857,
"role": ""
}, {"type": "way", "ref": 284568605, "role": ""}, {
"type": "way",
"ref": 126405025,
"role": ""
}, {"type": "way", "ref": 188978777, "role": ""}, {
"type": "way",
"ref": 272353445,
"role": "forward"
}, {"type": "way", "ref": 221443952, "role": "forward"}, {
"type": "way",
"ref": 172708119,
"role": "forward"
}, {"type": "way", "ref": 173061662, "role": "forward"}, {
"type": "way",
"ref": 441663456,
"role": "forward"
}, {"type": "way", "ref": 160627680, "role": "forward"}, {
"type": "way",
"ref": 176870852,
"role": "forward"
}, {"type": "way", "ref": 39588762, "role": "forward"}, {
"type": "way",
"ref": 172709466,
"role": "forward"
}, {"type": "way", "ref": 598459103, "role": "forward"}, {
"type": "way",
"ref": 688054392,
"role": "forward"
}, {"type": "way", "ref": 155986859, "role": "forward"}],
"tags": {
"name": "Groene Gordel Brugge",
"network": "lcn",
"ref": "GGB",
"route": "bicycle",
"type": "route"
}
}, {
"type": "relation",
"id": 8369765,
"timestamp": "2021-08-23T14:22:45Z",
"version": 19,
"changeset": 110120188,
"user": "Pieter Vander Vennet",
"uid": 3818858,
"members": [{"type": "way", "ref": 539038988, "role": ""}, {
"type": "way",
"ref": 369929367,
"role": ""
}, {"type": "way", "ref": 840241791, "role": ""}, {
"type": "way",
"ref": 488558133,
"role": ""
}, {"type": "way", "ref": 369929894, "role": ""}, {
"type": "way",
"ref": 130473917,
"role": ""
}, {"type": "way", "ref": 509668834, "role": ""}, {
"type": "way",
"ref": 61435323,
"role": ""
}, {"type": "way", "ref": 61435332, "role": ""}, {
"type": "way",
"ref": 337945886,
"role": ""
}, {"type": "way", "ref": 560506339, "role": ""}, {
"type": "way",
"ref": 23775021,
"role": ""
}, {"type": "way", "ref": 23792223, "role": ""}, {
"type": "way",
"ref": 136487196,
"role": ""
}, {"type": "way", "ref": 130473931, "role": ""}, {
"type": "way",
"ref": 34562745,
"role": ""
}, {"type": "way", "ref": 421998791, "role": ""}, {
"type": "way",
"ref": 176380250,
"role": ""
}, {"type": "way", "ref": 116717052, "role": ""}, {
"type": "way",
"ref": 176380249,
"role": ""
}, {"type": "way", "ref": 116717060, "role": ""}, {
"type": "way",
"ref": 27288122,
"role": ""
}, {"type": "way", "ref": 32789519, "role": ""}, {
"type": "way",
"ref": 12126873,
"role": ""
}, {"type": "way", "ref": 689493508, "role": ""}, {
"type": "way",
"ref": 131476435,
"role": ""
}, {"type": "way", "ref": 689494106, "role": ""}, {
"type": "way",
"ref": 165500495,
"role": ""
}, {"type": "way", "ref": 807329786, "role": ""}, {
"type": "way",
"ref": 51570941,
"role": ""
}, {"type": "way", "ref": 422309497, "role": ""}, {
"type": "way",
"ref": 240869981,
"role": ""
}, {"type": "way", "ref": 240869873, "role": ""}, {
"type": "way",
"ref": 240869980,
"role": ""
}, {"type": "way", "ref": 165503767, "role": ""}, {
"type": "way",
"ref": 165503764,
"role": ""
}, {"type": "way", "ref": 421566315, "role": ""}, {
"type": "way",
"ref": 165503768,
"role": ""
}, {"type": "way", "ref": 245236630, "role": ""}, {
"type": "way",
"ref": 658500046,
"role": "forward"
}, {"type": "way", "ref": 646903393, "role": "forward"}, {
"type": "way",
"ref": 245236632,
"role": "forward"
}, {"type": "way", "ref": 245236633, "role": "forward"}, {
"type": "way",
"ref": 90485426,
"role": ""
}, {"type": "way", "ref": 596073878, "role": ""}, {
"type": "way",
"ref": 10898401,
"role": "backward"
}, {"type": "way", "ref": 658500044, "role": "forward"}, {
"type": "way",
"ref": 474253371,
"role": "forward"
}, {"type": "way", "ref": 474253369, "role": "forward"}, {
"type": "way",
"ref": 474253376,
"role": "forward"
}, {"type": "way", "ref": 165845350, "role": "backward"}, {
"type": "way",
"ref": 130697218,
"role": ""
}, {"type": "way", "ref": 61565721, "role": ""}, {
"type": "way",
"ref": 497202210,
"role": ""
}, {"type": "way", "ref": 130697226, "role": ""}, {
"type": "way",
"ref": 227617858,
"role": ""
}, {"type": "way", "ref": 227617857, "role": ""}, {
"type": "way",
"ref": 681804956,
"role": ""
}, {"type": "way", "ref": 165881675, "role": ""}, {
"type": "way",
"ref": 806146504,
"role": ""
}, {"type": "way", "ref": 806146505, "role": ""}, {"type": "way", "ref": 659762284, "role": ""}],
"tags": {
"alt_name": "Fietssnelweg F30 Brugge - Oostende",
"bicycle:type": "utility",
"cycle_highway": "yes",
"cycle_network": "BE-VLG:cycle_highway",
"name": "F30 Fietssnelweg Brugge - Oostende",
"network": "ncn",
"operator": "Provincie West-Vlaanderen",
"ref": "F30",
"route": "bicycle",
"state": "proposed",
"type": "route",
"website": "https://fietssnelwegen.be/f30",
"wikidata": "Q107485732"
}
}, {
"type": "relation",
"id": 13060733,
"timestamp": "2021-09-19T18:08:57Z",
"version": 5,
"changeset": 111419581,
"user": "L'imaginaire",
"uid": 654234,
"members": [{"type": "way", "ref": 23792223, "role": ""}, {
"type": "way",
"ref": 23775021,
"role": ""
}, {"type": "way", "ref": 560506339, "role": ""}, {
"type": "way",
"ref": 337945886,
"role": ""
}, {"type": "way", "ref": 61435332, "role": ""}, {
"type": "way",
"ref": 61435323,
"role": ""
}, {"type": "way", "ref": 509668834, "role": ""}, {
"type": "way",
"ref": 839596136,
"role": ""
}, {"type": "way", "ref": 840488274, "role": ""}, {
"type": "way",
"ref": 839596137,
"role": ""
}, {"type": "way", "ref": 146172188, "role": ""}, {
"type": "way",
"ref": 749212030,
"role": ""
}, {"type": "way", "ref": 799479035, "role": ""}, {
"type": "way",
"ref": 130473928,
"role": ""
}, {"type": "way", "ref": 61414103, "role": ""}, {
"type": "way",
"ref": 539672618,
"role": ""
}, {"type": "way", "ref": 799479034, "role": ""}, {
"type": "way",
"ref": 539672617,
"role": ""
}, {"type": "way", "ref": 539672616, "role": ""}, {
"type": "way",
"ref": 539671786,
"role": ""
}, {"type": "way", "ref": 172317285, "role": ""}, {
"type": "way",
"ref": 35328157,
"role": ""
}, {"type": "way", "ref": 249119335, "role": ""}, {
"type": "way",
"ref": 584214875,
"role": ""
}, {"type": "way", "ref": 584217798, "role": ""}, {
"type": "way",
"ref": 676801473,
"role": ""
}, {"type": "way", "ref": 456588356, "role": ""}, {
"type": "way",
"ref": 456589109,
"role": ""
}, {"type": "way", "ref": 456588496, "role": ""}, {
"type": "way",
"ref": 487199906,
"role": ""
}, {"type": "way", "ref": 299450868, "role": ""}, {
"type": "way",
"ref": 165548222,
"role": ""
}, {"type": "way", "ref": 4329135, "role": ""}, {
"type": "way",
"ref": 4329771,
"role": ""
}, {"type": "way", "ref": 155149803, "role": ""}, {
"type": "way",
"ref": 305625031,
"role": ""
}, {"type": "way", "ref": 100842624, "role": ""}, {
"type": "way",
"ref": 18102445,
"role": ""
}, {"type": "way", "ref": 541116658, "role": ""}, {
"type": "way",
"ref": 591094005,
"role": ""
}, {"type": "way", "ref": 591094004, "role": ""}, {
"type": "way",
"ref": 184684947,
"role": ""
}, {"type": "way", "ref": 34945088, "role": ""}, {
"type": "way",
"ref": 235195315,
"role": ""
}, {"type": "way", "ref": 497849660, "role": ""}],
"tags": {
"colour": "#e40613",
"cycle_network": "BE-VLG:icoonroutes",
"description": "segment 2 van de Kunststedenroute",
"fixme": "incomplete",
"from": "Oostende",
"name": "Kunststedenroute - 02 - Oostende - Brugge",
"network": "ncn",
"operator": "Toerisme Vlaanderen",
"ref": "Kunst",
"route": "bicycle",
"to": "Brugge",
"type": "route",
"website": "https://www.vlaanderenmetdefiets.be/routes/kunststeden.html",
"wikidata": "Q106529274",
"wikipedia": "nl:LF Kunststedenroute"
}
}]
}
)
Utils.injectJsonDownloadForTests(
"https://www.openstreetmap.org/api/0.6/way/61435332/full",
{
"version": "0.6",
"generator": "CGImap 0.8.5 (3819319 spike-06.openstreetmap.org)",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"elements": [{
"type": "node",
"id": 766990985,
"lat": 51.2169574,
"lon": 3.2017548,
"timestamp": "2016-07-05T22:41:12Z",
"version": 6,
"changeset": 40511250,
"user": "M!dgard",
"uid": 763799
}, {
"type": "node",
"id": 3450208876,
"lat": 51.2169482,
"lon": 3.2016802,
"timestamp": "2016-07-05T22:41:11Z",
"version": 2,
"changeset": 40511250,
"user": "M!dgard",
"uid": 763799
}, {
"type": "way",
"id": 61435332,
"timestamp": "2021-08-21T12:24:13Z",
"version": 8,
"changeset": 110026637,
"user": "Thibault Rommel",
"uid": 5846458,
"nodes": [766990985, 3450208876],
"tags": {
"bicycle": "yes",
"cycleway": "shared_lane",
"highway": "unclassified",
"maxspeed": "50",
"name": "Houtkaai",
"surface": "asphalt",
"zone:traffic": "BE-VLG:urban"
}
}]
}
)
Utils.injectJsonDownloadForTests(
"https://www.openstreetmap.org/api/0.6/way/509668834/full",
{
"version": "0.6",
"generator": "CGImap 0.8.5 (3735280 spike-06.openstreetmap.org)",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"elements": [{
"type": "node",
"id": 131917824,
"lat": 51.2170327,
"lon": 3.2023577,
"timestamp": "2019-09-16T09:48:28Z",
"version": 17,
"changeset": 74521581,
"user": "Peter Elderson",
"uid": 7103674,
"tags": {"network:type": "node_network", "rcn_ref": "4", "rcn_region": "Brugse Ommeland"}
}, {
"type": "node",
"id": 766990983,
"lat": 51.2170219,
"lon": 3.2022337,
"timestamp": "2021-04-26T15:48:22Z",
"version": 6,
"changeset": 103647857,
"user": "M!dgard",
"uid": 763799
}, {
"type": "way",
"id": 509668834,
"timestamp": "2021-08-21T12:24:13Z",
"version": 5,
"changeset": 110026637,
"user": "Thibault Rommel",
"uid": 5846458,
"nodes": [131917824, 766990983],
"tags": {
"bicycle": "yes",
"cycleway": "shared_lane",
"highway": "residential",
"lit": "yes",
"maxspeed": "30",
"name": "Houtkaai",
"sidewalk": "both",
"surface": "paving_stones",
"zone:maxspeed": "BE:30",
"zone:traffic": "BE-VLG:urban"
}
}]
}
)
const id = "way/61435323"
const splitPoint: [number, number] = [3.2021324336528774, 51.2170001600597]
const splitter = new SplitAction(id, [splitPoint], {
theme: "test"
})
const changeDescription = await splitter.CreateChangeDescriptions(new Changes())
// Should be a new node
equal(changeDescription[0].type, "node")
equal(changeDescription[3].type, "relation")
}
private static async splitWithPointReuse(): Promise<void> {
// Lets split road near an already existing point https://www.openstreetmap.org/way/295132739
const id = "way/295132739"
const splitPoint: [number, number] = [3.2451081275939937, 51.18116898253599]
const splitter = new SplitAction(id, [splitPoint], {
theme: "test"
})
const changeDescription = await splitter.CreateChangeDescriptions(new Changes())
equal(2, changeDescription.length)
const ch0 = changeDescription[0]
const ch1 = changeDescription[1]
const nodes0: number[] = ch0.changes["nodes"]
const nodes1: number[] = ch1.changes["nodes"]
equal(ch0.type, "way")
equal(ch1.type, "way")
equal(nodes0[nodes0.length - 1], nodes1[0])
equal(1507524610, nodes1[0])
}
constructor() {
super("splitaction", [
["split 295132739",
() => SplitActionSpec.split().then(_ => console.log("OK"))],
["split 295132739 on already existing node",
() => SplitActionSpec.splitWithPointReuse().then(_ => console.log("OK"))],
["split 61435323 on already existing node",
() => SplitActionSpec.SplitHoutkaai().then(_ => console.log("OK"))],
["Split test line",
async () => {
Utils.injectJsonDownloadForTests(
"https://www.openstreetmap.org/api/0.6/way/941079939/full",
{
"version": "0.6",
"generator": "CGImap 0.8.5 (957273 spike-08.openstreetmap.org)",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"elements": [{
"type": "node",
"id": 6490126559,
"lat": 51.2332219,
"lon": 3.1429387,
"timestamp": "2021-05-09T19:04:53Z",
"version": 2,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"highway": "street_lamp", "power": "pole", "support": "pole"}
}, {
"type": "node",
"id": 8715440363,
"lat": 51.2324011,
"lon": 3.1367377,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"fixme": "continue"}
}, {
"type": "node",
"id": 8715440364,
"lat": 51.232455,
"lon": 3.1368759,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "node",
"id": 8715440365,
"lat": 51.2325883,
"lon": 3.1373986,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "node",
"id": 8715440366,
"lat": 51.232688,
"lon": 3.1379837,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "node",
"id": 8715440367,
"lat": 51.2327354,
"lon": 3.1385649,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "node",
"id": 8715440368,
"lat": 51.2327042,
"lon": 3.1392187,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"highway": "street_lamp", "power": "pole", "support": "pole"}
}, {
"type": "node",
"id": 8715440369,
"lat": 51.2323902,
"lon": 3.139353,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "node",
"id": 8715440370,
"lat": 51.2321027,
"lon": 3.139601,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"highway": "street_lamp", "power": "pole", "ref": "242", "support": "pole"}
}, {
"type": "node",
"id": 8715440371,
"lat": 51.2322614,
"lon": 3.1401564,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "node",
"id": 8715440372,
"lat": 51.232378,
"lon": 3.1407909,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "node",
"id": 8715440373,
"lat": 51.2325532,
"lon": 3.1413659,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "node",
"id": 8715440374,
"lat": 51.2327611,
"lon": 3.1418877,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "node",
"id": 8715440375,
"lat": 51.2330037,
"lon": 3.142418,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"tags": {"power": "pole"}
}, {
"type": "way",
"id": 941079939,
"timestamp": "2021-05-09T19:04:53Z",
"version": 1,
"changeset": 104407928,
"user": "M!dgard",
"uid": 763799,
"nodes": [6490126559, 8715440375, 8715440374, 8715440373, 8715440372, 8715440371, 8715440370, 8715440369, 8715440368, 8715440367, 8715440366, 8715440365, 8715440364, 8715440363],
"tags": {"power": "minor_line"}
}]
}
)
Utils.injectJsonDownloadForTests(
"https://www.openstreetmap.org/api/0.6/way/941079939/relations",
{
"version": "0.6",
"generator": "CGImap 0.8.5 (2419440 spike-07.openstreetmap.org)",
"copyright": "OpenStreetMap and contributors",
"attribution": "http://www.openstreetmap.org/copyright",
"license": "http://opendatacommons.org/licenses/odbl/1-0/",
"elements": []
}
)
// Split points are lon,lat
const splitPointAroundP3: [number, number] = [3.1392198801040645, 51.232701022376745]
const splitAction = new SplitAction("way/941079939", [splitPointAroundP3], {theme: "test"})
const changes = await splitAction.Perform(new Changes())
console.log(changes)
// 8715440368 is the expected point of the split
/* Nodes are
6490126559 (part of ways 941079941 and 941079940)
8715440375
8715440374
8715440373
8715440372
8715440371
8715440370
8715440369
8715440368 <--- split here
8715440367
8715440366
8715440365
8715440364
8715440363
*/
const nodeList0 = [6490126559,
8715440375,
8715440374,
8715440373,
8715440372,
8715440371,
8715440370,
8715440369,
8715440368]
const nodeList1 = [
8715440368,
8715440367,
8715440366,
8715440365,
8715440364,
8715440363
]
T.listIdentical(nodeList0, changes[0].changes["nodes"])
T.listIdentical(nodeList1, changes[1].changes["nodes"])
}
],
["Split minor powerline halfway", async () => {
const splitPointHalfway: [number, number] = [3.1392842531204224, 51.23255322710106]
const splitAction = new SplitAction("way/941079939", [splitPointHalfway], {theme: "test"}, 1)
const changes = await splitAction.Perform(new Changes())
const nodeList0 = [6490126559,
8715440375,
8715440374,
8715440373,
8715440372,
8715440371,
8715440370,
8715440369,
-1]
const nodeList1 = [
-1,
8715440368,
8715440367,
8715440366,
8715440365,
8715440364,
8715440363
]
// THe first change is the creation of the new node
T.equals("node", changes[0].type)
T.equals(-1, changes[0].id)
T.listIdentical(nodeList0, changes[1].changes["nodes"])
T.listIdentical(nodeList1, changes[2].changes["nodes"])
}
]
]);
}
}