@wemap/osm 11.0.0-alpha.15 → 11.0.0-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +9 -9
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +9 -9
- package/dist/index.mjs.map +1 -1
- package/package.json +4 -4
- package/src/graph/OsmGraphEdge.ts +1 -1
package/dist/index.js
CHANGED
|
@@ -149,9 +149,9 @@ class OsmParser {
|
|
|
149
149
|
return new OsmWay(Number(attr.id));
|
|
150
150
|
}
|
|
151
151
|
}
|
|
152
|
-
class OsmGraphNode
|
|
152
|
+
class OsmGraphNode extends geo.GraphNode {
|
|
153
153
|
}
|
|
154
|
-
class
|
|
154
|
+
class OsmGraphEdge extends geo.GraphEdge {
|
|
155
155
|
}
|
|
156
156
|
class OsmGraphItinerary extends geo.GraphItinerary {
|
|
157
157
|
static fromNetworkNodes(start, end, networkNodes, edgesWeights) {
|
|
@@ -195,7 +195,7 @@ function createNodesAndEdgesFromElevator(nodes, edges, elevatorNode) {
|
|
|
195
195
|
const getOrCreateLevelNode = (level, builtFrom) => {
|
|
196
196
|
let levelNode = createdNodes.find(({ coords }) => geo.Level.equals(level, coords.level));
|
|
197
197
|
if (!levelNode) {
|
|
198
|
-
levelNode = new OsmGraphNode
|
|
198
|
+
levelNode = new OsmGraphNode(elevatorNode.coords.clone(), builtFrom);
|
|
199
199
|
levelNode.coords.level = level;
|
|
200
200
|
createdNodes.push(levelNode);
|
|
201
201
|
nodes.push(levelNode);
|
|
@@ -223,7 +223,7 @@ function createNodesAndEdgesFromElevator(nodes, edges, elevatorNode) {
|
|
|
223
223
|
}
|
|
224
224
|
const minLevel = Math.min(createdNode1.coords.level, createdNode2.coords.level);
|
|
225
225
|
const maxLevel = Math.max(createdNode1.coords.level, createdNode2.coords.level);
|
|
226
|
-
const newEdge = new
|
|
226
|
+
const newEdge = new OsmGraphEdge(
|
|
227
227
|
createdNode1,
|
|
228
228
|
createdNode2,
|
|
229
229
|
[minLevel, maxLevel],
|
|
@@ -245,7 +245,7 @@ function createNetworkFromOsmModel(osmModel, waySelectionFilter = DEFAULT_WAY_SE
|
|
|
245
245
|
const getOrCreateNode = (osmNode) => {
|
|
246
246
|
let node = nodesCreated[osmNode.id];
|
|
247
247
|
if (!node) {
|
|
248
|
-
node = new OsmGraphNode
|
|
248
|
+
node = new OsmGraphNode(osmNode.coords, osmNode);
|
|
249
249
|
nodesCreated[osmNode.id] = node;
|
|
250
250
|
nodes.push(node);
|
|
251
251
|
if (osmNode.tags.highway === "elevator") {
|
|
@@ -261,7 +261,7 @@ function createNetworkFromOsmModel(osmModel, waySelectionFilter = DEFAULT_WAY_SE
|
|
|
261
261
|
let firstNode = getOrCreateNode(way.nodes[0]);
|
|
262
262
|
for (let i = 1; i < way.nodes.length; i++) {
|
|
263
263
|
const secondNode = getOrCreateNode(way.nodes[i]);
|
|
264
|
-
const edge = new
|
|
264
|
+
const edge = new OsmGraphEdge(firstNode, secondNode, way.level, way);
|
|
265
265
|
manageOneWay(edge, way);
|
|
266
266
|
edges.push(edge);
|
|
267
267
|
firstNode = secondNode;
|
|
@@ -271,7 +271,7 @@ function createNetworkFromOsmModel(osmModel, waySelectionFilter = DEFAULT_WAY_SE
|
|
|
271
271
|
createNodesAndEdgesFromElevator(nodes, edges, node);
|
|
272
272
|
});
|
|
273
273
|
const networkModel = new OsmNetwork(nodes, edges);
|
|
274
|
-
OsmGraphNode
|
|
274
|
+
OsmGraphNode.generateNodesLevels(networkModel.nodes);
|
|
275
275
|
return networkModel;
|
|
276
276
|
}
|
|
277
277
|
const OsmNetworkUtils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
@@ -283,9 +283,9 @@ const OsmNetworkUtils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.def
|
|
|
283
283
|
createNetworkFromOsmModel
|
|
284
284
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
285
285
|
exports.OsmElement = OsmElement;
|
|
286
|
-
exports.OsmGraphEdge =
|
|
286
|
+
exports.OsmGraphEdge = OsmGraphEdge;
|
|
287
287
|
exports.OsmGraphItinerary = OsmGraphItinerary;
|
|
288
|
-
exports.OsmGraphNode = OsmGraphNode
|
|
288
|
+
exports.OsmGraphNode = OsmGraphNode;
|
|
289
289
|
exports.OsmGraphProjection = OsmGraphProjection;
|
|
290
290
|
exports.OsmGraphRouter = OsmGraphRouter;
|
|
291
291
|
exports.OsmGraphRouterOptions = OsmGraphRouterOptions;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmParser.ts","../src/graph/OsmGraphNode.ts","../src/graph/OsmGraphEdge.ts","../src/graph/OsmGraphItinerary.ts","../src/graph/OsmNetwork.ts","../src/graph/OsmGraphProjection.ts","../src/graph/OsmGraphRouter.ts","../src/graph/OsmGraphRouterOptions.ts","../src/graph/OsmMapMatching.ts","../src/graph/OsmNetworkUtils.ts"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n}\n\nexport default OsmModel;\n","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n coords : Coordinates;\n ways: OsmWay[] = [];\n\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import { Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n }\n\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isArea() {\n // That is not the real definition for OSM\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n}\n\nexport default OsmWay;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport {\n Level, Coordinates\n} from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes as OsmXmlNode);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k] = v;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n for (let i = 0; i < model.ways.length; i++) {\n const way = model.ways[i];\n if (way.tags.level) {\n way.level = Level.fromString(way.tags.level);\n }\n }\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { GraphNode } from \"@wemap/geo\";\nimport OsmNode from \"../OsmNode\";\nimport OsmWay from \"../OsmWay\";\n\nexport default class OsmGraphNode extends GraphNode<OsmNode, OsmNode | OsmWay>{ }","import { GraphEdge } from \"@wemap/geo\";\nimport OsmNode from \"../OsmNode\";\nimport OsmWay from \"../OsmWay\";\n\nexport default class OsmGraphNode extends GraphEdge<OsmNode | OsmWay, OsmNode>{ }","import { Coordinates, GraphItinerary, GraphNode } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphItinerary extends GraphItinerary<N, E>{ \n\n static fromNetworkNodes<A = N, B = E>(\n start: Coordinates, end: Coordinates,\n networkNodes: GraphNode<A, B>[], edgesWeights: number[]\n ) {\n return super.fromNetworkNodes(start, end, networkNodes, edgesWeights) as GraphItinerary<A, B>;\n }\n}\n","import { Coordinates, Network } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmNetwork extends Network<N, E>{\n static fromCoordinates<A = N, B = E>(segments: Coordinates[][]) {\n return super.fromCoordinates<N, E>(segments) as Network<A, B>;\n }\n}","import { GraphProjection } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphProjection extends GraphProjection<N, E>{ }\n","import { GraphRouter } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphRouter extends GraphRouter<N, E>{ }\n","import { GraphRouterOptions } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphRouterOptions extends GraphRouterOptions<N, E>{ }\n","import { MapMatching } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmMapMatching extends MapMatching<N, E>{ }\n","import { Level } from '@wemap/geo';\nimport OsmGraphNode from './OsmGraphNode';\nimport OsmGraphEdge from './OsmGraphEdge';\nimport OsmModel from '../OsmModel';\nimport OsmNode from '../OsmNode';\nimport OsmWay from '../OsmWay';\nimport OsmNetwork from './OsmNetwork';\n\nexport type N = OsmNode;\nexport type E = OsmNode | OsmWay;\n\nexport const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk', 'elevator'];\n\nexport const DEFAULT_WAY_SELECTOR = (way: OsmWay) => {\n return HIGHWAYS_PEDESTRIANS.includes(way.tags.highway)\n || way.tags.footway === 'sidewalk'\n || way.tags.public_transport === 'platform'\n || way.tags.railway === 'platform';\n};\n\nexport function getNodeByName(network: OsmNetwork, name: string) {\n return network.nodes.find(({ builtFrom }) => builtFrom?.tags.name === name);\n}\n\nexport function getEdgeByName(network: OsmNetwork, name: string) {\n return network.edges.find(({ builtFrom }) => builtFrom?.tags.name === name);\n}\n\nfunction manageOneWay(edge: OsmGraphEdge, way: OsmWay) {\n\n const { highway, oneway, conveying } = way.tags;\n\n edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n\n if (edge.isOneway && conveying === 'backward') {\n const tmpNode = edge.node1;\n edge.node1 = edge.node2;\n edge.node2 = tmpNode;\n }\n}\n\n\nfunction createNodesAndEdgesFromElevator(\n nodes: OsmGraphNode[],\n edges: OsmGraphEdge[],\n elevatorNode: OsmGraphNode\n) {\n\n const createdNodes: OsmGraphNode[] = [];\n const getOrCreateLevelNode = (level: number | null, builtFrom: N | null) => {\n let levelNode = createdNodes.find(({ coords }) => Level.equals(level, coords.level));\n if (!levelNode) {\n levelNode = new OsmGraphNode(elevatorNode.coords.clone(), builtFrom);\n levelNode.coords.level = level;\n createdNodes.push(levelNode);\n nodes.push(levelNode);\n }\n return levelNode;\n };\n\n // Create nodes from node.edges\n elevatorNode.edges.forEach(edge => {\n if (Level.isRange(edge.level)) {\n throw new Error('Cannot handle this elevator edge due to ambiguity');\n }\n\n const levelNode = getOrCreateLevelNode(edge.level, elevatorNode.builtFrom);\n if (edge.node1 === elevatorNode) {\n edge.node1 = levelNode;\n } else {\n edge.node2 = levelNode;\n }\n levelNode.edges.push(edge);\n });\n\n // Create edges from createdNodes\n for (let i = 0; i < createdNodes.length; i++) {\n for (let j = i + 1; j < createdNodes.length; j++) {\n\n const createdNode1 = createdNodes[i];\n const createdNode2 = createdNodes[j];\n\n if (createdNode1.coords.level === null || createdNode2.coords.level === null) {\n // TODO: not the best approach... but cannot do better with [number, number] range for levels\n continue;\n }\n\n const minLevel = Math.min(createdNode1.coords.level as number, createdNode2.coords.level as number);\n const maxLevel = Math.max(createdNode1.coords.level as number, createdNode2.coords.level as number);\n\n const newEdge = new OsmGraphEdge(\n createdNode1,\n createdNode2,\n [minLevel, maxLevel],\n elevatorNode.builtFrom\n );\n edges.push(newEdge);\n }\n }\n\n // Remove the historical elevator node from the network\n const elevatorNodeIndex = nodes.indexOf(elevatorNode);\n if (elevatorNodeIndex > -1) {\n nodes.splice(elevatorNodeIndex, 1);\n }\n}\n\nexport function createNetworkFromOsmModel(\n osmModel: OsmModel,\n waySelectionFilter = DEFAULT_WAY_SELECTOR\n) {\n\n const nodes: OsmGraphNode[] = [];\n const edges: OsmGraphEdge[] = [];\n\n const nodesCreated: { [key: number]: OsmGraphNode } = {};\n const elevatorNodes: OsmGraphNode[] = [];\n\n const getOrCreateNode = (osmNode: OsmNode) => {\n let node = nodesCreated[osmNode.id];\n if (!node) {\n node = new OsmGraphNode(osmNode.coords, osmNode);\n nodesCreated[osmNode.id] = node;\n nodes.push(node);\n\n if (osmNode.tags.highway === 'elevator') {\n elevatorNodes.push(node);\n }\n }\n return node;\n };\n\n osmModel.ways.forEach(way => {\n if (!waySelectionFilter(way)) {\n return;\n }\n\n let firstNode = getOrCreateNode(way.nodes[0]);\n for (let i = 1; i < way.nodes.length; i++) {\n const secondNode = getOrCreateNode(way.nodes[i]);\n\n const edge = new OsmGraphEdge(firstNode, secondNode, way.level, way);\n manageOneWay(edge, way);\n edges.push(edge);\n firstNode = secondNode;\n }\n\n });\n\n elevatorNodes.forEach(node => {\n // We have to clone this node for each connected edge\n createNodesAndEdgesFromElevator(nodes, edges, node);\n });\n\n const networkModel = new OsmNetwork(nodes, edges);\n\n OsmGraphNode.generateNodesLevels(networkModel.nodes);\n\n return networkModel;\n}\n\n\n// /**\n// * @param {GraphNode} node\n// * @param {object} tags\n// */\n// static _applyNodePropertiesFromTags(node, tags) {\n// node.name = tags.name || null;\n// node.subwayEntrance = tags.railway === 'subway_entrance';\n// if (node.subwayEntrance && tags.ref) {\n// node.subwayEntranceRef = tags.ref;\n// }\n// }\n\n// /**\n// * @param {GraphEdge} edge\n// * @param {object} tags\n// */\n// static _applyEdgePropertiesFromTags(edge, tags) {\n// const { highway, oneway, conveying, name } = tags;\n// edge.name = name || null;\n// edge.isStairs = highway === 'steps';\n// edge.isConveying = 'conveying' in tags;\n// edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n// || (conveying && highway && ['yes', 'forward', 'backward'].includes(conveying)));\n\n// if (conveying === 'backward') {\n// const tmpNode = edge.node1;\n// edge.node1 = edge.node2;\n// edge.node2 = tmpNode;\n// }\n\n// }\n"],"names":["SaxesParser","Level","Coordinates","OsmGraphNode","GraphNode","GraphEdge","GraphItinerary","Network","GraphProjection","GraphRouter","GraphRouterOptions","MapMatching","OsmGraphEdge"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmParser.ts","../src/graph/OsmGraphNode.ts","../src/graph/OsmGraphEdge.ts","../src/graph/OsmGraphItinerary.ts","../src/graph/OsmNetwork.ts","../src/graph/OsmGraphProjection.ts","../src/graph/OsmGraphRouter.ts","../src/graph/OsmGraphRouterOptions.ts","../src/graph/OsmMapMatching.ts","../src/graph/OsmNetworkUtils.ts"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n}\n\nexport default OsmModel;\n","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n coords : Coordinates;\n ways: OsmWay[] = [];\n\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import { Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n }\n\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isArea() {\n // That is not the real definition for OSM\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n}\n\nexport default OsmWay;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport {\n Level, Coordinates\n} from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes as OsmXmlNode);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k] = v;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n for (let i = 0; i < model.ways.length; i++) {\n const way = model.ways[i];\n if (way.tags.level) {\n way.level = Level.fromString(way.tags.level);\n }\n }\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { GraphNode } from \"@wemap/geo\";\nimport OsmNode from \"../OsmNode\";\nimport OsmWay from \"../OsmWay\";\n\nexport default class OsmGraphNode extends GraphNode<OsmNode, OsmNode | OsmWay>{ }","import { GraphEdge } from \"@wemap/geo\";\nimport OsmNode from \"../OsmNode\";\nimport OsmWay from \"../OsmWay\";\n\nexport default class OsmGraphEdge extends GraphEdge<OsmNode | OsmWay, OsmNode>{ }","import { Coordinates, GraphItinerary, GraphNode } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphItinerary extends GraphItinerary<N, E>{ \n\n static fromNetworkNodes<A = N, B = E>(\n start: Coordinates, end: Coordinates,\n networkNodes: GraphNode<A, B>[], edgesWeights: number[]\n ) {\n return super.fromNetworkNodes(start, end, networkNodes, edgesWeights) as GraphItinerary<A, B>;\n }\n}\n","import { Coordinates, Network } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmNetwork extends Network<N, E>{\n static fromCoordinates<A = N, B = E>(segments: Coordinates[][]) {\n return super.fromCoordinates<N, E>(segments) as Network<A, B>;\n }\n}","import { GraphProjection } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphProjection extends GraphProjection<N, E>{ }\n","import { GraphRouter } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphRouter extends GraphRouter<N, E>{ }\n","import { GraphRouterOptions } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphRouterOptions extends GraphRouterOptions<N, E>{ }\n","import { MapMatching } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmMapMatching extends MapMatching<N, E>{ }\n","import { Level } from '@wemap/geo';\nimport OsmGraphNode from './OsmGraphNode';\nimport OsmGraphEdge from './OsmGraphEdge';\nimport OsmModel from '../OsmModel';\nimport OsmNode from '../OsmNode';\nimport OsmWay from '../OsmWay';\nimport OsmNetwork from './OsmNetwork';\n\nexport type N = OsmNode;\nexport type E = OsmNode | OsmWay;\n\nexport const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk', 'elevator'];\n\nexport const DEFAULT_WAY_SELECTOR = (way: OsmWay) => {\n return HIGHWAYS_PEDESTRIANS.includes(way.tags.highway)\n || way.tags.footway === 'sidewalk'\n || way.tags.public_transport === 'platform'\n || way.tags.railway === 'platform';\n};\n\nexport function getNodeByName(network: OsmNetwork, name: string) {\n return network.nodes.find(({ builtFrom }) => builtFrom?.tags.name === name);\n}\n\nexport function getEdgeByName(network: OsmNetwork, name: string) {\n return network.edges.find(({ builtFrom }) => builtFrom?.tags.name === name);\n}\n\nfunction manageOneWay(edge: OsmGraphEdge, way: OsmWay) {\n\n const { highway, oneway, conveying } = way.tags;\n\n edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n\n if (edge.isOneway && conveying === 'backward') {\n const tmpNode = edge.node1;\n edge.node1 = edge.node2;\n edge.node2 = tmpNode;\n }\n}\n\n\nfunction createNodesAndEdgesFromElevator(\n nodes: OsmGraphNode[],\n edges: OsmGraphEdge[],\n elevatorNode: OsmGraphNode\n) {\n\n const createdNodes: OsmGraphNode[] = [];\n const getOrCreateLevelNode = (level: number | null, builtFrom: N | null) => {\n let levelNode = createdNodes.find(({ coords }) => Level.equals(level, coords.level));\n if (!levelNode) {\n levelNode = new OsmGraphNode(elevatorNode.coords.clone(), builtFrom);\n levelNode.coords.level = level;\n createdNodes.push(levelNode);\n nodes.push(levelNode);\n }\n return levelNode;\n };\n\n // Create nodes from node.edges\n elevatorNode.edges.forEach(edge => {\n if (Level.isRange(edge.level)) {\n throw new Error('Cannot handle this elevator edge due to ambiguity');\n }\n\n const levelNode = getOrCreateLevelNode(edge.level, elevatorNode.builtFrom);\n if (edge.node1 === elevatorNode) {\n edge.node1 = levelNode;\n } else {\n edge.node2 = levelNode;\n }\n levelNode.edges.push(edge);\n });\n\n // Create edges from createdNodes\n for (let i = 0; i < createdNodes.length; i++) {\n for (let j = i + 1; j < createdNodes.length; j++) {\n\n const createdNode1 = createdNodes[i];\n const createdNode2 = createdNodes[j];\n\n if (createdNode1.coords.level === null || createdNode2.coords.level === null) {\n // TODO: not the best approach... but cannot do better with [number, number] range for levels\n continue;\n }\n\n const minLevel = Math.min(createdNode1.coords.level as number, createdNode2.coords.level as number);\n const maxLevel = Math.max(createdNode1.coords.level as number, createdNode2.coords.level as number);\n\n const newEdge = new OsmGraphEdge(\n createdNode1,\n createdNode2,\n [minLevel, maxLevel],\n elevatorNode.builtFrom\n );\n edges.push(newEdge);\n }\n }\n\n // Remove the historical elevator node from the network\n const elevatorNodeIndex = nodes.indexOf(elevatorNode);\n if (elevatorNodeIndex > -1) {\n nodes.splice(elevatorNodeIndex, 1);\n }\n}\n\nexport function createNetworkFromOsmModel(\n osmModel: OsmModel,\n waySelectionFilter = DEFAULT_WAY_SELECTOR\n) {\n\n const nodes: OsmGraphNode[] = [];\n const edges: OsmGraphEdge[] = [];\n\n const nodesCreated: { [key: number]: OsmGraphNode } = {};\n const elevatorNodes: OsmGraphNode[] = [];\n\n const getOrCreateNode = (osmNode: OsmNode) => {\n let node = nodesCreated[osmNode.id];\n if (!node) {\n node = new OsmGraphNode(osmNode.coords, osmNode);\n nodesCreated[osmNode.id] = node;\n nodes.push(node);\n\n if (osmNode.tags.highway === 'elevator') {\n elevatorNodes.push(node);\n }\n }\n return node;\n };\n\n osmModel.ways.forEach(way => {\n if (!waySelectionFilter(way)) {\n return;\n }\n\n let firstNode = getOrCreateNode(way.nodes[0]);\n for (let i = 1; i < way.nodes.length; i++) {\n const secondNode = getOrCreateNode(way.nodes[i]);\n\n const edge = new OsmGraphEdge(firstNode, secondNode, way.level, way);\n manageOneWay(edge, way);\n edges.push(edge);\n firstNode = secondNode;\n }\n\n });\n\n elevatorNodes.forEach(node => {\n // We have to clone this node for each connected edge\n createNodesAndEdgesFromElevator(nodes, edges, node);\n });\n\n const networkModel = new OsmNetwork(nodes, edges);\n\n OsmGraphNode.generateNodesLevels(networkModel.nodes);\n\n return networkModel;\n}\n\n\n// /**\n// * @param {GraphNode} node\n// * @param {object} tags\n// */\n// static _applyNodePropertiesFromTags(node, tags) {\n// node.name = tags.name || null;\n// node.subwayEntrance = tags.railway === 'subway_entrance';\n// if (node.subwayEntrance && tags.ref) {\n// node.subwayEntranceRef = tags.ref;\n// }\n// }\n\n// /**\n// * @param {GraphEdge} edge\n// * @param {object} tags\n// */\n// static _applyEdgePropertiesFromTags(edge, tags) {\n// const { highway, oneway, conveying, name } = tags;\n// edge.name = name || null;\n// edge.isStairs = highway === 'steps';\n// edge.isConveying = 'conveying' in tags;\n// edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n// || (conveying && highway && ['yes', 'forward', 'backward'].includes(conveying)));\n\n// if (conveying === 'backward') {\n// const tmpNode = edge.node1;\n// edge.node1 = edge.node2;\n// edge.node2 = tmpNode;\n// }\n\n// }\n"],"names":["SaxesParser","Level","Coordinates","GraphNode","GraphEdge","GraphItinerary","Network","GraphProjection","GraphRouter","GraphRouterOptions","MapMatching"],"mappings":"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"}
|
package/dist/index.mjs
CHANGED
|
@@ -147,9 +147,9 @@ class OsmParser {
|
|
|
147
147
|
return new OsmWay(Number(attr.id));
|
|
148
148
|
}
|
|
149
149
|
}
|
|
150
|
-
class OsmGraphNode
|
|
150
|
+
class OsmGraphNode extends GraphNode {
|
|
151
151
|
}
|
|
152
|
-
class
|
|
152
|
+
class OsmGraphEdge extends GraphEdge {
|
|
153
153
|
}
|
|
154
154
|
class OsmGraphItinerary extends GraphItinerary {
|
|
155
155
|
static fromNetworkNodes(start, end, networkNodes, edgesWeights) {
|
|
@@ -193,7 +193,7 @@ function createNodesAndEdgesFromElevator(nodes, edges, elevatorNode) {
|
|
|
193
193
|
const getOrCreateLevelNode = (level, builtFrom) => {
|
|
194
194
|
let levelNode = createdNodes.find(({ coords }) => Level.equals(level, coords.level));
|
|
195
195
|
if (!levelNode) {
|
|
196
|
-
levelNode = new OsmGraphNode
|
|
196
|
+
levelNode = new OsmGraphNode(elevatorNode.coords.clone(), builtFrom);
|
|
197
197
|
levelNode.coords.level = level;
|
|
198
198
|
createdNodes.push(levelNode);
|
|
199
199
|
nodes.push(levelNode);
|
|
@@ -221,7 +221,7 @@ function createNodesAndEdgesFromElevator(nodes, edges, elevatorNode) {
|
|
|
221
221
|
}
|
|
222
222
|
const minLevel = Math.min(createdNode1.coords.level, createdNode2.coords.level);
|
|
223
223
|
const maxLevel = Math.max(createdNode1.coords.level, createdNode2.coords.level);
|
|
224
|
-
const newEdge = new
|
|
224
|
+
const newEdge = new OsmGraphEdge(
|
|
225
225
|
createdNode1,
|
|
226
226
|
createdNode2,
|
|
227
227
|
[minLevel, maxLevel],
|
|
@@ -243,7 +243,7 @@ function createNetworkFromOsmModel(osmModel, waySelectionFilter = DEFAULT_WAY_SE
|
|
|
243
243
|
const getOrCreateNode = (osmNode) => {
|
|
244
244
|
let node = nodesCreated[osmNode.id];
|
|
245
245
|
if (!node) {
|
|
246
|
-
node = new OsmGraphNode
|
|
246
|
+
node = new OsmGraphNode(osmNode.coords, osmNode);
|
|
247
247
|
nodesCreated[osmNode.id] = node;
|
|
248
248
|
nodes.push(node);
|
|
249
249
|
if (osmNode.tags.highway === "elevator") {
|
|
@@ -259,7 +259,7 @@ function createNetworkFromOsmModel(osmModel, waySelectionFilter = DEFAULT_WAY_SE
|
|
|
259
259
|
let firstNode = getOrCreateNode(way.nodes[0]);
|
|
260
260
|
for (let i = 1; i < way.nodes.length; i++) {
|
|
261
261
|
const secondNode = getOrCreateNode(way.nodes[i]);
|
|
262
|
-
const edge = new
|
|
262
|
+
const edge = new OsmGraphEdge(firstNode, secondNode, way.level, way);
|
|
263
263
|
manageOneWay(edge, way);
|
|
264
264
|
edges.push(edge);
|
|
265
265
|
firstNode = secondNode;
|
|
@@ -269,7 +269,7 @@ function createNetworkFromOsmModel(osmModel, waySelectionFilter = DEFAULT_WAY_SE
|
|
|
269
269
|
createNodesAndEdgesFromElevator(nodes, edges, node);
|
|
270
270
|
});
|
|
271
271
|
const networkModel = new OsmNetwork(nodes, edges);
|
|
272
|
-
OsmGraphNode
|
|
272
|
+
OsmGraphNode.generateNodesLevels(networkModel.nodes);
|
|
273
273
|
return networkModel;
|
|
274
274
|
}
|
|
275
275
|
const OsmNetworkUtils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
@@ -282,9 +282,9 @@ const OsmNetworkUtils = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.def
|
|
|
282
282
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
283
283
|
export {
|
|
284
284
|
OsmElement,
|
|
285
|
-
|
|
285
|
+
OsmGraphEdge,
|
|
286
286
|
OsmGraphItinerary,
|
|
287
|
-
OsmGraphNode
|
|
287
|
+
OsmGraphNode,
|
|
288
288
|
OsmGraphProjection,
|
|
289
289
|
OsmGraphRouter,
|
|
290
290
|
OsmGraphRouterOptions,
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmParser.ts","../src/graph/OsmGraphNode.ts","../src/graph/OsmGraphEdge.ts","../src/graph/OsmGraphItinerary.ts","../src/graph/OsmNetwork.ts","../src/graph/OsmGraphProjection.ts","../src/graph/OsmGraphRouter.ts","../src/graph/OsmGraphRouterOptions.ts","../src/graph/OsmMapMatching.ts","../src/graph/OsmNetworkUtils.ts"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n}\n\nexport default OsmModel;\n","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n coords : Coordinates;\n ways: OsmWay[] = [];\n\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import { Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n }\n\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isArea() {\n // That is not the real definition for OSM\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n}\n\nexport default OsmWay;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport {\n Level, Coordinates\n} from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes as OsmXmlNode);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k] = v;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n for (let i = 0; i < model.ways.length; i++) {\n const way = model.ways[i];\n if (way.tags.level) {\n way.level = Level.fromString(way.tags.level);\n }\n }\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { GraphNode } from \"@wemap/geo\";\nimport OsmNode from \"../OsmNode\";\nimport OsmWay from \"../OsmWay\";\n\nexport default class OsmGraphNode extends GraphNode<OsmNode, OsmNode | OsmWay>{ }","import { GraphEdge } from \"@wemap/geo\";\nimport OsmNode from \"../OsmNode\";\nimport OsmWay from \"../OsmWay\";\n\nexport default class OsmGraphNode extends GraphEdge<OsmNode | OsmWay, OsmNode>{ }","import { Coordinates, GraphItinerary, GraphNode } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphItinerary extends GraphItinerary<N, E>{ \n\n static fromNetworkNodes<A = N, B = E>(\n start: Coordinates, end: Coordinates,\n networkNodes: GraphNode<A, B>[], edgesWeights: number[]\n ) {\n return super.fromNetworkNodes(start, end, networkNodes, edgesWeights) as GraphItinerary<A, B>;\n }\n}\n","import { Coordinates, Network } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmNetwork extends Network<N, E>{\n static fromCoordinates<A = N, B = E>(segments: Coordinates[][]) {\n return super.fromCoordinates<N, E>(segments) as Network<A, B>;\n }\n}","import { GraphProjection } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphProjection extends GraphProjection<N, E>{ }\n","import { GraphRouter } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphRouter extends GraphRouter<N, E>{ }\n","import { GraphRouterOptions } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphRouterOptions extends GraphRouterOptions<N, E>{ }\n","import { MapMatching } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmMapMatching extends MapMatching<N, E>{ }\n","import { Level } from '@wemap/geo';\nimport OsmGraphNode from './OsmGraphNode';\nimport OsmGraphEdge from './OsmGraphEdge';\nimport OsmModel from '../OsmModel';\nimport OsmNode from '../OsmNode';\nimport OsmWay from '../OsmWay';\nimport OsmNetwork from './OsmNetwork';\n\nexport type N = OsmNode;\nexport type E = OsmNode | OsmWay;\n\nexport const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk', 'elevator'];\n\nexport const DEFAULT_WAY_SELECTOR = (way: OsmWay) => {\n return HIGHWAYS_PEDESTRIANS.includes(way.tags.highway)\n || way.tags.footway === 'sidewalk'\n || way.tags.public_transport === 'platform'\n || way.tags.railway === 'platform';\n};\n\nexport function getNodeByName(network: OsmNetwork, name: string) {\n return network.nodes.find(({ builtFrom }) => builtFrom?.tags.name === name);\n}\n\nexport function getEdgeByName(network: OsmNetwork, name: string) {\n return network.edges.find(({ builtFrom }) => builtFrom?.tags.name === name);\n}\n\nfunction manageOneWay(edge: OsmGraphEdge, way: OsmWay) {\n\n const { highway, oneway, conveying } = way.tags;\n\n edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n\n if (edge.isOneway && conveying === 'backward') {\n const tmpNode = edge.node1;\n edge.node1 = edge.node2;\n edge.node2 = tmpNode;\n }\n}\n\n\nfunction createNodesAndEdgesFromElevator(\n nodes: OsmGraphNode[],\n edges: OsmGraphEdge[],\n elevatorNode: OsmGraphNode\n) {\n\n const createdNodes: OsmGraphNode[] = [];\n const getOrCreateLevelNode = (level: number | null, builtFrom: N | null) => {\n let levelNode = createdNodes.find(({ coords }) => Level.equals(level, coords.level));\n if (!levelNode) {\n levelNode = new OsmGraphNode(elevatorNode.coords.clone(), builtFrom);\n levelNode.coords.level = level;\n createdNodes.push(levelNode);\n nodes.push(levelNode);\n }\n return levelNode;\n };\n\n // Create nodes from node.edges\n elevatorNode.edges.forEach(edge => {\n if (Level.isRange(edge.level)) {\n throw new Error('Cannot handle this elevator edge due to ambiguity');\n }\n\n const levelNode = getOrCreateLevelNode(edge.level, elevatorNode.builtFrom);\n if (edge.node1 === elevatorNode) {\n edge.node1 = levelNode;\n } else {\n edge.node2 = levelNode;\n }\n levelNode.edges.push(edge);\n });\n\n // Create edges from createdNodes\n for (let i = 0; i < createdNodes.length; i++) {\n for (let j = i + 1; j < createdNodes.length; j++) {\n\n const createdNode1 = createdNodes[i];\n const createdNode2 = createdNodes[j];\n\n if (createdNode1.coords.level === null || createdNode2.coords.level === null) {\n // TODO: not the best approach... but cannot do better with [number, number] range for levels\n continue;\n }\n\n const minLevel = Math.min(createdNode1.coords.level as number, createdNode2.coords.level as number);\n const maxLevel = Math.max(createdNode1.coords.level as number, createdNode2.coords.level as number);\n\n const newEdge = new OsmGraphEdge(\n createdNode1,\n createdNode2,\n [minLevel, maxLevel],\n elevatorNode.builtFrom\n );\n edges.push(newEdge);\n }\n }\n\n // Remove the historical elevator node from the network\n const elevatorNodeIndex = nodes.indexOf(elevatorNode);\n if (elevatorNodeIndex > -1) {\n nodes.splice(elevatorNodeIndex, 1);\n }\n}\n\nexport function createNetworkFromOsmModel(\n osmModel: OsmModel,\n waySelectionFilter = DEFAULT_WAY_SELECTOR\n) {\n\n const nodes: OsmGraphNode[] = [];\n const edges: OsmGraphEdge[] = [];\n\n const nodesCreated: { [key: number]: OsmGraphNode } = {};\n const elevatorNodes: OsmGraphNode[] = [];\n\n const getOrCreateNode = (osmNode: OsmNode) => {\n let node = nodesCreated[osmNode.id];\n if (!node) {\n node = new OsmGraphNode(osmNode.coords, osmNode);\n nodesCreated[osmNode.id] = node;\n nodes.push(node);\n\n if (osmNode.tags.highway === 'elevator') {\n elevatorNodes.push(node);\n }\n }\n return node;\n };\n\n osmModel.ways.forEach(way => {\n if (!waySelectionFilter(way)) {\n return;\n }\n\n let firstNode = getOrCreateNode(way.nodes[0]);\n for (let i = 1; i < way.nodes.length; i++) {\n const secondNode = getOrCreateNode(way.nodes[i]);\n\n const edge = new OsmGraphEdge(firstNode, secondNode, way.level, way);\n manageOneWay(edge, way);\n edges.push(edge);\n firstNode = secondNode;\n }\n\n });\n\n elevatorNodes.forEach(node => {\n // We have to clone this node for each connected edge\n createNodesAndEdgesFromElevator(nodes, edges, node);\n });\n\n const networkModel = new OsmNetwork(nodes, edges);\n\n OsmGraphNode.generateNodesLevels(networkModel.nodes);\n\n return networkModel;\n}\n\n\n// /**\n// * @param {GraphNode} node\n// * @param {object} tags\n// */\n// static _applyNodePropertiesFromTags(node, tags) {\n// node.name = tags.name || null;\n// node.subwayEntrance = tags.railway === 'subway_entrance';\n// if (node.subwayEntrance && tags.ref) {\n// node.subwayEntranceRef = tags.ref;\n// }\n// }\n\n// /**\n// * @param {GraphEdge} edge\n// * @param {object} tags\n// */\n// static _applyEdgePropertiesFromTags(edge, tags) {\n// const { highway, oneway, conveying, name } = tags;\n// edge.name = name || null;\n// edge.isStairs = highway === 'steps';\n// edge.isConveying = 'conveying' in tags;\n// edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n// || (conveying && highway && ['yes', 'forward', 'backward'].includes(conveying)));\n\n// if (conveying === 'backward') {\n// const tmpNode = edge.node1;\n// edge.node1 = edge.node2;\n// edge.node2 = tmpNode;\n// }\n\n// }\n"],"names":["OsmGraphNode","OsmGraphEdge"],"mappings":";;;;;;;;AAGA,MAAM,WAAW;AAAA,EAKb,YAAY,IAAY,MAAgB;AAHxC;AACA;AAGI,SAAK,KAAK;AACL,SAAA,OAAO,QAAQ;EACxB;AACJ;ACTA,MAAM,SAAS;AAAA,EAKX,YAAY,OAAmB,MAAiB;AAHhD;AACA;AAGS,SAAA,QAAQ,SAAS;AACjB,SAAA,OAAO,QAAQ;EACxB;AAAA,EAEA,YAAY,IAAY;AACpB,WAAO,KAAK,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAE,KAAK;AAAA,EACtD;AAAA,EAEA,cAAc,MAAc;AACjB,WAAA,KAAK,MAAM,KAAK,CAAA,SAAQ,KAAK,KAAK,SAAS,IAAI,KAAK;AAAA,EAC/D;AAAA,EAEA,WAAW,IAAY;AACnB,WAAO,KAAK,KAAK,KAAK,SAAO,IAAI,OAAO,EAAE,KAAK;AAAA,EACnD;AAAA,EAEA,aAAa,MAAc;AAChB,WAAA,KAAK,KAAK,KAAK,CAAA,QAAO,IAAI,KAAK,SAAS,IAAI,KAAK;AAAA,EAC5D;AAEJ;ACxBA,MAAM,gBAAgB,WAAW;AAAA,EAM7B,YAAY,IAAY,QAAqB,MAAgB;AACzD,UAAM,IAAI,IAAI;AALlB;AACA,gCAAiB,CAAA;AAKb,SAAK,SAAS;AAAA,EAClB;AAAA,EAEA,IAAI,aAAa;AACN,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK;AAAA,EAChB;AACJ;ACnBA,MAAM,eAAe,WAAW;AAAA,EAK5B,YAAY,IAAY,MAAgB,QAAiB,MAAM;AAC3D,UAAM,IAAI,IAAI;AAJlB,iCAAmB,CAAA;AACnB,iCAAiB;AAIb,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,IAAI,YAAY;AACL,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,cAAc;AACP,WAAA,KAAK,KAAK,eAAe,WAAW;AAAA,EAC/C;AAAA,EAEA,IAAI,cAAc;AACP,WAAA,KAAK,aAAa,KAAK;AAAA,EAClC;AAAA,EAEA,IAAI,kBAAkB;AACX,WAAA,CAAC,KAAK,aAAa,KAAK;AAAA,EACnC;AAAA,EAEA,IAAI,aAAa;AACN,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,SAAS;AAET,WAAO,KAAK,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,SAAS;AAAA,EAC5D;AACJ;ACvBA,MAAM,UAAU;AAAA,EAEZ,OAAO,kBAAkB,cAAsB;AAErC,UAAA,QAAQ,IAAI;AACZ,UAAA,SAAS,IAAI;AAEf,QAAA;AAEE,UAAA,YAAY,CAAC,YACf,QAAQ,WAAW,UAAU,QAAQ,WAAW,WAAW;AAExD,WAAA,GAAG,WAAW,CAAC,SAAS;AAE3B,cAAQ,KAAK,MAAM;AAAA,QACf,KAAK,QAAQ;AACL,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,UAAU,KAAK,WAAW,KAAK,UAAwB;AACpD,mBAAA;AACH,gBAAA,MAAM,KAAK,OAAO;AACxB;AAAA,QACJ;AAAA,QACA,KAAK,OAAO;AACJ,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,SAAS,KAAK,UAAU,KAAK,UAAuB;AACjD,mBAAA;AACH,gBAAA,KAAK,KAAK,MAAM;AACtB;AAAA,QACJ;AAAA,QACA,KAAK,OAAO;AACR,cAAI,CAAC,QAAQ;AACT;AAAA,UACJ;AACM,gBAAA;AAAA,YACF;AAAA,YAAG;AAAA,UAAA,IACH,KAAK;AACT,iBAAO,KAAK,KAAK;AACjB;AAAA,QACJ;AAAA,QACA,KAAK,MAAM;AACP,cAAI,CAAC,UAAU,EAAE,kBAAkB,SAAS;AACxC;AAAA,UACJ;AACA,gBAAM,SAAS,OAAO,KAAK,WAAW,GAAG;AACnC,gBAAA,UAAU,MAAM,YAAY,MAAM;AACxC,cAAI,CAAC,SAAS;AACV,kBAAM,MAAM,WAAW,SAAS,aAAa,OAAO,KAAK,YAAY;AAAA,UACzE;AAEO,iBAAA,MAAM,KAAK,OAAO;AACjB,kBAAA,KAAK,KAAK,MAAM;AACxB;AAAA,QACJ;AAAA,MACJ;AAAA,IAAA,CACH;AAED,WAAO,MAAM,YAAY;AAEzB,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,QAAQ,KAAK;AAClC,YAAA,MAAM,MAAM,KAAK;AACnB,UAAA,IAAI,KAAK,OAAO;AAChB,YAAI,QAAQ,MAAM,WAAW,IAAI,KAAK,KAAK;AAAA,MAC/C;AAAA,IACJ;AAEO,WAAA;AAAA,EACX;AAAA,EAGA,OAAO,WAAW,MAAkB;AAChC,WAAO,IAAI;AAAA,MACP,OAAO,KAAK,EAAE;AAAA,MACd,IAAI,YAAY,OAAO,KAAK,GAAG,GAAG,OAAO,KAAK,GAAG,CAAC;AAAA,IAAA;AAAA,EAC1D;AAAA,EAEA,OAAO,UAAU,MAAsB;AACnC,WAAO,IAAI,OAAO,OAAO,KAAK,EAAE,CAAC;AAAA,EACrC;AACJ;AC/FA,MAAqBA,uBAAqB,UAAoC;AAAE;ACAhF,MAAqB,qBAAqB,UAAoC;AAAE;ACAhF,MAAqB,0BAA0B,eAAoB;AAAA,EAE/D,OAAO,iBACH,OAAoB,KACpB,cAAiC,cACnC;AACE,WAAO,MAAM,iBAAiB,OAAO,KAAK,cAAc,YAAY;AAAA,EACxE;AACJ;ACRA,MAAqB,mBAAmB,QAAa;AAAA,EACjD,OAAO,gBAA8B,UAA2B;AACrD,WAAA,MAAM,gBAAsB,QAAQ;AAAA,EAC/C;AACJ;ACJA,MAAqB,2BAA2B,gBAAqB;AAAE;ACAvE,MAAqB,uBAAuB,YAAiB;AAAE;ACA/D,MAAqB,8BAA8B,mBAAwB;AAAE;ACA7E,MAAqB,uBAAuB,YAAiB;AAAE;ACOlD,MAAA,uBAAuB,CAAC,WAAW,SAAS,cAAc,iBAAiB,QAAQ,SAAS,YAAY,UAAU;AAElH,MAAA,uBAAuB,CAAC,QAAgB;AACjD,SAAO,qBAAqB,SAAS,IAAI,KAAK,OAAO,KAC9C,IAAI,KAAK,YAAY,cACrB,IAAI,KAAK,qBAAqB,cAC9B,IAAI,KAAK,YAAY;AAChC;AAEgB,SAAA,cAAc,SAAqB,MAAc;AACtD,SAAA,QAAQ,MAAM,KAAK,CAAC,EAAE,iBAAgB,uCAAW,KAAK,UAAS,IAAI;AAC9E;AAEgB,SAAA,cAAc,SAAqB,MAAc;AACtD,SAAA,QAAQ,MAAM,KAAK,CAAC,EAAE,iBAAgB,uCAAW,KAAK,UAAS,IAAI;AAC9E;AAEA,SAAS,aAAa,MAAoB,KAAa;AAEnD,QAAM,EAAE,SAAS,QAAQ,UAAA,IAAc,IAAI;AAE3C,OAAK,WAAW,QAAS,WAAW,SAAS,WAAW,UAAU,WAAW,OACrE,aAAa,WAAW,CAAC,WAAW,UAAU,EAAE,SAAS,SAAS,CAAE;AAExE,MAAA,KAAK,YAAY,cAAc,YAAY;AAC3C,UAAM,UAAU,KAAK;AACrB,SAAK,QAAQ,KAAK;AAClB,SAAK,QAAQ;AAAA,EACjB;AACJ;AAGA,SAAS,gCACL,OACA,OACA,cACF;AAEE,QAAM,eAA+B,CAAA;AAC/B,QAAA,uBAAuB,CAAC,OAAsB,cAAwB;AACxE,QAAI,YAAY,aAAa,KAAK,CAAC,EAAE,OAAA,MAAa,MAAM,OAAO,OAAO,OAAO,KAAK,CAAC;AACnF,QAAI,CAAC,WAAW;AACZ,kBAAY,IAAIA,eAAa,aAAa,OAAO,MAAA,GAAS,SAAS;AACnE,gBAAU,OAAO,QAAQ;AACzB,mBAAa,KAAK,SAAS;AAC3B,YAAM,KAAK,SAAS;AAAA,IACxB;AACO,WAAA;AAAA,EAAA;AAIE,eAAA,MAAM,QAAQ,CAAQ,SAAA;AAC/B,QAAI,MAAM,QAAQ,KAAK,KAAK,GAAG;AACrB,YAAA,IAAI,MAAM,mDAAmD;AAAA,IACvE;AAEA,UAAM,YAAY,qBAAqB,KAAK,OAAO,aAAa,SAAS;AACrE,QAAA,KAAK,UAAU,cAAc;AAC7B,WAAK,QAAQ;AAAA,IAAA,OACV;AACH,WAAK,QAAQ;AAAA,IACjB;AACU,cAAA,MAAM,KAAK,IAAI;AAAA,EAAA,CAC5B;AAGD,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,aAAS,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAE9C,YAAM,eAAe,aAAa;AAClC,YAAM,eAAe,aAAa;AAElC,UAAI,aAAa,OAAO,UAAU,QAAQ,aAAa,OAAO,UAAU,MAAM;AAE1E;AAAA,MACJ;AAEM,YAAA,WAAW,KAAK,IAAI,aAAa,OAAO,OAAiB,aAAa,OAAO,KAAe;AAC5F,YAAA,WAAW,KAAK,IAAI,aAAa,OAAO,OAAiB,aAAa,OAAO,KAAe;AAElG,YAAM,UAAU,IAAIC;AAAAA,QAChB;AAAA,QACA;AAAA,QACA,CAAC,UAAU,QAAQ;AAAA,QACnB,aAAa;AAAA,MAAA;AAEjB,YAAM,KAAK,OAAO;AAAA,IACtB;AAAA,EACJ;AAGM,QAAA,oBAAoB,MAAM,QAAQ,YAAY;AACpD,MAAI,oBAAoB,IAAI;AAClB,UAAA,OAAO,mBAAmB,CAAC;AAAA,EACrC;AACJ;AAEgB,SAAA,0BACZ,UACA,qBAAqB,sBACvB;AAEE,QAAM,QAAwB,CAAA;AAC9B,QAAM,QAAwB,CAAA;AAE9B,QAAM,eAAgD,CAAA;AACtD,QAAM,gBAAgC,CAAA;AAEhC,QAAA,kBAAkB,CAAC,YAAqB;AACtC,QAAA,OAAO,aAAa,QAAQ;AAChC,QAAI,CAAC,MAAM;AACP,aAAO,IAAID,eAAa,QAAQ,QAAQ,OAAO;AAC/C,mBAAa,QAAQ,MAAM;AAC3B,YAAM,KAAK,IAAI;AAEX,UAAA,QAAQ,KAAK,YAAY,YAAY;AACrC,sBAAc,KAAK,IAAI;AAAA,MAC3B;AAAA,IACJ;AACO,WAAA;AAAA,EAAA;AAGF,WAAA,KAAK,QAAQ,CAAO,QAAA;AACrB,QAAA,CAAC,mBAAmB,GAAG,GAAG;AAC1B;AAAA,IACJ;AAEA,QAAI,YAAY,gBAAgB,IAAI,MAAM,EAAE;AAC5C,aAAS,IAAI,GAAG,IAAI,IAAI,MAAM,QAAQ,KAAK;AACvC,YAAM,aAAa,gBAAgB,IAAI,MAAM,EAAE;AAE/C,YAAM,OAAO,IAAIC,aAAa,WAAW,YAAY,IAAI,OAAO,GAAG;AACnE,mBAAa,MAAM,GAAG;AACtB,YAAM,KAAK,IAAI;AACH,kBAAA;AAAA,IAChB;AAAA,EAAA,CAEH;AAED,gBAAc,QAAQ,CAAQ,SAAA;AAEM,oCAAA,OAAO,OAAO,IAAI;AAAA,EAAA,CACrD;AAED,QAAM,eAAe,IAAI,WAAW,OAAO,KAAK;AAEnCD,iBAAA,oBAAoB,aAAa,KAAK;AAE5C,SAAA;AACX;;;;;;;;;"}
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/OsmElement.ts","../src/OsmModel.ts","../src/OsmNode.ts","../src/OsmWay.ts","../src/OsmParser.ts","../src/graph/OsmGraphNode.ts","../src/graph/OsmGraphEdge.ts","../src/graph/OsmGraphItinerary.ts","../src/graph/OsmNetwork.ts","../src/graph/OsmGraphProjection.ts","../src/graph/OsmGraphRouter.ts","../src/graph/OsmGraphRouterOptions.ts","../src/graph/OsmMapMatching.ts","../src/graph/OsmNetworkUtils.ts"],"sourcesContent":["\nexport type OsmTags = { [key: string]: string };\n\nclass OsmElement {\n\n id: number;\n tags: OsmTags;\n\n constructor(id: number, tags?: OsmTags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n nodes: OsmNode[];\n ways: OsmWay[];\n\n constructor(nodes?: OsmNode[], ways?: OsmWay[]) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n }\n\n getNodeById(id: number) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n getNodeByName(name: string) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n getWayById(id: number) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n getWayByName(name: string) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n}\n\nexport default OsmModel;\n","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n coords : Coordinates;\n ways: OsmWay[] = [];\n\n\n constructor(id: number, coords: Coordinates, tags?: OsmTags) {\n super(id, tags);\n this.coords = coords;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import { Level_t } from '@wemap/geo';\nimport OsmElement, { OsmTags } from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\n\nclass OsmWay extends OsmElement {\n\n nodes: OsmNode[] = [];\n level: Level_t = null;\n\n constructor(id: number, tags?: OsmTags, level: Level_t = null) {\n super(id, tags);\n this.level = level;\n }\n\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n get isArea() {\n // That is not the real definition for OSM\n return this.nodes[0] === this.nodes[this.nodes.length - 1];\n }\n}\n\nexport default OsmWay;\n","/* eslint-disable max-statements */\nimport { SaxesParser } from 'saxes';\n\nimport {\n Level, Coordinates\n} from '@wemap/geo';\n\nimport OsmModel from './OsmModel.js';\nimport OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\ntype OsmXmlElement = { action?: 'delete' };\ntype OsmXmlNode = { id: string, lat: string, lon: string } & OsmXmlElement;\ntype OsmXmlWay = { id: string } & OsmXmlElement;\n\nclass OsmParser {\n\n static parseOsmXmlString(osmXmlString: string) {\n\n const model = new OsmModel();\n const parser = new SaxesParser();\n\n let buffer: OsmNode | OsmWay | null;\n\n const isDeleted = (element: { attributes: OsmXmlElement }) =>\n element.attributes.action && element.attributes.action === 'delete';\n\n parser.on('opentag', (node) => {\n\n switch (node.name) {\n case 'node': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmNode = this._parseNode(node.attributes as OsmXmlNode);\n buffer = osmNode;\n model.nodes.push(osmNode);\n break;\n }\n case 'way': {\n if (isDeleted(node)) {\n buffer = null;\n break;\n }\n const osmWay = this._parseWay(node.attributes as OsmXmlWay);\n buffer = osmWay;\n model.ways.push(osmWay);\n break;\n }\n case 'tag': {\n if (!buffer) {\n return;\n }\n const {\n k, v\n } = node.attributes;\n buffer.tags[k] = v;\n break;\n }\n case 'nd': {\n if (!buffer || !(buffer instanceof OsmWay)) {\n return;\n }\n const nodeId = Number(node.attributes.ref);\n const refNode = model.getNodeById(nodeId);\n if (!refNode) {\n throw Error('Node: ' + nodeId + ' in way ' + buffer.id + ' not found');\n }\n\n buffer.nodes.push(refNode);\n refNode.ways.push(buffer);\n break;\n }\n }\n });\n\n parser.write(osmXmlString);\n\n for (let i = 0; i < model.ways.length; i++) {\n const way = model.ways[i];\n if (way.tags.level) {\n way.level = Level.fromString(way.tags.level);\n }\n }\n\n return model;\n }\n\n\n static _parseNode(attr: OsmXmlNode) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr: { id: string }) {\n return new OsmWay(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { GraphNode } from \"@wemap/geo\";\nimport OsmNode from \"../OsmNode\";\nimport OsmWay from \"../OsmWay\";\n\nexport default class OsmGraphNode extends GraphNode<OsmNode, OsmNode | OsmWay>{ }","import { GraphEdge } from \"@wemap/geo\";\nimport OsmNode from \"../OsmNode\";\nimport OsmWay from \"../OsmWay\";\n\nexport default class OsmGraphEdge extends GraphEdge<OsmNode | OsmWay, OsmNode>{ }","import { Coordinates, GraphItinerary, GraphNode } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphItinerary extends GraphItinerary<N, E>{ \n\n static fromNetworkNodes<A = N, B = E>(\n start: Coordinates, end: Coordinates,\n networkNodes: GraphNode<A, B>[], edgesWeights: number[]\n ) {\n return super.fromNetworkNodes(start, end, networkNodes, edgesWeights) as GraphItinerary<A, B>;\n }\n}\n","import { Coordinates, Network } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmNetwork extends Network<N, E>{\n static fromCoordinates<A = N, B = E>(segments: Coordinates[][]) {\n return super.fromCoordinates<N, E>(segments) as Network<A, B>;\n }\n}","import { GraphProjection } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphProjection extends GraphProjection<N, E>{ }\n","import { GraphRouter } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphRouter extends GraphRouter<N, E>{ }\n","import { GraphRouterOptions } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmGraphRouterOptions extends GraphRouterOptions<N, E>{ }\n","import { MapMatching } from '@wemap/geo';\n\nimport { N, E } from './OsmNetworkUtils.js';\n\nexport default class OsmMapMatching extends MapMatching<N, E>{ }\n","import { Level } from '@wemap/geo';\nimport OsmGraphNode from './OsmGraphNode';\nimport OsmGraphEdge from './OsmGraphEdge';\nimport OsmModel from '../OsmModel';\nimport OsmNode from '../OsmNode';\nimport OsmWay from '../OsmWay';\nimport OsmNetwork from './OsmNetwork';\n\nexport type N = OsmNode;\nexport type E = OsmNode | OsmWay;\n\nexport const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk', 'elevator'];\n\nexport const DEFAULT_WAY_SELECTOR = (way: OsmWay) => {\n return HIGHWAYS_PEDESTRIANS.includes(way.tags.highway)\n || way.tags.footway === 'sidewalk'\n || way.tags.public_transport === 'platform'\n || way.tags.railway === 'platform';\n};\n\nexport function getNodeByName(network: OsmNetwork, name: string) {\n return network.nodes.find(({ builtFrom }) => builtFrom?.tags.name === name);\n}\n\nexport function getEdgeByName(network: OsmNetwork, name: string) {\n return network.edges.find(({ builtFrom }) => builtFrom?.tags.name === name);\n}\n\nfunction manageOneWay(edge: OsmGraphEdge, way: OsmWay) {\n\n const { highway, oneway, conveying } = way.tags;\n\n edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['forward', 'backward'].includes(conveying)));\n\n if (edge.isOneway && conveying === 'backward') {\n const tmpNode = edge.node1;\n edge.node1 = edge.node2;\n edge.node2 = tmpNode;\n }\n}\n\n\nfunction createNodesAndEdgesFromElevator(\n nodes: OsmGraphNode[],\n edges: OsmGraphEdge[],\n elevatorNode: OsmGraphNode\n) {\n\n const createdNodes: OsmGraphNode[] = [];\n const getOrCreateLevelNode = (level: number | null, builtFrom: N | null) => {\n let levelNode = createdNodes.find(({ coords }) => Level.equals(level, coords.level));\n if (!levelNode) {\n levelNode = new OsmGraphNode(elevatorNode.coords.clone(), builtFrom);\n levelNode.coords.level = level;\n createdNodes.push(levelNode);\n nodes.push(levelNode);\n }\n return levelNode;\n };\n\n // Create nodes from node.edges\n elevatorNode.edges.forEach(edge => {\n if (Level.isRange(edge.level)) {\n throw new Error('Cannot handle this elevator edge due to ambiguity');\n }\n\n const levelNode = getOrCreateLevelNode(edge.level, elevatorNode.builtFrom);\n if (edge.node1 === elevatorNode) {\n edge.node1 = levelNode;\n } else {\n edge.node2 = levelNode;\n }\n levelNode.edges.push(edge);\n });\n\n // Create edges from createdNodes\n for (let i = 0; i < createdNodes.length; i++) {\n for (let j = i + 1; j < createdNodes.length; j++) {\n\n const createdNode1 = createdNodes[i];\n const createdNode2 = createdNodes[j];\n\n if (createdNode1.coords.level === null || createdNode2.coords.level === null) {\n // TODO: not the best approach... but cannot do better with [number, number] range for levels\n continue;\n }\n\n const minLevel = Math.min(createdNode1.coords.level as number, createdNode2.coords.level as number);\n const maxLevel = Math.max(createdNode1.coords.level as number, createdNode2.coords.level as number);\n\n const newEdge = new OsmGraphEdge(\n createdNode1,\n createdNode2,\n [minLevel, maxLevel],\n elevatorNode.builtFrom\n );\n edges.push(newEdge);\n }\n }\n\n // Remove the historical elevator node from the network\n const elevatorNodeIndex = nodes.indexOf(elevatorNode);\n if (elevatorNodeIndex > -1) {\n nodes.splice(elevatorNodeIndex, 1);\n }\n}\n\nexport function createNetworkFromOsmModel(\n osmModel: OsmModel,\n waySelectionFilter = DEFAULT_WAY_SELECTOR\n) {\n\n const nodes: OsmGraphNode[] = [];\n const edges: OsmGraphEdge[] = [];\n\n const nodesCreated: { [key: number]: OsmGraphNode } = {};\n const elevatorNodes: OsmGraphNode[] = [];\n\n const getOrCreateNode = (osmNode: OsmNode) => {\n let node = nodesCreated[osmNode.id];\n if (!node) {\n node = new OsmGraphNode(osmNode.coords, osmNode);\n nodesCreated[osmNode.id] = node;\n nodes.push(node);\n\n if (osmNode.tags.highway === 'elevator') {\n elevatorNodes.push(node);\n }\n }\n return node;\n };\n\n osmModel.ways.forEach(way => {\n if (!waySelectionFilter(way)) {\n return;\n }\n\n let firstNode = getOrCreateNode(way.nodes[0]);\n for (let i = 1; i < way.nodes.length; i++) {\n const secondNode = getOrCreateNode(way.nodes[i]);\n\n const edge = new OsmGraphEdge(firstNode, secondNode, way.level, way);\n manageOneWay(edge, way);\n edges.push(edge);\n firstNode = secondNode;\n }\n\n });\n\n elevatorNodes.forEach(node => {\n // We have to clone this node for each connected edge\n createNodesAndEdgesFromElevator(nodes, edges, node);\n });\n\n const networkModel = new OsmNetwork(nodes, edges);\n\n OsmGraphNode.generateNodesLevels(networkModel.nodes);\n\n return networkModel;\n}\n\n\n// /**\n// * @param {GraphNode} node\n// * @param {object} tags\n// */\n// static _applyNodePropertiesFromTags(node, tags) {\n// node.name = tags.name || null;\n// node.subwayEntrance = tags.railway === 'subway_entrance';\n// if (node.subwayEntrance && tags.ref) {\n// node.subwayEntranceRef = tags.ref;\n// }\n// }\n\n// /**\n// * @param {GraphEdge} edge\n// * @param {object} tags\n// */\n// static _applyEdgePropertiesFromTags(edge, tags) {\n// const { highway, oneway, conveying, name } = tags;\n// edge.name = name || null;\n// edge.isStairs = highway === 'steps';\n// edge.isConveying = 'conveying' in tags;\n// edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n// || (conveying && highway && ['yes', 'forward', 'backward'].includes(conveying)));\n\n// if (conveying === 'backward') {\n// const tmpNode = edge.node1;\n// edge.node1 = edge.node2;\n// edge.node2 = tmpNode;\n// }\n\n// }\n"],"names":[],"mappings":";;;;;;;;AAGA,MAAM,WAAW;AAAA,EAKb,YAAY,IAAY,MAAgB;AAHxC;AACA;AAGI,SAAK,KAAK;AACL,SAAA,OAAO,QAAQ;EACxB;AACJ;ACTA,MAAM,SAAS;AAAA,EAKX,YAAY,OAAmB,MAAiB;AAHhD;AACA;AAGS,SAAA,QAAQ,SAAS;AACjB,SAAA,OAAO,QAAQ;EACxB;AAAA,EAEA,YAAY,IAAY;AACpB,WAAO,KAAK,MAAM,KAAK,UAAQ,KAAK,OAAO,EAAE,KAAK;AAAA,EACtD;AAAA,EAEA,cAAc,MAAc;AACjB,WAAA,KAAK,MAAM,KAAK,CAAA,SAAQ,KAAK,KAAK,SAAS,IAAI,KAAK;AAAA,EAC/D;AAAA,EAEA,WAAW,IAAY;AACnB,WAAO,KAAK,KAAK,KAAK,SAAO,IAAI,OAAO,EAAE,KAAK;AAAA,EACnD;AAAA,EAEA,aAAa,MAAc;AAChB,WAAA,KAAK,KAAK,KAAK,CAAA,QAAO,IAAI,KAAK,SAAS,IAAI,KAAK;AAAA,EAC5D;AAEJ;ACxBA,MAAM,gBAAgB,WAAW;AAAA,EAM7B,YAAY,IAAY,QAAqB,MAAgB;AACzD,UAAM,IAAI,IAAI;AALlB;AACA,gCAAiB,CAAA;AAKb,SAAK,SAAS;AAAA,EAClB;AAAA,EAEA,IAAI,aAAa;AACN,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,cAAc;AACd,WAAO,KAAK;AAAA,EAChB;AACJ;ACnBA,MAAM,eAAe,WAAW;AAAA,EAK5B,YAAY,IAAY,MAAgB,QAAiB,MAAM;AAC3D,UAAM,IAAI,IAAI;AAJlB,iCAAmB,CAAA;AACnB,iCAAiB;AAIb,SAAK,QAAQ;AAAA,EACjB;AAAA,EAEA,IAAI,YAAY;AACL,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,cAAc;AACP,WAAA,KAAK,KAAK,eAAe,WAAW;AAAA,EAC/C;AAAA,EAEA,IAAI,cAAc;AACP,WAAA,KAAK,aAAa,KAAK;AAAA,EAClC;AAAA,EAEA,IAAI,kBAAkB;AACX,WAAA,CAAC,KAAK,aAAa,KAAK;AAAA,EACnC;AAAA,EAEA,IAAI,aAAa;AACN,WAAA,KAAK,KAAK,YAAY;AAAA,EACjC;AAAA,EAEA,IAAI,SAAS;AAET,WAAO,KAAK,MAAM,OAAO,KAAK,MAAM,KAAK,MAAM,SAAS;AAAA,EAC5D;AACJ;ACvBA,MAAM,UAAU;AAAA,EAEZ,OAAO,kBAAkB,cAAsB;AAErC,UAAA,QAAQ,IAAI;AACZ,UAAA,SAAS,IAAI;AAEf,QAAA;AAEE,UAAA,YAAY,CAAC,YACf,QAAQ,WAAW,UAAU,QAAQ,WAAW,WAAW;AAExD,WAAA,GAAG,WAAW,CAAC,SAAS;AAE3B,cAAQ,KAAK,MAAM;AAAA,QACf,KAAK,QAAQ;AACL,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,UAAU,KAAK,WAAW,KAAK,UAAwB;AACpD,mBAAA;AACH,gBAAA,MAAM,KAAK,OAAO;AACxB;AAAA,QACJ;AAAA,QACA,KAAK,OAAO;AACJ,cAAA,UAAU,IAAI,GAAG;AACR,qBAAA;AACT;AAAA,UACJ;AACA,gBAAM,SAAS,KAAK,UAAU,KAAK,UAAuB;AACjD,mBAAA;AACH,gBAAA,KAAK,KAAK,MAAM;AACtB;AAAA,QACJ;AAAA,QACA,KAAK,OAAO;AACR,cAAI,CAAC,QAAQ;AACT;AAAA,UACJ;AACM,gBAAA;AAAA,YACF;AAAA,YAAG;AAAA,UAAA,IACH,KAAK;AACT,iBAAO,KAAK,KAAK;AACjB;AAAA,QACJ;AAAA,QACA,KAAK,MAAM;AACP,cAAI,CAAC,UAAU,EAAE,kBAAkB,SAAS;AACxC;AAAA,UACJ;AACA,gBAAM,SAAS,OAAO,KAAK,WAAW,GAAG;AACnC,gBAAA,UAAU,MAAM,YAAY,MAAM;AACxC,cAAI,CAAC,SAAS;AACV,kBAAM,MAAM,WAAW,SAAS,aAAa,OAAO,KAAK,YAAY;AAAA,UACzE;AAEO,iBAAA,MAAM,KAAK,OAAO;AACjB,kBAAA,KAAK,KAAK,MAAM;AACxB;AAAA,QACJ;AAAA,MACJ;AAAA,IAAA,CACH;AAED,WAAO,MAAM,YAAY;AAEzB,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,QAAQ,KAAK;AAClC,YAAA,MAAM,MAAM,KAAK;AACnB,UAAA,IAAI,KAAK,OAAO;AAChB,YAAI,QAAQ,MAAM,WAAW,IAAI,KAAK,KAAK;AAAA,MAC/C;AAAA,IACJ;AAEO,WAAA;AAAA,EACX;AAAA,EAGA,OAAO,WAAW,MAAkB;AAChC,WAAO,IAAI;AAAA,MACP,OAAO,KAAK,EAAE;AAAA,MACd,IAAI,YAAY,OAAO,KAAK,GAAG,GAAG,OAAO,KAAK,GAAG,CAAC;AAAA,IAAA;AAAA,EAC1D;AAAA,EAEA,OAAO,UAAU,MAAsB;AACnC,WAAO,IAAI,OAAO,OAAO,KAAK,EAAE,CAAC;AAAA,EACrC;AACJ;AC/FA,MAAqB,qBAAqB,UAAoC;AAAE;ACAhF,MAAqB,qBAAqB,UAAoC;AAAE;ACAhF,MAAqB,0BAA0B,eAAoB;AAAA,EAE/D,OAAO,iBACH,OAAoB,KACpB,cAAiC,cACnC;AACE,WAAO,MAAM,iBAAiB,OAAO,KAAK,cAAc,YAAY;AAAA,EACxE;AACJ;ACRA,MAAqB,mBAAmB,QAAa;AAAA,EACjD,OAAO,gBAA8B,UAA2B;AACrD,WAAA,MAAM,gBAAsB,QAAQ;AAAA,EAC/C;AACJ;ACJA,MAAqB,2BAA2B,gBAAqB;AAAE;ACAvE,MAAqB,uBAAuB,YAAiB;AAAE;ACA/D,MAAqB,8BAA8B,mBAAwB;AAAE;ACA7E,MAAqB,uBAAuB,YAAiB;AAAE;ACOlD,MAAA,uBAAuB,CAAC,WAAW,SAAS,cAAc,iBAAiB,QAAQ,SAAS,YAAY,UAAU;AAElH,MAAA,uBAAuB,CAAC,QAAgB;AACjD,SAAO,qBAAqB,SAAS,IAAI,KAAK,OAAO,KAC9C,IAAI,KAAK,YAAY,cACrB,IAAI,KAAK,qBAAqB,cAC9B,IAAI,KAAK,YAAY;AAChC;AAEgB,SAAA,cAAc,SAAqB,MAAc;AACtD,SAAA,QAAQ,MAAM,KAAK,CAAC,EAAE,iBAAgB,uCAAW,KAAK,UAAS,IAAI;AAC9E;AAEgB,SAAA,cAAc,SAAqB,MAAc;AACtD,SAAA,QAAQ,MAAM,KAAK,CAAC,EAAE,iBAAgB,uCAAW,KAAK,UAAS,IAAI;AAC9E;AAEA,SAAS,aAAa,MAAoB,KAAa;AAEnD,QAAM,EAAE,SAAS,QAAQ,UAAA,IAAc,IAAI;AAE3C,OAAK,WAAW,QAAS,WAAW,SAAS,WAAW,UAAU,WAAW,OACrE,aAAa,WAAW,CAAC,WAAW,UAAU,EAAE,SAAS,SAAS,CAAE;AAExE,MAAA,KAAK,YAAY,cAAc,YAAY;AAC3C,UAAM,UAAU,KAAK;AACrB,SAAK,QAAQ,KAAK;AAClB,SAAK,QAAQ;AAAA,EACjB;AACJ;AAGA,SAAS,gCACL,OACA,OACA,cACF;AAEE,QAAM,eAA+B,CAAA;AAC/B,QAAA,uBAAuB,CAAC,OAAsB,cAAwB;AACxE,QAAI,YAAY,aAAa,KAAK,CAAC,EAAE,OAAA,MAAa,MAAM,OAAO,OAAO,OAAO,KAAK,CAAC;AACnF,QAAI,CAAC,WAAW;AACZ,kBAAY,IAAI,aAAa,aAAa,OAAO,MAAA,GAAS,SAAS;AACnE,gBAAU,OAAO,QAAQ;AACzB,mBAAa,KAAK,SAAS;AAC3B,YAAM,KAAK,SAAS;AAAA,IACxB;AACO,WAAA;AAAA,EAAA;AAIE,eAAA,MAAM,QAAQ,CAAQ,SAAA;AAC/B,QAAI,MAAM,QAAQ,KAAK,KAAK,GAAG;AACrB,YAAA,IAAI,MAAM,mDAAmD;AAAA,IACvE;AAEA,UAAM,YAAY,qBAAqB,KAAK,OAAO,aAAa,SAAS;AACrE,QAAA,KAAK,UAAU,cAAc;AAC7B,WAAK,QAAQ;AAAA,IAAA,OACV;AACH,WAAK,QAAQ;AAAA,IACjB;AACU,cAAA,MAAM,KAAK,IAAI;AAAA,EAAA,CAC5B;AAGD,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC1C,aAAS,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAE9C,YAAM,eAAe,aAAa;AAClC,YAAM,eAAe,aAAa;AAElC,UAAI,aAAa,OAAO,UAAU,QAAQ,aAAa,OAAO,UAAU,MAAM;AAE1E;AAAA,MACJ;AAEM,YAAA,WAAW,KAAK,IAAI,aAAa,OAAO,OAAiB,aAAa,OAAO,KAAe;AAC5F,YAAA,WAAW,KAAK,IAAI,aAAa,OAAO,OAAiB,aAAa,OAAO,KAAe;AAElG,YAAM,UAAU,IAAI;AAAA,QAChB;AAAA,QACA;AAAA,QACA,CAAC,UAAU,QAAQ;AAAA,QACnB,aAAa;AAAA,MAAA;AAEjB,YAAM,KAAK,OAAO;AAAA,IACtB;AAAA,EACJ;AAGM,QAAA,oBAAoB,MAAM,QAAQ,YAAY;AACpD,MAAI,oBAAoB,IAAI;AAClB,UAAA,OAAO,mBAAmB,CAAC;AAAA,EACrC;AACJ;AAEgB,SAAA,0BACZ,UACA,qBAAqB,sBACvB;AAEE,QAAM,QAAwB,CAAA;AAC9B,QAAM,QAAwB,CAAA;AAE9B,QAAM,eAAgD,CAAA;AACtD,QAAM,gBAAgC,CAAA;AAEhC,QAAA,kBAAkB,CAAC,YAAqB;AACtC,QAAA,OAAO,aAAa,QAAQ;AAChC,QAAI,CAAC,MAAM;AACP,aAAO,IAAI,aAAa,QAAQ,QAAQ,OAAO;AAC/C,mBAAa,QAAQ,MAAM;AAC3B,YAAM,KAAK,IAAI;AAEX,UAAA,QAAQ,KAAK,YAAY,YAAY;AACrC,sBAAc,KAAK,IAAI;AAAA,MAC3B;AAAA,IACJ;AACO,WAAA;AAAA,EAAA;AAGF,WAAA,KAAK,QAAQ,CAAO,QAAA;AACrB,QAAA,CAAC,mBAAmB,GAAG,GAAG;AAC1B;AAAA,IACJ;AAEA,QAAI,YAAY,gBAAgB,IAAI,MAAM,EAAE;AAC5C,aAAS,IAAI,GAAG,IAAI,IAAI,MAAM,QAAQ,KAAK;AACvC,YAAM,aAAa,gBAAgB,IAAI,MAAM,EAAE;AAE/C,YAAM,OAAO,IAAI,aAAa,WAAW,YAAY,IAAI,OAAO,GAAG;AACnE,mBAAa,MAAM,GAAG;AACtB,YAAM,KAAK,IAAI;AACH,kBAAA;AAAA,IAChB;AAAA,EAAA,CAEH;AAED,gBAAc,QAAQ,CAAQ,SAAA;AAEM,oCAAA,OAAO,OAAO,IAAI;AAAA,EAAA,CACrD;AAED,QAAM,eAAe,IAAI,WAAW,OAAO,KAAK;AAEnC,eAAA,oBAAoB,aAAa,KAAK;AAE5C,SAAA;AACX;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"directory": "packages/osm"
|
|
13
13
|
},
|
|
14
14
|
"name": "@wemap/osm",
|
|
15
|
-
"version": "11.0.0-alpha.
|
|
15
|
+
"version": "11.0.0-alpha.16",
|
|
16
16
|
"bugs": {
|
|
17
17
|
"url": "https://github.com/wemap/wemap-modules-js/issues"
|
|
18
18
|
},
|
|
@@ -29,8 +29,8 @@
|
|
|
29
29
|
],
|
|
30
30
|
"license": "ISC",
|
|
31
31
|
"dependencies": {
|
|
32
|
-
"@wemap/geo": "^11.0.0-alpha.
|
|
33
|
-
"@wemap/logger": "^11.0.0-alpha.
|
|
32
|
+
"@wemap/geo": "^11.0.0-alpha.16",
|
|
33
|
+
"@wemap/logger": "^11.0.0-alpha.16",
|
|
34
34
|
"saxes": "^5.0.1"
|
|
35
35
|
},
|
|
36
36
|
"exports": {
|
|
@@ -39,5 +39,5 @@
|
|
|
39
39
|
"require": "./dist/index.js"
|
|
40
40
|
}
|
|
41
41
|
},
|
|
42
|
-
"gitHead": "
|
|
42
|
+
"gitHead": "bb39a15ffd47fdbc4450692734c07a7ba5090c67"
|
|
43
43
|
}
|
|
@@ -2,4 +2,4 @@ import { GraphEdge } from "@wemap/geo";
|
|
|
2
2
|
import OsmNode from "../OsmNode";
|
|
3
3
|
import OsmWay from "../OsmWay";
|
|
4
4
|
|
|
5
|
-
export default class
|
|
5
|
+
export default class OsmGraphEdge extends GraphEdge<OsmNode | OsmWay, OsmNode>{ }
|