UNPKG

isochrone-explorer

Version:

A powerful isochrone and routing engine based on Dijkstra's algorithm for accurate travel time calculations.

51 lines (39 loc) 1.33 kB
const { calculateDistance } = require('./geoUtils'); function parseGraph(osmData) { const graph = {}; const nodeCoords = {}; for (const element of osmData.elements) { if (element.type === 'node') { nodeCoords[element.id] = { lat: element.lat, lon: element.lon }; } } for (const element of osmData.elements) { if (element.type === 'way') { const nodes = element.nodes; for (let i = 0; i < nodes.length - 1; i++) { const node1 = nodes[i]; const node2 = nodes[i + 1]; if (!graph[node1]) graph[node1] = []; if (!graph[node2]) graph[node2] = []; const distance = calculateDistance(nodeCoords[node1], nodeCoords[node2]); graph[node1].push({ node: node2, distance }); graph[node2].push({ node: node1, distance }); } } } return { graph, nodeCoords }; } function findClosestNode(nodeCoords, lat, lon) { let minDistance = Infinity; let closestNode = null; for (const nodeId in nodeCoords) { const node = nodeCoords[nodeId]; const distance = calculateDistance({ lat, lon }, node); if (distance < minDistance) { minDistance = distance; closestNode = nodeId; } } return closestNode; } module.exports = { parseGraph, findClosestNode };