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 { 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"]) } ] ]); } private static async split(): Promise { 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 { 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 { // 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]) } }