@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 CHANGED
@@ -149,9 +149,9 @@ class OsmParser {
149
149
  return new OsmWay(Number(attr.id));
150
150
  }
151
151
  }
152
- class OsmGraphNode$1 extends geo.GraphNode {
152
+ class OsmGraphNode extends geo.GraphNode {
153
153
  }
154
- class OsmGraphNode extends geo.GraphEdge {
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$1(elevatorNode.coords.clone(), builtFrom);
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 OsmGraphNode(
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$1(osmNode.coords, osmNode);
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 OsmGraphNode(firstNode, secondNode, way.level, way);
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$1.generateNodesLevels(networkModel.nodes);
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 = OsmGraphNode;
286
+ exports.OsmGraphEdge = OsmGraphEdge;
287
287
  exports.OsmGraphItinerary = OsmGraphItinerary;
288
- exports.OsmGraphNode = OsmGraphNode$1;
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$1 extends GraphNode {
150
+ class OsmGraphNode extends GraphNode {
151
151
  }
152
- class OsmGraphNode extends GraphEdge {
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$1(elevatorNode.coords.clone(), builtFrom);
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 OsmGraphNode(
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$1(osmNode.coords, osmNode);
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 OsmGraphNode(firstNode, secondNode, way.level, way);
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$1.generateNodesLevels(networkModel.nodes);
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
- OsmGraphNode as OsmGraphEdge,
285
+ OsmGraphEdge,
286
286
  OsmGraphItinerary,
287
- OsmGraphNode$1 as OsmGraphNode,
287
+ OsmGraphNode,
288
288
  OsmGraphProjection,
289
289
  OsmGraphRouter,
290
290
  OsmGraphRouterOptions,
@@ -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":"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"}
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":"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"}
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",
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.15",
33
- "@wemap/logger": "^11.0.0-alpha.15",
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": "375928c186d4d20983d6e0d7cfb52274832e5a10"
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 OsmGraphNode extends GraphEdge<OsmNode | OsmWay, OsmNode>{ }
5
+ export default class OsmGraphEdge extends GraphEdge<OsmNode | OsmWay, OsmNode>{ }