diff --git a/src/tam/network.js b/src/tam/network.js index d1b8327..07e83be 100644 --- a/src/tam/network.js +++ b/src/tam/network.js @@ -17,111 +17,6 @@ const util = require('../util'); const osm = require('./sources/osm'); const tam = require('./sources/tam'); -/** - * Use theoretical passings data to guess which lines use which stops in which - * direction. - * - * This is used for suggesting possible stop IDs for stops that don’t have - * one in OSM. - * - * @return Map containing for each stop its abbreviated name, the lines that - * use it and in which directions it is used. - */ -const fetchStopsRefAssociations = () => new Promise((res, rej) => -{ - const stops = {}; - - tam.fetchTheoretical((err, row) => - { - if (err) - { - rej(err); - return; - } - - if (!row) - { - res(stops); - return; - } - - let line = row.routeShortName; - - if (line === '4') - { - line += row.directionId === '0' ? 'A' : 'B'; - } - - if (!(row.stopId in stops)) - { - stops[row.stopId] = { - name: row.stopName, - lines: new Set([line]), - directions: new Set([row.tripHeadsign]), - }; - } - else - { - const stop = stops[row.stopId]; - - if (stop.name !== row.stopName) - { - console.warn(`Stop ${row.stopId} has multiple names: \ -“${row.stopName}” and “${stop.name}”. Only the first one will be considered.`); - } - - stop.lines.add(line); - stop.directions.add(row.tripHeadsign); - } - }); -}); - -// Mapping for abbreviations used in stop names -const stopAbbreviations = { - st: 'saint', -}; - -/** - * Convert a stop name to a canonical representation suitable for - * comparing two names. - * - * @param stopName Original stop name. - * @return List of normalized tokens in the name. - */ -const canonicalizeStopName = stopName => stopName - .toLowerCase() - - // Remove diacritics - .normalize('NFD').replace(/[\u0300-\u036f]/g, '') - - // Only keep alpha-numeric characters - .replace(/[^a-z0-9]/g, ' ') - - // Split in tokens longer than two characters - .split(/\s+/g).filter(part => part.length >= 2) - - // Resolve well-known abbreviations - .map(part => part in stopAbbreviations ? stopAbbreviations[part] : part); - -/** - * Compute a matching score between two stop names. - * - * @param fullName Stop name in full. - * @param abbrName Abbreviated stop name. - * @return Matching score (number of common tokens). - */ -const matchStopNames = (fullName, abbrName) => -{ - const canonicalFullName = canonicalizeStopName(fullName); - const canonicalAbbrName = canonicalizeStopName(abbrName); - - return canonicalFullName.filter(part => - canonicalAbbrName.findIndex(abbrPart => - part.startsWith(abbrPart) - ) !== -1 - ).length; -}; - /** * Fetch stops and lines of the network. * @@ -142,9 +37,6 @@ relation[network="TaM"][type="route_master"][ref~"^(${lineRefs.join('|')})$"]; out body qt; `); - // Retrieve stop associations from TaM - const associations = await fetchStopsRefAssociations(); - // List of retrieved objects const elementsList = rawData.elements; @@ -173,11 +65,15 @@ out body qt; const color = routeMaster.tags.colour || '#000000'; // Extract all routes for the given line - const rawRoutes = routeMaster.members.map(({ref}) => elements[ref]); + const routes = []; - // Add missing stops to the result object - for (let route of rawRoutes) + for (let [routeRef, {ref: routeId}] of routeMaster.members.entries()) { + const route = elements[routeId]; + const {from, to, name} = route.tags; + const state = route.tags.state || 'normal'; + + // Add missing stops to the global stops object for (let {ref, role} of route.members) { if (role === 'stop') @@ -186,69 +82,9 @@ out body qt; if (!('ref' in stop.tags)) { - console.warn(`Stop ${stop.id} is missing a “ref” tag -Name: ${stop.tags.name} -Part of line: ${route.tags.name} -URI: ${osm.viewNode(stop.id)} -`); - - // Try to identify stops matching this stop in the - // TaM-provided data, using the stop name, line number - // and trip direction - const candidates = Object.entries(associations).filter( - ([, {lines}]) => lines.has(route.tags.ref) - ).map(([stopRef, {name, lines, directions}]) => ({ - stopRef, - lines, - - name, - nameScore: matchStopNames(stop.tags.name, name), - - directions, - directionScore: Math.max( - ...Array.from(directions).map(direction => - matchStopNames(route.tags.to, direction) - ) - ), - })) - // Only keep non-zero scores for both criteria - .filter(({nameScore, directionScore}) => - nameScore && directionScore - ) - // Sort by best name score then best direction - .sort(({ - nameScore: nameScore1, - directionScore: directionScore1, - }, { - nameScore: nameScore2, - directionScore: directionScore2, - }) => - (nameScore2 - nameScore1) - || (directionScore2 - directionScore1) - ) - .slice(0, 4); - - if (candidates.length === 0) - { - console.warn('No candidate found in TaM data.'); - } - else - { - console.warn('Candidates:'); - - for (let candidate of candidates) - { - console.warn(`\ - — Stop ${candidate.stopRef} with name “${candidate.name}” used by \ -${util.choosePlural(candidate.lines.length, 'line', '.s')} \ -${util.joinSentence(Array.from(candidate.lines), ', ', ' and ')} going to \ -${util.joinSentence(Array.from(candidate.directions), ', ', ' or ')} - Apply in JOSM: ${osm.addTagsToNode(stop.id, ['ref=' + candidate.stopRef])} -`); - } - } - - console.warn(''); + throw new Error(`Stop ${stop.id} +(${osm.viewNode(stop.id)}) on line ${route.tags.name} is missing +a “ref” tag`); } if (!(stop.tags.ref in stops)) @@ -257,24 +93,15 @@ ${util.joinSentence(Array.from(candidate.directions), ', ', ' or ')} lat: stop.lat, lon: stop.lon, name: stop.tags.name, - lines: new Set([lineRef]), + routes: [[lineRef, routeRef]], }; } else { - stops[stop.tags.ref].lines.add(lineRef); + stops[stop.tags.ref].routes.push([lineRef, routeRef]); } } } - } - - // Reconstruct the line’s route from stop to stop - const routes = []; - - for (let route of rawRoutes) - { - const {from, to, name} = route.tags; - const state = route.tags.state || 'normal'; // Check that the route consists of a block of stops and platforms // followed by a block of routes as dictated by PTv2 @@ -301,7 +128,7 @@ of ${name}`); // List of stops in the route, expected to be in the timetable // order as per PTv2 and to be traversed in order by the sequence // of ways extracted below - const stops = route.members.slice(0, relationPivot) + const lineStops = route.members.slice(0, relationPivot) .filter(({role}) => role === 'stop') .map(({ref}) => ref); @@ -312,7 +139,7 @@ of ${name}`); // Merge all used ways in a single path let path = []; - let currentNode = stops[0]; + let currentNode = lineStops[0]; for (let wayIndex = 0; wayIndex < ways.length; wayIndex += 1) { @@ -373,15 +200,15 @@ ${name} is one-way and cannot be used in reverse.`); } // Split the path into segments between stops - for (let stopIndex = 0; stopIndex + 1 < stops.length; ++stopIndex) + for (let stopIdx = 0; stopIdx + 1 < lineStops.length; ++stopIdx) { - const begin = elements[stops[stopIndex]].tags.ref; - const end = elements[stops[stopIndex + 1]].tags.ref; + const begin = elements[lineStops[stopIdx]].tags.ref; + const end = elements[lineStops[stopIdx + 1]].tags.ref; const id = `${begin}-${end}`; const nodes = path.slice( - path.indexOf(stops[stopIndex]), - path.indexOf(stops[stopIndex + 1]) + 1, + path.indexOf(lineStops[stopIdx]), + path.indexOf(lineStops[stopIdx + 1]) + 1, ); if (id in segments) @@ -392,7 +219,7 @@ ${name} is one-way and cannot be used in reverse.`); different sequence of nodes in two or more lines.`); } - segments[id].lines.add(lineRef); + segments[id].routes.push([lineRef, routeRef]); } else { @@ -419,8 +246,9 @@ different sequence of nodes in two or more lines.`); // Keep track of the original sequence of nodes to // compare with duplicates nodes, + points, - lines: new Set([lineRef]), + routes: [[lineRef, routeRef]], }; } } @@ -428,7 +256,7 @@ different sequence of nodes in two or more lines.`); routes.push({ from, to, name, state, - stops: stops.map(id => elements[id].tags.ref), + stops: lineStops.map(id => elements[id].tags.ref), }); } diff --git a/src/tam/network.json b/src/tam/network.json index 5ae90a5..043e5b8 100644 --- a/src/tam/network.json +++ b/src/tam/network.json @@ -4,1512 +4,2648 @@ "lat": 43.6162888, "lon": 3.8198414, "name": "Mosson", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41103": { "lat": 43.627657, "lon": 3.817535, "name": "Halles de la Paillade", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41105": { "lat": 43.6306579, "lon": 3.8212168, "name": "Saint-Paul", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41107": { "lat": 43.6364094, "lon": 3.822705, "name": "Hauts de Massane", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41109": { "lat": 43.6390018, "lon": 3.8277875, "name": "Euromédecine", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41111": { "lat": 43.6345296, "lon": 3.833307, "name": "Malbosc", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41113": { "lat": 43.6316307, "lon": 3.8430936, "name": "Château d'Ô", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41115": { "lat": 43.634628, "lon": 3.8484797, "name": "Occitanie", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41117": { "lat": 43.6316751, "lon": 3.8525608, "name": "Hôpital Lapeyronie", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41119": { "lat": 43.6291563, "lon": 3.8616709, "name": "Universités des Sciences et Lettres", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41121": { "lat": 43.6269267, "lon": 3.8658015, "name": "Saint-Éloi", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41123": { "lat": 43.6224984, "lon": 3.8681444, "name": "Boutonnet", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41125": { "lat": 43.6189067, "lon": 3.8694871, "name": "Stade Philippidès", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41127": { "lat": 43.6164766, "lon": 3.8741187, "name": "Place Albert 1er - Saint-Charles", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41129": { "lat": 43.6147274, "lon": 3.8782032, "name": "Louis Blanc", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "1", + 2 + ] ] }, "41131": { "lat": 43.6143022, "lon": 3.8820808, "name": "Corum", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "1", + 2 + ] ] }, "41133": { "lat": 43.6084079, "lon": 3.8797702, "name": "Comédie", - "lines": [ - "2", - "1" + "routes": [ + [ + "2", + 1 + ], + [ + "1", + 2 + ] ] }, "41135": { "lat": 43.6056584, "lon": 3.8801992, "name": "Gare Saint-Roch", - "lines": [ - "2", - "1" + "routes": [ + [ + "2", + 1 + ], + [ + "1", + 2 + ] ] }, "41138": { "lat": 43.6071804, "lon": 3.8833017, "name": "Du Guesclin", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 1 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41139": { "lat": 43.6086092, "lon": 3.8866898, "name": "Antigone", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 1 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41141": { "lat": 43.6088993, "lon": 3.8902941, "name": "Léon Blum", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 1 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41143": { "lat": 43.6072981, "lon": 3.8939097, "name": "Place de l'Europe", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41145": { "lat": 43.6041858, "lon": 3.8948873, "name": "Rives du Lez", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41147": { "lat": 43.6005714, "lon": 3.8955449, "name": "Moularès (Hôtel de Ville)", - "lines": [ - "3", - "1" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41149": { "lat": 43.6016996, "lon": 3.8999684, "name": "Port Marianne", - "lines": [ - "3", - "1" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41151": { "lat": 43.6027649, "lon": 3.9041182, "name": "Mondial 98", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41153": { "lat": 43.6033557, "lon": 3.9100221, "name": "Millénaire", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41155": { "lat": 43.6038356, "lon": 3.9203673, "name": "Odysseum", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41161": { "lat": 43.6037388, "lon": 3.9157934, "name": "Place de France", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41163": { "lat": 43.6213447, "lon": 3.8174028, "name": "Stade de la Mosson", - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41201": { "lat": 43.603795, "lon": 3.9204329, "name": "Odysseum", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41203": { "lat": 43.6033754, "lon": 3.90986, "name": "Millénaire", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41205": { "lat": 43.6027593, "lon": 3.903967, "name": "Mondial 98", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41207": { "lat": 43.601486, "lon": 3.899234, "name": "Port Marianne", - "lines": [ - "3", - "1" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41209": { "lat": 43.6006479, "lon": 3.8955356, "name": "Moularès (Hôtel de Ville)", - "lines": [ - "3", - "1" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41211": { "lat": 43.6042503, "lon": 3.8949185, "name": "Rives du Lez", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41213": { "lat": 43.6073923, "lon": 3.8939694, "name": "Place de l'Europe", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41215": { "lat": 43.6089494, "lon": 3.8900989, "name": "Léon Blum", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 3 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41217": { "lat": 43.6084999, "lon": 3.8866241, "name": "Antigone", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 3 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41218": { "lat": 43.6070636, "lon": 3.8831972, "name": "Du Guesclin", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 3 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41221": { "lat": 43.6056635, "lon": 3.8802526, "name": "Gare Saint-Roch", - "lines": [ - "2", - "1" + "routes": [ + [ + "2", + 0 + ], + [ + "1", + 0 + ] ] }, "41223": { "lat": 43.6083781, "lon": 3.8798137, "name": "Comédie", - "lines": [ - "2", - "1" + "routes": [ + [ + "2", + 0 + ], + [ + "1", + 0 + ] ] }, "41225": { "lat": 43.6142312, "lon": 3.8817785, "name": "Corum", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "1", + 0 + ] ] }, "41227": { "lat": 43.6147682, "lon": 3.8780174, "name": "Louis Blanc", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "1", + 0 + ] ] }, "41229": { "lat": 43.6165623, "lon": 3.874061, "name": "Place Albert 1er - Saint-Charles", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41231": { "lat": 43.6190802, "lon": 3.8695186, "name": "Stade Philippidès", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41233": { "lat": 43.6226771, "lon": 3.868106, "name": "Boutonnet", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41235": { "lat": 43.6270831, "lon": 3.8656488, "name": "Saint-Éloi", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41237": { "lat": 43.6291152, "lon": 3.8614592, "name": "Universités des Sciences et Lettres", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41239": { "lat": 43.6316941, "lon": 3.8525865, "name": "Hôpital Lapeyronie", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41241": { "lat": 43.6347952, "lon": 3.8483979, "name": "Occitanie", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41243": { "lat": 43.6316074, "lon": 3.8430532, "name": "Château d'Ô", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41245": { "lat": 43.6346401, "lon": 3.8332043, "name": "Malbosc", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41247": { "lat": 43.6389849, "lon": 3.8276286, "name": "Euromédecine", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41249": { "lat": 43.6362734, "lon": 3.8226703, "name": "Hauts de Massane", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41251": { "lat": 43.6306938, "lon": 3.8210035, "name": "Saint-Paul", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41253": { "lat": 43.6275357, "lon": 3.8174933, "name": "Halles de la Paillade", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41255": { "lat": 43.6161829, "lon": 3.8197842, "name": "Mosson", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41261": { "lat": 43.6037495, "lon": 3.9157023, "name": "Place de France", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41263": { "lat": 43.6211235, "lon": 3.8173578, "name": "Stade de la Mosson", - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "42101": { "lat": 43.5748738, "lon": 3.8306564, "name": "Saint-Jean-de-Védas Centre", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42103": { "lat": 43.5708282, "lon": 3.8379052, "name": "Saint-Jean-le-Sec", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42105": { "lat": 43.5719919, "lon": 3.8444363, "name": "La Condamine", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42107": { "lat": 43.5752209, "lon": 3.8499642, "name": "Victoire 2", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42111": { "lat": 43.583879, "lon": 3.8601051, "name": "Sabines", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42113": { "lat": 43.5888673, "lon": 3.865695, "name": "Villeneuve d'Angoulême", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42115": { "lat": 43.5925048, "lon": 3.8664382, "name": "Croix d'Argent", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42117": { "lat": 43.5955627, "lon": 3.8679574, "name": "Mas Drevon", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42119": { "lat": 43.59358, "lon": 3.8731927, "name": "Lemasson", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42121": { "lat": 43.594954, "lon": 3.8760145, "name": "Saint-Cléophas", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42123": { "lat": 43.5994208, "lon": 3.8756775, "name": "Nouveau Saint-Roch", - "lines": [ - "4", - "2" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ], + [ + "2", + 0 + ] ] }, "42125": { "lat": 43.6030665, "lon": 3.8761818, "name": "Rondelet", - "lines": [ - "4", - "2" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ], + [ + "2", + 0 + ] ] }, "42127": { "lat": 43.6044372, "lon": 3.8798509, "name": "Gare Saint-Roch", - "lines": [ - "4" + "routes": [ + [ + "4", + 1 + ] ] }, "42129": { "lat": 43.6036345, "lon": 3.8842954, "name": "Place Carnot", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "42131": { "lat": 43.6037049, "lon": 3.8892253, "name": "Voltaire", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "42133": { "lat": 43.603993, "lon": 3.8940022, "name": "Rives du Lez", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "42137": { "lat": 43.6126573, "lon": 3.8949896, "name": "Pompignane", - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ] ] }, "42139": { "lat": 43.61399, "lon": 3.8881044, "name": "Les Aubes", - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ] ] }, "42141": { "lat": 43.6144427, "lon": 3.8819233, "name": "Corum", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42143": { "lat": 43.6170502, "lon": 3.8835972, "name": "Beaux-Arts", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42145": { "lat": 43.6204816, "lon": 3.8840706, "name": "Jeu de Mail des Abbés", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42147": { "lat": 43.626274, "lon": 3.8833184, "name": "Aiguelongue", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42149": { "lat": 43.6267745, "lon": 3.8887704, "name": "Saint-Lazare", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42151": { "lat": 43.628648, "lon": 3.8978384, "name": "Charles de Gaulle", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42153": { "lat": 43.6301681, "lon": 3.9026917, "name": "Clairval", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42155": { "lat": 43.6314509, "lon": 3.90911, "name": "La Galine", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42157": { "lat": 43.6327881, "lon": 3.9158063, "name": "Centurions", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42159": { "lat": 43.6342577, "lon": 3.9223924, "name": "Notre-Dame de Sablassou", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42163": { "lat": 43.638641, "lon": 3.9248354, "name": "Aube Rouge", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42165": { "lat": 43.6468218, "lon": 3.9294517, "name": "Via Domitia", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42167": { "lat": 43.6493863, "lon": 3.9210111, "name": "Georges Pompidou", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42169": { "lat": 43.6545596, "lon": 3.9128047, "name": "Jacou", - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42201": { "lat": 43.6544887, "lon": 3.9128035, "name": "Jacou", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42203": { "lat": 43.6492406, "lon": 3.9210503, "name": "Georges Pompidou", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42205": { "lat": 43.6466173, "lon": 3.9294866, "name": "Via Domitia", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42207": { "lat": 43.6384876, "lon": 3.9248573, "name": "Aube Rouge", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42211": { "lat": 43.6342103, "lon": 3.9221379, "name": "Notre-Dame de Sablassou", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42213": { "lat": 43.6327809, "lon": 3.9156202, "name": "Centurions", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42215": { "lat": 43.6314427, "lon": 3.9089161, "name": "La Galine", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42217": { "lat": 43.6301628, "lon": 3.9025061, "name": "Clairval", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42219": { "lat": 43.6285691, "lon": 3.8976846, "name": "Charles de Gaulle", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42221": { "lat": 43.6267545, "lon": 3.8885806, "name": "Saint-Lazare", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42223": { "lat": 43.6262919, "lon": 3.8830851, "name": "Aiguelongue", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42225": { "lat": 43.6203407, "lon": 3.884074, "name": "Jeu de Mail des Abbés", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42227": { "lat": 43.6169338, "lon": 3.8834353, "name": "Beaux-Arts", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42229": { "lat": 43.6144479, "lon": 3.8821386, "name": "Corum", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42231": { "lat": 43.6139508, "lon": 3.8883314, "name": "Les Aubes", - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ] ] }, "42233": { "lat": 43.6125111, "lon": 3.8949065, "name": "Pompignane", - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ] ] }, "42237": { "lat": 43.6040207, "lon": 3.8938614, "name": "Rives du Lez", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "42239": { "lat": 43.6037185, "lon": 3.8889694, "name": "Voltaire", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "42241": { "lat": 43.6037618, "lon": 3.8842324, "name": "Place Carnot", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "42243": { "lat": 43.6044596, "lon": 3.8798132, "name": "Gare Saint-Roch", - "lines": [ - "4" + "routes": [ + [ + "4", + 3 + ] ] }, "42245": { "lat": 43.6031345, "lon": 3.8759259, "name": "Rondelet", - "lines": [ - "4", - "2" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ], + [ + "2", + 1 + ] ] }, "42247": { "lat": 43.5992903, "lon": 3.8756446, "name": "Nouveau Saint-Roch", - "lines": [ - "4", - "2" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ], + [ + "2", + 1 + ] ] }, "42249": { "lat": 43.5948469, "lon": 3.8758854, "name": "Saint-Cléophas", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42251": { "lat": 43.5936982, "lon": 3.8730593, "name": "Lemasson", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42253": { "lat": 43.5954543, "lon": 3.8677984, "name": "Mas Drevon", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42255": { "lat": 43.5923385, "lon": 3.8664466, "name": "Croix d'Argent", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42257": { "lat": 43.5887133, "lon": 3.8656566, "name": "Villeneuve d'Angoulême", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42259": { "lat": 43.5837056, "lon": 3.8602074, "name": "Sabines", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42263": { "lat": 43.5751577, "lon": 3.8497681, "name": "Victoire 2", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42265": { "lat": 43.5719914, "lon": 3.8444352, "name": "La Condamine", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42267": { "lat": 43.5708971, "lon": 3.837919, "name": "Saint-Jean-le-Sec", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42269": { "lat": 43.5749282, "lon": 3.8307161, "name": "Saint-Jean-de-Védas Centre", - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "43101": { "lat": 43.6174206, "lon": 3.8099711, "name": "Juvignac", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43103": { "lat": 43.6161429, "lon": 3.8196447, "name": "Mosson", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43105": { "lat": 43.6156769, "lon": 3.8259015, "name": "Celleneuve", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43107": { "lat": 43.6195923, "lon": 3.8321502, "name": "Pilory", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43109": { "lat": 43.6220087, "lon": 3.8351279, "name": "Hôtel du Département", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43111": { "lat": 43.6174105, "lon": 3.8397593, "name": "Pergola", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43113": { "lat": 43.6134871, "lon": 3.8397933, "name": "Tonnelles", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43115": { "lat": 43.6113243, "lon": 3.8467949, "name": "Jules Guesde", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43117": { "lat": 43.6102597, "lon": 3.855048, "name": "Astruc", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43119": { "lat": 43.609864, "lon": 3.8624768, "name": "Arceaux", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43121": { "lat": 43.6085373, "lon": 3.8681087, "name": "Plan Cabanes", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43123": { "lat": 43.6055891, "lon": 3.8739545, "name": "Saint-Denis", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43125": { "lat": 43.6063438, "lon": 3.8768143, "name": "Observatoire", - "lines": [ - "4", - "3", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "3", + 2 + ], + [ + "3", + 3 + ], + [ + "1", + 3 + ] ] }, "43127": { "lat": 43.6052422, "lon": 3.8797131, "name": "Gare Saint-Roch", - "lines": [ - "4", - "3", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "3", + 0 + ], + [ + "3", + 1 + ], + [ + "1", + 1 + ] ] }, "43133": { "lat": 43.5921013, "lon": 3.8804566, "name": "Saint-Martin", - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "43135": { "lat": 43.590299, "lon": 3.8852278, "name": "Restanque", - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "43139": { "lat": 43.5935183, "lon": 3.8960726, "name": "La Rauze", - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "43141": { "lat": 43.5994861, "lon": 3.8950854, "name": "Georges Frêche - Hôtel de ville", - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "43145": { "lat": 43.5977551, "lon": 3.9034583, "name": "Pablo Picasso", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43149": { "lat": 43.5826143, "lon": 3.9257823, "name": "Boirargues", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43151": { "lat": 43.5779836, "lon": 3.9352762, "name": "Écopôle", - "lines": [ - "3" + "routes": [ + [ + "3", + 3 + ] ] }, "43153": { "lat": 43.5728456, "lon": 3.9457963, "name": "Parc Expo", - "lines": [ - "3" + "routes": [ + [ + "3", + 3 + ] ] }, "43155": { "lat": 43.5653949, "lon": 3.9573136, "name": "Pérols - Centre", - "lines": [ - "3" + "routes": [ + [ + "3", + 3 + ] ] }, "43157": { "lat": 43.5579423, "lon": 3.9636059, "name": "Pérols Étang de l'Or", - "lines": [ - "3" + "routes": [ + [ + "3", + 3 + ] ] }, "43159": { "lat": 43.570728, "lon": 3.9051692, "name": "Lattes Centre", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ] ] }, "43161": { "lat": 43.5713482, "lon": 3.9139627, "name": "Cougourlude", - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ] ] }, "43201": { "lat": 43.5579564, "lon": 3.9636474, "name": "Pérols Étang de l'Or", - "lines": [ - "3" + "routes": [ + [ + "3", + 1 + ] ] }, "43203": { "lat": 43.5654383, "lon": 3.9573953, "name": "Pérols - Centre", - "lines": [ - "3" + "routes": [ + [ + "3", + 1 + ] ] }, "43205": { "lat": 43.5729444, "lon": 3.9456566, "name": "Parc Expo", - "lines": [ - "3" + "routes": [ + [ + "3", + 1 + ] ] }, "43207": { "lat": 43.5781392, "lon": 3.9350421, "name": "Écopôle", - "lines": [ - "3" + "routes": [ + [ + "3", + 1 + ] ] }, "43209": { "lat": 43.5827358, "lon": 3.9256144, "name": "Boirargues", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43213": { "lat": 43.597799, "lon": 3.9036298, "name": "Pablo Picasso", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43217": { "lat": 43.5994093, "lon": 3.8949293, "name": "Georges Frêche - Hôtel de ville", - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "43219": { "lat": 43.5935375, "lon": 3.8958178, "name": "La Rauze", - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "43223": { "lat": 43.5904199, "lon": 3.8849928, "name": "Restanque", - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "43225": { "lat": 43.5922458, "lon": 3.8802527, "name": "Saint-Martin", - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "43231": { "lat": 43.6051723, "lon": 3.8797962, "name": "Gare Saint-Roch", - "lines": [ - "4", - "3", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "3", + 2 + ], + [ + "3", + 3 + ], + [ + "1", + 3 + ] ] }, "43233": { "lat": 43.606427, "lon": 3.8766896, "name": "Observatoire", - "lines": [ - "4", - "3", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "3", + 0 + ], + [ + "3", + 1 + ], + [ + "1", + 1 + ] ] }, "43235": { "lat": 43.6062372, "lon": 3.8727299, "name": "Saint-Denis", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43237": { "lat": 43.6085626, "lon": 3.8681304, "name": "Plan Cabanes", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43239": { "lat": 43.6100217, "lon": 3.8615025, "name": "Arceaux", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43241": { "lat": 43.610261, "lon": 3.8548, "name": "Astruc", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43243": { "lat": 43.6114471, "lon": 3.8466375, "name": "Jules Guesde", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43245": { "lat": 43.6135181, "lon": 3.8395235, "name": "Tonnelles", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43247": { "lat": 43.6182507, "lon": 3.8391413, "name": "Pergola", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43249": { "lat": 43.6219189, "lon": 3.8349511, "name": "Hôtel du Département", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43251": { "lat": 43.6195151, "lon": 3.8319619, "name": "Pilory", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43253": { "lat": 43.6154832, "lon": 3.8258568, "name": "Celleneuve", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43255": { "lat": 43.6163397, "lon": 3.8196588, "name": "Mosson", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43257": { "lat": 43.6175115, "lon": 3.810219, "name": "Juvignac", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43259": { "lat": 43.570666, "lon": 3.9052229, "name": "Lattes Centre", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ] ] }, "43261": { "lat": 43.5713259, "lon": 3.9141537, "name": "Cougourlude", - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ] ] }, "44102": { "lat": 43.6148093, "lon": 3.8737906, "name": "Albert 1er - Cathédrale", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "1", + 1 + ] ] }, "44103": { "lat": 43.6116575, "lon": 3.8723575, "name": "Peyrou - Arc de Triomphe", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "1", + 1 + ] ] }, "44104": { "lat": 43.6081335, "lon": 3.8735638, "name": "Saint-Guilhem - Courreau", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "1", + 1 + ] ] }, "44105": { "lat": 43.5911314, "lon": 3.8909614, "name": "Garcia Lorca", - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 0 + ], + [ + "4", + 1 + ], + [ + "4", + 1 + ] ] }, "44201": { "lat": 43.5912294, "lon": 3.8911652, "name": "Garcia Lorca", - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 2 + ], + [ + "4", + 3 + ], + [ + "4", + 3 + ] ] }, "44202": { "lat": 43.6148219, "lon": 3.8737427, "name": "Albert 1er - Cathédrale", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "1", + 3 + ] ] }, "44203": { "lat": 43.6116632, "lon": 3.8722737, "name": "Peyrou - Arc de Triomphe", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "1", + 3 + ] ] }, "44204": { "lat": 43.6081132, "lon": 3.8735064, "name": "Saint-Guilhem - Courreau", - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "1", + 3 + ] ] } }, @@ -2161,8 +3297,15 @@ "distance": 604 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "43223-43225": { @@ -2248,8 +3391,15 @@ "distance": 433 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "43225-42123": { @@ -2495,8 +3645,15 @@ "distance": 911 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "42123-42125": { @@ -2632,9 +3789,19 @@ "distance": 496 } ], - "lines": [ - "4", - "2" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ], + [ + "2", + 0 + ] ] }, "42125-43127": { @@ -2795,8 +3962,11 @@ "distance": 492 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ] ] }, "43127-43233": { @@ -2852,10 +4022,23 @@ "distance": 277 } ], - "lines": [ - "4", - "3", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "3", + 0 + ], + [ + "3", + 1 + ], + [ + "1", + 1 + ] ] }, "43233-44104": { @@ -2931,9 +4114,15 @@ "distance": 321 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "1", + 1 + ] ] }, "44104-44103": { @@ -2994,9 +4183,15 @@ "distance": 414 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "1", + 1 + ] ] }, "44103-44102": { @@ -3027,9 +4222,15 @@ "distance": 372 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "1", + 1 + ] ] }, "44102-41129": { @@ -3105,8 +4306,11 @@ "distance": 409 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ] ] }, "41129-41131": { @@ -3202,9 +4406,15 @@ "distance": 347 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "1", + 2 + ] ] }, "41131-42231": { @@ -3435,8 +4645,11 @@ "distance": 539 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ] ] }, "42231-42233": { @@ -3677,8 +4890,11 @@ "distance": 704 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ] ] }, "42233-41143": { @@ -3829,8 +5045,11 @@ "distance": 586 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ] ] }, "41143-41145": { @@ -3941,9 +5160,23 @@ "distance": 360 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41145-43217": { @@ -4229,8 +5462,15 @@ "distance": 597 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "43217-43219": { @@ -4451,14 +5691,28 @@ "distance": 796 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "43219-44105": { "points": [], - "lines": [ - "4" + "routes": [ + [ + "4", + 0 + ], + [ + "4", + 1 + ] ] }, "42125-42127": { @@ -4544,8 +5798,11 @@ "distance": 367 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 1 + ] ] }, "42127-41138": { @@ -4741,8 +5998,11 @@ "distance": 438 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 1 + ] ] }, "41138-41139": { @@ -4958,9 +6218,19 @@ "distance": 464 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 1 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41139-41141": { @@ -5036,9 +6306,19 @@ "distance": 335 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 1 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41141-41143": { @@ -5139,9 +6419,19 @@ "distance": 444 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 1 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "44201-43139": { @@ -5267,8 +6557,15 @@ "distance": 482 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "43139-43141": { @@ -5489,8 +6786,15 @@ "distance": 793 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "43141-41211": { @@ -5731,8 +7035,15 @@ "distance": 589 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "41211-41213": { @@ -5833,9 +7144,23 @@ "distance": 364 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41213-42137": { @@ -5981,8 +7306,11 @@ "distance": 593 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ] ] }, "42137-42139": { @@ -6203,8 +7531,11 @@ "distance": 712 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ] ] }, "42139-41225": { @@ -6430,8 +7761,11 @@ "distance": 549 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ] ] }, "41225-41227": { @@ -6537,9 +7871,15 @@ "distance": 336 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "1", + 0 + ] ] }, "41227-44202": { @@ -6630,8 +7970,11 @@ "distance": 401 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ] ] }, "44202-44203": { @@ -6667,9 +8010,15 @@ "distance": 372 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "1", + 3 + ] ] }, "44203-44204": { @@ -6740,9 +8089,15 @@ "distance": 417 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "1", + 3 + ] ] }, "44204-43125": { @@ -6808,9 +8163,15 @@ "distance": 337 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "1", + 3 + ] ] }, "43125-43231": { @@ -6876,10 +8237,23 @@ "distance": 272 } ], - "lines": [ - "4", - "3", - "1" + "routes": [ + [ + "4", + 2 + ], + [ + "3", + 2 + ], + [ + "3", + 3 + ], + [ + "1", + 3 + ] ] }, "43231-42245": { @@ -7015,8 +8389,11 @@ "distance": 492 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ] ] }, "42245-42247": { @@ -7152,9 +8529,19 @@ "distance": 495 } ], - "lines": [ - "4", - "2" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ], + [ + "2", + 1 + ] ] }, "42247-43133": { @@ -7425,8 +8812,15 @@ "distance": 923 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "43133-43135": { @@ -7512,14 +8906,28 @@ "distance": 433 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "43135-44201": { "points": [], - "lines": [ - "4" + "routes": [ + [ + "4", + 2 + ], + [ + "4", + 3 + ] ] }, "41213-41215": { @@ -7625,9 +9033,19 @@ "distance": 454 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 3 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41215-41217": { @@ -7708,9 +9126,19 @@ "distance": 337 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 3 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41217-41218": { @@ -7911,9 +9339,19 @@ "distance": 469 } ], - "lines": [ - "4", - "1" + "routes": [ + [ + "4", + 3 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41218-42243": { @@ -8109,8 +9547,11 @@ "distance": 419 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 3 + ] ] }, "42243-42245": { @@ -8196,8 +9637,11 @@ "distance": 383 } ], - "lines": [ - "4" + "routes": [ + [ + "4", + 3 + ] ] }, "42101-42103": { @@ -8363,8 +9807,11 @@ "distance": 749 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42103-42105": { @@ -8480,8 +9927,11 @@ "distance": 557 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42105-42107": { @@ -8537,8 +9987,11 @@ "distance": 574 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42107-42111": { @@ -8744,8 +10197,11 @@ "distance": 1457 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42111-42113": { @@ -8996,8 +10452,11 @@ "distance": 851 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42113-42115": { @@ -9108,8 +10567,11 @@ "distance": 415 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42115-42117": { @@ -9220,8 +10682,11 @@ "distance": 372 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42117-42119": { @@ -9392,8 +10857,11 @@ "distance": 522 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42119-42121": { @@ -9514,8 +10982,11 @@ "distance": 398 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42121-42123": { @@ -9671,8 +11142,11 @@ "distance": 507 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42125-41221": { @@ -9848,8 +11322,11 @@ "distance": 528 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "41221-41223": { @@ -9920,9 +11397,15 @@ "distance": 327 } ], - "lines": [ - "2", - "1" + "routes": [ + [ + "2", + 0 + ], + [ + "1", + 0 + ] ] }, "41223-42141": { @@ -10183,8 +11666,11 @@ "distance": 892 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42141-42143": { @@ -10370,8 +11856,11 @@ "distance": 401 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42143-42145": { @@ -10572,8 +12061,11 @@ "distance": 454 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42145-42147": { @@ -10809,8 +12301,11 @@ "distance": 716 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42147-42149": { @@ -10896,8 +12391,11 @@ "distance": 449 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42149-42151": { @@ -11143,8 +12641,11 @@ "distance": 837 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42151-42153": { @@ -11260,8 +12761,11 @@ "distance": 445 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42153-42155": { @@ -11312,8 +12816,11 @@ "distance": 538 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42155-42157": { @@ -11349,8 +12856,11 @@ "distance": 561 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42157-42159": { @@ -11426,8 +12936,11 @@ "distance": 557 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42159-42163": { @@ -11648,8 +13161,11 @@ "distance": 713 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42163-42165": { @@ -11965,8 +13481,11 @@ "distance": 1295 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42165-42167": { @@ -12187,8 +13706,11 @@ "distance": 866 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42167-42169": { @@ -12449,8 +13971,11 @@ "distance": 1033 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 0 + ] ] }, "42201-42203": { @@ -12736,8 +14261,11 @@ "distance": 1049 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42203-42205": { @@ -12978,8 +14506,11 @@ "distance": 869 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42205-42207": { @@ -13295,8 +14826,11 @@ "distance": 1292 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42207-42211": { @@ -13507,8 +15041,11 @@ "distance": 717 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42211-42213": { @@ -13594,8 +15131,11 @@ "distance": 550 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42213-42215": { @@ -13631,8 +15171,11 @@ "distance": 561 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42215-42217": { @@ -13683,8 +15226,11 @@ "distance": 535 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42217-42219": { @@ -13800,8 +15346,11 @@ "distance": 449 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42219-42221": { @@ -14032,8 +15581,11 @@ "distance": 833 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42221-42223": { @@ -14129,8 +15681,11 @@ "distance": 451 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42223-42225": { @@ -14366,8 +15921,11 @@ "distance": 718 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42225-42227": { @@ -14563,8 +16121,11 @@ "distance": 454 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42227-42229": { @@ -14760,8 +16321,11 @@ "distance": 413 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42229-41133": { @@ -15012,8 +16576,11 @@ "distance": 865 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "41133-41135": { @@ -15089,9 +16656,15 @@ "distance": 327 } ], - "lines": [ - "2", - "1" + "routes": [ + [ + "2", + 1 + ], + [ + "1", + 2 + ] ] }, "41135-42245": { @@ -15262,8 +16835,11 @@ "distance": 540 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42247-42249": { @@ -15414,8 +16990,11 @@ "distance": 505 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42249-42251": { @@ -15526,8 +17105,11 @@ "distance": 393 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42251-42253": { @@ -15688,8 +17270,11 @@ "distance": 535 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42253-42255": { @@ -15800,8 +17385,11 @@ "distance": 375 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42255-42257": { @@ -15902,8 +17490,11 @@ "distance": 413 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42257-42259": { @@ -16149,8 +17740,11 @@ "distance": 855 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42259-42263": { @@ -16371,8 +17965,11 @@ "distance": 1452 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42263-42265": { @@ -16443,8 +18040,11 @@ "distance": 557 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42265-42267": { @@ -16560,8 +18160,11 @@ "distance": 558 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "42267-42269": { @@ -16742,8 +18345,11 @@ "distance": 745 } ], - "lines": [ - "2" + "routes": [ + [ + "2", + 1 + ] ] }, "43259-43261": { @@ -16904,8 +18510,11 @@ "distance": 749 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ] ] }, "43261-43209": { @@ -17211,8 +18820,11 @@ "distance": 1882 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ] ] }, "43209-43213": { @@ -17418,8 +19030,15 @@ "distance": 2513 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43213-41207": { @@ -17530,8 +19149,15 @@ "distance": 668 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "41207-41209": { @@ -17637,9 +19263,23 @@ "distance": 353 } ], - "lines": [ - "3", - "1" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ], + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41209-42237": { @@ -17835,8 +19475,15 @@ "distance": 478 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "42237-42239": { @@ -17952,8 +19599,15 @@ "distance": 400 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "42239-42241": { @@ -18049,8 +19703,15 @@ "distance": 405 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "42241-43127": { @@ -18266,8 +19927,15 @@ "distance": 508 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43233-43235": { @@ -18408,8 +20076,15 @@ "distance": 460 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43235-43237": { @@ -18480,8 +20155,15 @@ "distance": 451 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43237-43239": { @@ -18567,8 +20249,15 @@ "distance": 564 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43239-43241": { @@ -18679,8 +20368,15 @@ "distance": 548 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43241-43243": { @@ -18826,8 +20522,15 @@ "distance": 684 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43243-43245": { @@ -18958,8 +20661,15 @@ "distance": 638 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43245-43247": { @@ -19185,8 +20895,15 @@ "distance": 635 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43247-43249": { @@ -19327,8 +21044,15 @@ "distance": 610 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43249-43251": { @@ -19404,8 +21128,15 @@ "distance": 358 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43251-43253": { @@ -19536,8 +21267,15 @@ "distance": 732 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43253-43255": { @@ -19718,8 +21456,15 @@ "distance": 608 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43255-43257": { @@ -20110,8 +21855,15 @@ "distance": 1200 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 0 + ], + [ + "3", + 1 + ] ] }, "43201-43203": { @@ -20202,8 +21954,11 @@ "distance": 971 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 1 + ] ] }, "43203-43205": { @@ -20319,8 +22074,11 @@ "distance": 1285 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 1 + ] ] }, "43205-43207": { @@ -20421,8 +22179,11 @@ "distance": 1033 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 1 + ] ] }, "43207-43209": { @@ -20513,8 +22274,11 @@ "distance": 917 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 1 + ] ] }, "43101-43103": { @@ -20905,8 +22669,15 @@ "distance": 1229 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43103-43105": { @@ -21082,8 +22853,15 @@ "distance": 618 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43105-43107": { @@ -21199,8 +22977,15 @@ "distance": 729 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43107-43109": { @@ -21271,8 +23056,15 @@ "distance": 362 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43109-43111": { @@ -21428,8 +23220,15 @@ "distance": 690 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43111-43113": { @@ -21625,8 +23424,15 @@ "distance": 558 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43113-43115": { @@ -21757,8 +23563,15 @@ "distance": 629 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43115-43117": { @@ -21899,8 +23712,15 @@ "distance": 695 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43117-43119": { @@ -22016,8 +23836,15 @@ "distance": 608 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43119-43121": { @@ -22098,8 +23925,15 @@ "distance": 482 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43121-43123": { @@ -22205,8 +24039,15 @@ "distance": 573 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43123-43125": { @@ -22367,8 +24208,15 @@ "distance": 326 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43231-42129": { @@ -22584,8 +24432,15 @@ "distance": 516 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "42129-42131": { @@ -22701,8 +24556,15 @@ "distance": 416 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "42131-42133": { @@ -22843,8 +24705,15 @@ "distance": 391 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "42133-41147": { @@ -23080,8 +24949,15 @@ "distance": 474 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "41147-41149": { @@ -23197,9 +25073,23 @@ "distance": 420 } ], - "lines": [ - "3", - "1" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ], + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41149-43145": { @@ -23295,8 +25185,15 @@ "distance": 578 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43145-43149": { @@ -23487,8 +25384,15 @@ "distance": 2534 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ], + [ + "3", + 3 + ] ] }, "43149-43161": { @@ -23779,8 +25683,11 @@ "distance": 1871 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ] ] }, "43161-43159": { @@ -23941,8 +25848,11 @@ "distance": 734 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 2 + ] ] }, "43149-43151": { @@ -24033,8 +25943,11 @@ "distance": 924 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 3 + ] ] }, "43151-43153": { @@ -24125,8 +26038,11 @@ "distance": 1025 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 3 + ] ] }, "43153-43155": { @@ -24267,8 +26183,11 @@ "distance": 1269 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 3 + ] ] }, "43155-43157": { @@ -24374,8 +26293,11 @@ "distance": 971 } ], - "lines": [ - "3" + "routes": [ + [ + "3", + 3 + ] ] }, "41201-41261": { @@ -24486,8 +26408,15 @@ "distance": 460 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41261-41203": { @@ -24613,8 +26542,15 @@ "distance": 488 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41203-41205": { @@ -24705,8 +26641,15 @@ "distance": 492 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41205-41207": { @@ -24767,8 +26710,15 @@ "distance": 409 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41209-41211": { @@ -24919,8 +26869,15 @@ "distance": 421 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41218-41221": { @@ -25096,8 +27053,11 @@ "distance": 385 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ] ] }, "41223-41225": { @@ -25363,8 +27323,11 @@ "distance": 901 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ] ] }, "41227-41229": { @@ -25475,8 +27438,11 @@ "distance": 429 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ] ] }, "41229-41231": { @@ -25637,8 +27603,15 @@ "distance": 542 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41231-41233": { @@ -25704,8 +27677,15 @@ "distance": 418 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41233-41235": { @@ -25801,8 +27781,15 @@ "distance": 534 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41235-41237": { @@ -25973,8 +27960,15 @@ "distance": 504 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41237-41239": { @@ -26140,8 +28134,15 @@ "distance": 897 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41239-41241": { @@ -26212,8 +28213,15 @@ "distance": 485 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41241-41243": { @@ -26439,8 +28447,15 @@ "distance": 821 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41243-41245": { @@ -26711,8 +28726,15 @@ "distance": 1057 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41245-41247": { @@ -26883,8 +28905,15 @@ "distance": 729 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41247-41249": { @@ -26975,8 +29004,15 @@ "distance": 538 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41249-41251": { @@ -27102,8 +29138,15 @@ "distance": 738 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41251-41253": { @@ -27224,8 +29267,15 @@ "distance": 543 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41253-41263": { @@ -27356,8 +29406,15 @@ "distance": 712 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41263-41255": { @@ -27518,8 +29575,15 @@ "distance": 614 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 0 + ], + [ + "1", + 1 + ] ] }, "41218-43127": { @@ -27725,8 +29789,11 @@ "distance": 403 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 1 + ] ] }, "44102-41229": { @@ -27807,8 +29874,11 @@ "distance": 226 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 1 + ] ] }, "41101-41163": { @@ -27984,8 +30054,15 @@ "distance": 625 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41163-41103": { @@ -28111,8 +30188,15 @@ "distance": 702 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41103-41105": { @@ -28243,8 +30327,15 @@ "distance": 538 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41105-41107": { @@ -28375,8 +30466,15 @@ "distance": 741 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41107-41109": { @@ -28462,8 +30560,15 @@ "distance": 531 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41109-41111": { @@ -28644,8 +30749,15 @@ "distance": 724 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41111-41113": { @@ -28926,8 +31038,15 @@ "distance": 1055 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41113-41115": { @@ -29158,8 +31277,15 @@ "distance": 823 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41115-41117": { @@ -29230,8 +31356,15 @@ "distance": 466 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41117-41119": { @@ -29422,8 +31555,15 @@ "distance": 924 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41119-41121": { @@ -29584,8 +31724,15 @@ "distance": 504 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41121-41123": { @@ -29671,8 +31818,15 @@ "distance": 531 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41123-41125": { @@ -29718,8 +31872,15 @@ "distance": 415 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41125-41127": { @@ -29865,8 +32026,15 @@ "distance": 534 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41127-41129": { @@ -29967,8 +32135,11 @@ "distance": 439 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ] ] }, "41131-41133": { @@ -30234,8 +32405,11 @@ "distance": 866 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ] ] }, "41135-41138": { @@ -30431,8 +32605,11 @@ "distance": 417 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ] ] }, "41145-41147": { @@ -30628,8 +32805,15 @@ "distance": 429 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41149-41151": { @@ -30695,8 +32879,15 @@ "distance": 355 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41151-41153": { @@ -30802,8 +32993,15 @@ "distance": 490 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41153-41161": { @@ -30939,8 +33137,15 @@ "distance": 479 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41161-41155": { @@ -31036,8 +33241,15 @@ "distance": 438 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 2 + ], + [ + "1", + 3 + ] ] }, "41127-44202": { @@ -31103,8 +33315,11 @@ "distance": 214 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 3 + ] ] }, "43231-41138": { @@ -31325,8 +33540,11 @@ "distance": 421 } ], - "lines": [ - "1" + "routes": [ + [ + "1", + 3 + ] ] } }