@wemap/osm 5.1.7 → 5.1.10

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.
@@ -433,7 +433,7 @@ class Step {
433
433
  if (this.levelChange !== null) {
434
434
  output.levelChange = this.levelChange.toJson();
435
435
  }
436
- if (this.extras !== null) {
436
+ if (this.extras && Object.keys(this.extras).length !== 0) {
437
437
  output.extras = this.extras;
438
438
  }
439
439
  return output;
@@ -1294,7 +1294,7 @@ function itineraryToOsrmJson(itinerary) {
1294
1294
  }
1295
1295
  };
1296
1296
  if (step.levelChange !== null) {
1297
- jsonStep.levelChange = step.levelChange;
1297
+ jsonStep.levelChange = step.levelChange.toJson();
1298
1298
  }
1299
1299
  if (typeof step.extras === 'object' && Object.keys(step.extras).length !== 0) {
1300
1300
  jsonStep.extras = step.extras;
@@ -1348,7 +1348,7 @@ function parseJsonSteps$1(jsonSteps, legCoords) {
1348
1348
  step._idCoordsInLeg = idStepCoordsInLeg;
1349
1349
 
1350
1350
  step.name = jsonStep.name;
1351
- step.levelChange = jsonStep.levelChange ? jsonStep.levelChange : null;
1351
+ step.levelChange = jsonStep.levelChange ? LevelChange.fromJson(jsonStep.levelChange) : null;
1352
1352
 
1353
1353
  step.distance = jsonStep.distance;
1354
1354
  step.duration = jsonStep.duration;
@@ -1657,6 +1657,11 @@ class ItineraryInfoManager {
1657
1657
  /** @type {Itinerary} */
1658
1658
  set itinerary(itinerary) {
1659
1659
 
1660
+ if (itinerary === null) {
1661
+ this._itinerary = null;
1662
+ return;
1663
+ }
1664
+
1660
1665
  this._itinerary = itinerary;
1661
1666
  this._steps = itinerary.steps;
1662
1667
  this._network = itinerary.toNetwork();
@@ -1695,6 +1700,10 @@ class ItineraryInfoManager {
1695
1700
  */
1696
1701
  getInfo(position) {
1697
1702
 
1703
+ if (!this._itinerary) {
1704
+ return null;
1705
+ }
1706
+
1698
1707
  if (!(position instanceof Coordinates)) {
1699
1708
  return null;
1700
1709
  }
@@ -1 +1 @@
1
- {"version":3,"file":"wemap-osm.es.js","sources":["../src/model/OsmElement.js","../src/model/OsmWay.js","../src/model/OsmNode.js","../src/model/OsmModel.js","../src/model/OsmParser.js","../src/routers/custom/OsmRouterOptions.js","../src/routers/custom/OsmRouter.js","../src/routers/LevelChange.js","../src/routers/Step.js","../src/routers/Leg.js","../src/routers/Itinerary.js","../src/routers/custom/StepsGeneration.js","../src/routers/custom/OsmRouterUtils.js","../src/routers/custom/OsmNetworkUtils.js","../src/routers/RouterResponse.js","../src/routers/Utils.js","../src/routers/osrm/OsrmUtils.js","../src/routers/otp/OtpUtils.js","../src/routers/info/ItineraryInfo.js","../src/routers/info/ItineraryInfoManager.js"],"sourcesContent":["class OsmElement {\n\n /** @type {number|null} */\n id;\n\n /** @type {object} */\n tags;\n\n /**\n * @param {number} id\n * @param {object} tags\n */\n constructor(id, tags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import { Level } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\n\nclass OsmWay extends OsmElement {\n\n /** @type {OsmNode[]} */\n nodes = [];\n\n /** @type {?Level} */\n level = null;\n\n /**\n * @param {number} id\n * @param {object} tags\n * @param {?Level} level\n */\n constructor(id, tags, level) {\n super(id, tags);\n this.level = level || null;\n }\n\n /**\n * @returns {boolean}\n */\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n /**\n * @returns {boolean}\n */\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n /**\n * @returns {boolean}\n */\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n /**\n * @returns {boolean}\n */\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n /**\n * @returns {boolean}\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","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n /** @type {Coordinates} */\n coords = null;\n\n /** @type {OsmWay[]} */\n ways = [];\n\n /**\n * @param {number} id\n * @param {Coordinates} coords\n * @param {object} tags\n */\n constructor(id, coords, tags) {\n super(id, tags);\n this.coords = coords;\n }\n\n /**\n * @returns {boolean}\n */\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n /**\n * @returns {boolean}\n */\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n /** @type {OsmNode[]} */\n nodes;\n\n /** @type {OsmWay[]} */\n ways;\n\n /**\n * @param {OsmNode[]|undefined} nodes\n * @param {OsmWay[]|undefined} ways\n */\n constructor(nodes, ways) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n }\n\n /**\n * @param {number} id\n * @returns {OsmNode|null}\n */\n getNodeById(id) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n /**\n * @param {string} name\n * @returns {OsmNode|null}\n */\n getNodeByName(name) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n\n /**\n * @param {number} id\n * @returns {OsmWay|null}\n */\n getWayById(id) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n /**\n * @param {string} name\n * @returns {OsmWay|null}\n */\n getWayByName(name) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n}\n\nexport default OsmModel;\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\nclass OsmParser {\n\n /**\n * @param {string} osmXmlString\n * @returns {OsmModel}\n */\n static parseOsmXmlString(osmXmlString) {\n\n const model = new OsmModel();\n const parser = new SaxesParser(true);\n\n let buffer;\n\n const isDeleted = element => 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);\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);\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) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr) {\n return new OsmWay(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { GraphRouterOptions } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\n\nclass OsmRouterOptions extends GraphRouterOptions {\n\n /** @type {OsmRouterOptions} */\n static DEFAULT = new OsmRouterOptions();\n\n /**\n * @returns {OsmRouterOptions}\n */\n static get WITHOUT_STAIRS() {\n const options = new OsmRouterOptions();\n options.acceptEdgeFn = edge => edge.builtFrom.tags.highway !== 'steps';\n return options;\n }\n\n /**\n * Get route duration\n * @param {Number} speed in km/h\n */\n static getDurationFromLength(length, speed = 5) {\n return length / (speed * 1000 / 3600);\n }\n\n /** @type {function(GraphEdge<OsmElement>):boolean} */\n weightEdgeFn = edge => edge.builtFrom.isElevator ? 30 : OsmRouterOptions.getDurationFromLength(edge.length);\n\n\n}\n\nexport default OsmRouterOptions;\n","import { Coordinates, GraphItinerary, GraphRouter, Network } from '@wemap/geo';\n\nimport OsmRouterOptions from './OsmRouterOptions.js';\nimport OsmElement from '../../model/OsmElement.js';\n\nclass OsmRouter extends GraphRouter {\n\n /**\n * @param {!Network<OsmElement>} network\n */\n constructor(network) {\n super(network);\n }\n\n /**\n * @param {Coordinates} start\n * @param {Coordinates} end\n * @param {OsmRouterOptions} options\n * @returns {GraphItinerary<OsmElement>}\n */\n getShortestPath(start, end, options = new OsmRouterOptions()) {\n return super.getShortestPath(start, end, options);\n }\n\n}\n\nexport default OsmRouter;\n","import { Level, GraphNode, GraphUtils } from '@wemap/geo';\n\nimport OsmElement from '../model/OsmElement.js';\n\nclass LevelChange {\n\n /** @type {!string} [up|down] */\n direction;\n\n /** @type {!number} [-2, -1, 1, ...] */\n difference;\n\n /** @type {?string} [elevator|conveyor|stairs] */\n type = null;\n\n /**\n * @param {GraphNode<OsmElement>} firstNode\n * @param {GraphNode<OsmElement>} secondNode\n * @returns {LevelChange}\n */\n static fromTwoNodes(firstNode, secondNode) {\n\n const levelChange = new LevelChange();\n\n const edge = GraphUtils.getEdgeByNodes(firstNode.edges, firstNode, secondNode);\n\n if (edge.builtFrom.isElevator) {\n levelChange.type = 'elevator';\n } else if (edge.builtFrom.isConveying) {\n levelChange.type = 'conveyor';\n } else if (edge.builtFrom.areStairs) {\n levelChange.type = 'stairs';\n }\n\n levelChange.difference = Level.diff(firstNode.coords.level, secondNode.coords.level);\n levelChange.direction = levelChange.difference > 0 ? 'up' : 'down';\n\n return levelChange;\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n return {\n direction: this.direction,\n difference: this.difference,\n type: this.type\n };\n }\n\n /**\n * @param {object} json\n * @returns {LevelChange}\n */\n static fromJson(json) {\n const levelChange = new LevelChange();\n levelChange.direction = json.direction;\n levelChange.difference = json.difference;\n levelChange.type = json.type;\n return levelChange;\n }\n}\n\nexport default LevelChange;\n","import { Coordinates } from '@wemap/geo';\n\nimport LevelChange from './LevelChange.js';\n\nclass Step {\n\n /** @type {!boolean} */\n firstStep = false;\n\n /** @type {!boolean} */\n lastStep = false;\n\n /** @type {!number} */\n number;\n\n /** @type {!Coordinates} */\n coords = [];\n\n\n /** @type {!number} */\n angle;\n\n /** @type {!number} */\n previousBearing;\n\n /** @type {!number} */\n nextBearing;\n\n\n /** @type {!number} */\n distance;\n\n /** @type {?number} */\n duration = null;\n\n /** @type {?string} */\n name = null;\n\n\n /** @type {?LevelChange} */\n levelChange = null;\n\n /** @type {?{?subwayEntrance: boolean, ?subwayEntranceRef: string}} */\n extras = {};\n\n /** @type {!number} */\n _idCoordsInLeg = null;\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n number: this.number,\n coords: this.coords.toCompressedJson(),\n angle: this.angle,\n previousBearing: this.previousBearing,\n nextBearing: this.nextBearing,\n distance: this.distance,\n _idCoordsInLeg: this._idCoordsInLeg\n };\n if (this.firstStep) {\n output.firstStep = true;\n }\n if (this.lastStep) {\n output.lastStep = true;\n }\n if (this.duration !== null) {\n output.duration = this.duration;\n }\n if (this.name !== null) {\n output.name = this.name;\n }\n if (this.levelChange !== null) {\n output.levelChange = this.levelChange.toJson();\n }\n if (this.extras !== null) {\n output.extras = this.extras;\n }\n return output;\n }\n\n /**\n * @param {object} json\n * @returns {Step}\n */\n static fromJson(json) {\n const step = new Step();\n step.number = json.number;\n step.coords = Coordinates.fromCompressedJson(json.coords);\n step.angle = json.angle;\n step.previousBearing = json.previousBearing;\n step.nextBearing = json.nextBearing;\n step.distance = json.distance;\n step._idCoordsInLeg = json._idCoordsInLeg;\n if (json.firstStep) {\n step.firstStep = json.firstStep;\n }\n if (json.lastStep) {\n step.lastStep = json.lastStep;\n }\n if (json.duration) {\n step.duration = json.duration;\n }\n if (json.name) {\n step.name = json.name;\n }\n if (json.levelChange) {\n step.levelChange = LevelChange.fromJson(json.levelChange);\n }\n if (json.extras) {\n step.extras = json.extras;\n }\n return step;\n }\n}\n\nexport default Step;\n","import { Coordinates, Network } from '@wemap/geo';\n\nimport Step from './Step.js';\n\nclass Leg {\n\n /** @type {!string} can be WALK, BIKE, BUS, TRAM, CAR */\n mode;\n\n /** @type {!number} */\n distance;\n\n /** @type {!number} */\n duration;\n\n /** @type {?number} */\n startTime = null;\n\n /** @type {?number} */\n endTime = null;\n\n /** @type {!{name: ?string, coords: !Coordinates}} */\n from;\n\n /** @type {!{name: ?string, coords: !Coordinates}} */\n to;\n\n /** @type {!Coordinates[]} */\n coords;\n\n /** @type {?{name: !string, routeColor: ?string, routeTextColor: ?string, directionName: ?string}} */\n transportInfo = null;\n\n /** @type {?(Step[])} */\n steps = null;\n\n /**\n * @returns {Network}\n */\n toNetwork() {\n return Network.fromCoordinates([this.coords]);\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n mode: this.mode,\n from: { coords: this.from.coords.toCompressedJson() },\n to: { coords: this.to.coords.toCompressedJson() },\n distance: this.distance,\n duration: this.duration,\n coords: this.coords.map(coords => coords.toCompressedJson())\n };\n if (this.from.name) {\n output.from.name = this.from.name;\n }\n if (this.to.name) {\n output.to.name = this.to.name;\n }\n if (this.startTime !== null) {\n output.startTime = this.startTime;\n }\n if (this.endTime !== null) {\n output.endTime = this.endTime;\n }\n if (this.transportInfo !== null) {\n output.transportInfo = this.transportInfo;\n }\n if (this.steps !== null && this.steps.length > 0) {\n output.steps = this.steps.map(step => step.toJson());\n }\n return output;\n }\n\n\n /**\n * @param {object} json\n * @returns {Leg}\n */\n static fromJson(json) {\n const leg = new Leg();\n leg.mode = json.mode;\n leg.from = { coords: Coordinates.fromCompressedJson(json.from.coords) };\n leg.to = { coords: Coordinates.fromCompressedJson(json.to.coords) };\n leg.distance = json.distance;\n leg.duration = json.duration;\n leg.coords = json.coords.map(Coordinates.fromCompressedJson);\n if (json.from.name) {\n leg.from.name = json.from.name;\n }\n if (json.to.name) {\n leg.to.name = json.to.name;\n }\n if (json.startTime) {\n leg.startTime = json.startTime;\n }\n if (json.endTime) {\n leg.endTime = json.endTime;\n }\n if (json.transportInfo) {\n leg.transportInfo = json.transportInfo;\n }\n if (json.steps) {\n leg.steps = json.steps.map(Step.fromJson);\n }\n return leg;\n }\n\n}\n\nexport default Leg;\n","/* eslint-disable max-statements */\nimport { Coordinates, Network } from '@wemap/geo';\nimport Leg from './Leg.js';\nimport Step from './Step.js';\n\n/**\n * Main attributes are:\n * nodes: the ordered list of Node\n * edges: the ordered list of Edge\n * start: the start point (Coordinates)\n * end: the end point (Coordinates)\n * length: the route length\n */\nclass Itinerary {\n\n /** @type {!Coordinates} */\n from;\n\n /** @type {!Coordinates} */\n to;\n\n /** @type {!number} */\n distance;\n\n /** @type {!number} */\n duration;\n\n /** @type {?number} */\n startTime = null;\n\n /** @type {?number} */\n endTime = null;\n\n /** @type {!(Leg[])} */\n legs = [];\n\n /** @type {?Coordinates[]} */\n _coords = null;\n\n set coords(_) {\n throw new Error('Itinerary.coords cannot be set. They are calculated from Itinerary.legs.');\n }\n\n /** @type {!(Coordinates[])} */\n get coords() {\n if (!this._coords) {\n // Returns the coordinates contained in all legs and remove duplicates between array\n this._coords = this.legs.reduce((acc, val) => {\n const isDuplicate = acc.length && val.coords.length && acc[acc.length - 1].equalsTo(val.coords[0]);\n acc.push(...val.coords.slice(isDuplicate ? 1 : 0));\n return acc;\n }, []);\n }\n return this._coords;\n }\n\n set steps(_) {\n throw new Error('Itinerary.step cannot be set. They are calculated from Itinerary.legs.');\n }\n\n /** @type {!(Step[])} */\n get steps() {\n return this.legs.map(leg => leg.steps).flat();\n }\n\n /**\n * @returns {Network}\n */\n toNetwork() {\n return Network.fromCoordinates([this.coords]);\n }\n\n /**\n * @param {Itinerary[]} itineraries\n * @returns {Itinerary}\n */\n static fromItineraries(...itineraries) {\n const itinerary = new Itinerary();\n itinerary.from = itineraries[0].from;\n itinerary.to = itineraries[itineraries.length - 1].to;\n itinerary.distance = 0;\n itinerary.duration = 0;\n itinerary.legs = [];\n\n itineraries.forEach(_itinerary => {\n itinerary.distance += _itinerary.distance;\n itinerary.duration += _itinerary.duration;\n itinerary.legs.push(..._itinerary.legs);\n itinerary.legs.forEach(leg => {\n leg.steps[0].firstStep = false;\n leg.steps[leg.steps.length - 1].lastStep = false;\n });\n });\n\n itinerary.legs[0].steps[0].firstStep = true;\n const lastLeg = itinerary.legs[itinerary.legs.length - 1];\n lastLeg.steps[lastLeg.steps.length - 1].lastStep = true;\n\n return itinerary;\n }\n\n /**\n * Convert lat/lng/level points to Itinerary\n * @param {number[][]} points 2D points array of lat/lng/level (level is optional)\n * @param {Coordinates} from\n * @param {Coordinates} to\n * @param {string} mode\n * @returns {Itinerary}\n */\n static fromOrderedPointsArray(points, start, end) {\n\n const pointToCoordinates = point => new Coordinates(point[0], point[1], null, point[2]);\n\n return this.fromOrderedCoordinates(\n points.map(pointToCoordinates),\n pointToCoordinates(start),\n pointToCoordinates(end)\n );\n }\n\n /**\n * Convert ordered Coordinates to Itinerary\n * @param {Coordinates[]} points\n * @param {Coordinates} from\n * @param {Coordinates} to\n * @param {string} mode\n * @returns {Itinerary}\n */\n static fromOrderedCoordinates(points, from, to, mode = 'WALK') {\n\n const itinerary = new Itinerary();\n itinerary.from = from;\n itinerary.to = to;\n\n const leg = new Leg();\n leg.mode = mode;\n leg.from = from;\n leg.to = to;\n\n leg.coords = points;\n leg.distance = points.reduce((acc, coords, idx, arr) => {\n if (idx !== 0) {\n return acc + arr[idx - 1].distanceTo(coords);\n }\n return acc;\n }, 0);\n leg.duration = leg.distance;\n itinerary.legs.push(leg);\n\n itinerary.distance = leg.distance;\n itinerary.duration = leg.duration;\n\n return itinerary;\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n from: this.from.toCompressedJson(),\n to: this.to.toCompressedJson(),\n distance: this.distance,\n duration: this.duration,\n legs: this.legs.map(leg => leg.toJson())\n };\n if (this.startTime !== null) {\n output.startTime = this.startTime;\n }\n if (this.endTime !== null) {\n output.endTime = this.endTime;\n }\n return output;\n }\n\n /**\n * @param {object} json\n * @returns {Itinerary}\n */\n static fromJson(json) {\n const itinerary = new Itinerary();\n itinerary.from = Coordinates.fromCompressedJson(json.from);\n itinerary.to = Coordinates.fromCompressedJson(json.to);\n itinerary.distance = json.distance;\n itinerary.duration = json.duration;\n itinerary.legs = json.legs.map(Leg.fromJson);\n if (json.startTime) {\n itinerary.startTime = json.startTime;\n }\n if (json.endTime) {\n itinerary.endTime = json.endTime;\n }\n return itinerary;\n }\n}\nexport default Itinerary;\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { Coordinates, GraphItinerary } from '@wemap/geo';\nimport { diffAngle, deg2rad } from '@wemap/maths';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport Step from '../Step.js';\nimport LevelChange from '../LevelChange.js';\n\nconst SKIP_STEP_ANGLE_MAX = deg2rad(20);\n\nclass StepsGeneration {\n\n /**\n * @param {GraphItinerary<OsmElement>} itinerary\n * @returns {Step[]}\n */\n static fromGraphItinerary(itinerary) {\n\n const steps = [];\n\n const { start, end, nodes, edges } = itinerary;\n\n let currentStep, previousStep;\n let previousBearing = start.bearingTo(nodes[0].coords);\n\n for (let i = 0; i < nodes.length - 1; i++) {\n\n const isFirstStep = !currentStep;\n\n const node = nodes[i];\n const nextNode = nodes[i + 1];\n const edge = edges[i];\n\n const bearing = edge.bearing;\n const angle = diffAngle(previousBearing, bearing + Math.PI);\n\n let splitByAngle = Math.abs(diffAngle(Math.PI, angle)) >= SKIP_STEP_ANGLE_MAX;\n\n const splitByLevel = edge.level && edge.level.isRange\n && node.coords.level && !node.coords.level.isRange;\n splitByAngle = splitByAngle && !(node.coords.level && node.coords.level.isRange);\n\n const splitStepCondition = splitByAngle || splitByLevel;\n\n const isSubwayEntrance = node ? node.builtFrom.tags.railway === 'subway_entrance' : false;\n\n // New step creation\n if (isFirstStep || splitStepCondition || isSubwayEntrance) {\n\n previousStep = currentStep;\n\n currentStep = new Step();\n currentStep.coords = node.coords;\n currentStep.number = steps.length + 1;\n currentStep.angle = angle;\n currentStep.previousBearing = previousBearing;\n currentStep.nextBearing = bearing;\n currentStep.name = edge.builtFrom.tags.name || null;\n currentStep.distance = 0;\n currentStep.duration = 0;\n\n if (isSubwayEntrance) {\n currentStep.extras.subwayEntrance = true;\n currentStep.name = node.builtFrom.tags.name;\n if (node.builtFrom.tags.ref) {\n currentStep.extras.subwayEntranceRef = node.builtFrom.tags.ref;\n }\n }\n\n if (splitByLevel) {\n currentStep.levelChange = LevelChange.fromTwoNodes(node, nextNode);\n }\n\n steps.push(currentStep);\n\n if (!previousStep) {\n currentStep.firstStep = true;\n }\n }\n\n currentStep.distance += edge.length;\n currentStep.duration += itinerary.edgesWeights[i];\n previousBearing = bearing;\n }\n\n const lastNode = nodes[nodes.length - 1];\n const lastStep = new Step();\n lastStep.coords = lastNode.coords;\n lastStep.number = steps.length + 1;\n lastStep.previousBearing = previousBearing;\n lastStep.distance = lastNode.coords.distanceTo(end);\n if (!Coordinates.equalsTo(lastNode.coords, end)) {\n lastStep.nextBearing = lastNode.coords.bearingTo(end);\n lastStep.angle = diffAngle(lastStep.previousBearing, lastStep.nextBearing + Math.PI);\n }\n lastStep.lastStep = true;\n steps.push(lastStep);\n\n return steps;\n }\n\n}\nexport default StepsGeneration;\n","import { GraphItinerary } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport StepsGeneration from './StepsGeneration.js';\n\n/**\n * @param {GraphItinerary<OsmElement>} graphItinerary\n * @param {string} mode\n * @returns {Leg}\n */\nexport function createLegFromGraphItinerary(graphItinerary, mode = 'WALK') {\n\n const leg = new Leg();\n\n leg.from = { coords: graphItinerary.start };\n leg.to = { coords: graphItinerary.end };\n leg.coords = graphItinerary.nodes.map(node => node.coords);\n leg.distance = graphItinerary.edges.reduce((acc, edge) => acc + edge.length, 0);\n leg.duration = graphItinerary.edgesWeights.reduce((acc, weight) => acc + weight, 0);\n leg.mode = mode;\n leg.steps = StepsGeneration.fromGraphItinerary(graphItinerary);\n\n return leg;\n}\n\n/**\n * @param {GraphItinerary<OsmElement>} graphItinerary\n * @param {string} mode\n * @returns {Itinerary}\n */\nexport function createItineraryFromGraphItinerary(graphItinerary, mode = 'WALK') {\n\n const leg = createLegFromGraphItinerary(graphItinerary, mode);\n\n const itinerary = new Itinerary();\n\n itinerary.from = graphItinerary.start;\n itinerary.to = graphItinerary.end;\n itinerary.distance = leg.distance;\n itinerary.duration = leg.duration;\n itinerary.legs.push(leg);\n\n return itinerary;\n}\n","import { Level, GraphEdge, GraphNode, Network } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport OsmModel from '../../model/OsmModel.js';\nimport OsmNode from '../../model/OsmNode.js';\nimport OsmWay from '../../model/OsmWay.js';\n\n\nexport const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk'];\n\nexport const DEFAULT_WAY_SELECTOR = way => {\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\n/**\n * @param {Network<OsmElement>} network\n * @param {string} name\n */\nexport function getNodeByName(network, name) {\n return network.nodes.find(({ builtFrom }) => builtFrom.tags.name === name);\n}\n\n/**\n * @param {Network<OsmElement>} network\n * @param {string} name\n */\nexport function getEdgeByName(network, name) {\n return network.edges.find(({ builtFrom }) => builtFrom.tags.name === name);\n}\n\n/**\n * @param {GraphEdge<OsmElement>} edge\n * @param {OsmWay} way\n * @returns {boolean}\n */\nfunction manageOneWay(edge, way) {\n\n const { highway, oneway, conveying } = way.tags;\n\n edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['yes', '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/**\n * @param {Network} networkModel\n * @param {GraphNode} node\n */\nfunction createNodesAndEdgesFromElevator(networkModel, node) {\n\n /** @type {GraphNode[]} */\n const createdNodes = [];\n const getOrCreateLevelNode = level => {\n let levelNode = createdNodes.find(({ coords }) => Level.equalsTo(level, coords.level));\n if (!levelNode) {\n levelNode = new GraphNode(node.coords.clone());\n levelNode.coords.level = level;\n createdNodes.push(levelNode);\n networkModel.nodes.push(levelNode);\n }\n return levelNode;\n };\n\n // Create nodes from node.edges\n node.edges.forEach(edge => {\n if (edge.level.isRange) {\n throw new Error('Cannot handle this elevator edge due to ambiguity');\n }\n\n const levelNode = getOrCreateLevelNode(edge.level);\n if (edge.node1 === node) {\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 const newEdge = new GraphEdge(\n createdNode1,\n createdNode2,\n new Level(createdNode1.coords.level.val, createdNode2.coords.level.val),\n node.builtFrom\n );\n networkModel.edges.push(newEdge);\n }\n }\n\n // Remove the historical elevator node from the network\n networkModel.nodes = networkModel.nodes.filter(_node => _node !== node);\n}\n\n\n/**\n * @param {OsmModel} osmModel\n * @param {function} _waySelectionFilter\n * @returns {Network<OsmElement>}\n */\nexport function createNetworkFromOsmModel(\n osmModel,\n waySelectionFilter = DEFAULT_WAY_SELECTOR\n) {\n\n const networkModel = new Network();\n\n const nodesCreated = {};\n const elevatorNodes = [];\n\n /**\n * @param {OsmNode} osmNode\n */\n const getOrCreateNode = osmNode => {\n let node = nodesCreated[osmNode.id];\n if (!node) {\n node = new GraphNode(osmNode.coords, osmNode);\n nodesCreated[osmNode.id] = node;\n networkModel.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 GraphEdge(firstNode, secondNode, way.level, way);\n manageOneWay(edge, way);\n networkModel.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(networkModel, node);\n });\n\n GraphNode.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","import { Coordinates } from '@wemap/geo';\n\nimport Itinerary from './Itinerary.js';\nclass RouterResponse {\n\n /** @type {!string} */\n routerName;\n\n /** @type {!Coordinates} */\n from;\n\n /** @type {!Coordinates} */\n to;\n\n /** @type {!(Itinerary[])} */\n itineraries = [];\n}\n\nexport default RouterResponse;\n","import { diffAngle } from '@wemap/maths';\n\nimport Itinerary from './Itinerary.js';\n\n/**\n * @param {Itinerary} itinerary\n */\nexport function generateStepsMetadata(itinerary) {\n\n let counter = 1;\n\n itinerary.legs.forEach((leg, legId) => {\n leg.steps.forEach((step, stepId) => {\n\n if (counter === 1) {\n step.firstStep = true;\n }\n if (legId === itinerary.legs.length - 1\n && stepId === leg.steps.length - 1) {\n step.lastStep = true;\n }\n\n step.number = counter++;\n\n\n /*\n * Generate previousBearing, nextBearing and angle\n */\n\n let coordsBeforeStep;\n if (step._idCoordsInLeg > 0) {\n coordsBeforeStep = leg.coords[step._idCoordsInLeg - 1];\n } else if (legId === 0) {\n coordsBeforeStep = itinerary.from;\n } else {\n coordsBeforeStep = itinerary.legs[legId - 1].to.coords;\n }\n\n let coordsAfterStep;\n if (step._idCoordsInLeg !== leg.coords.length - 1) {\n coordsAfterStep = leg.coords[step._idCoordsInLeg + 1];\n } else if (legId === itinerary.legs.length - 1) {\n coordsAfterStep = itinerary.to;\n } else {\n coordsAfterStep = itinerary.legs[legId + 1].from.coords;\n }\n\n step.previousBearing = coordsBeforeStep.bearingTo(step.coords);\n step.nextBearing = step.coords.bearingTo(coordsAfterStep);\n step.angle = diffAngle(step.previousBearing, step.nextBearing + Math.PI);\n\n });\n });\n}\n","/* eslint-disable max-statements */\n\nimport { Level, Coordinates } from '@wemap/geo';\nimport { rad2deg, positiveMod } from '@wemap/maths';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {Coordinates} coordinates\n * @returns {object}\n */\nexport function coordinatesToJson(coordinates) {\n const output = [coordinates.lng, coordinates.lat];\n if (coordinates.level) {\n output.push(coordinates.level.toString());\n }\n return output;\n}\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n const output = new Coordinates(json[1], json[0]);\n if (json.length > 2) {\n output.level = Level.fromString(json[2]);\n }\n return output;\n}\n\nexport function nodesToJsonCoords(nodes) {\n return nodes.map(node => coordinatesToJson(node.coords));\n}\n\n\nexport function getModifierFromAngle(_angle) {\n\n const angle = positiveMod(rad2deg(_angle), 360);\n\n if (angle > 0 && angle < 60) {\n return 'sharp right';\n }\n if (angle >= 60 && angle < 140) {\n return 'right';\n }\n if (angle >= 140 && angle < 160) {\n return 'slight right';\n }\n if (angle >= 160 && angle <= 200) {\n return 'straight';\n }\n if (angle > 200 && angle <= 220) {\n return 'slight left';\n }\n if (angle > 220 && angle <= 300) {\n return 'left';\n }\n if (angle > 300 && angle < 360) {\n return 'sharp left';\n }\n return 'u turn';\n}\n\n\nexport function noRouteFoundJson(message) {\n return {\n 'code': 'NoRoute',\n message\n };\n}\n\n/**\n * @param {Itinerary} itinerary\n * @returns {object}\n */\nexport function itineraryToOsrmJson(itinerary) {\n\n const lastLegId = itinerary.legs.length - 1;\n\n const jsonLegs = itinerary.legs.map(({ distance, duration, coords, steps }, idLeg) => {\n\n const lastStepId = steps.length - 1;\n\n return {\n distance,\n duration,\n steps: steps.map((step, idStep, arr) => {\n\n let type = idStep === 0 && idLeg === 0 ? 'depart' : 'turn';\n type = idStep === lastStepId && idLeg === lastLegId ? 'arrive' : type;\n\n const stepCoordsIdx = coords.findIndex(p => p.equalsTo(step.coords));\n const nextStepCoordsIdx = idStep === lastStepId\n ? stepCoordsIdx\n : coords.findIndex(p => p.equalsTo(arr[idStep + 1].coords));\n\n const jsonStep = {\n geometry: {\n type: 'LineString',\n coordinates: coords.slice(stepCoordsIdx, nextStepCoordsIdx + 1).map(coordinatesToJson)\n },\n distance: step.distance,\n duration: step.duration,\n name: step.name,\n maneuver: {\n bearing_before: rad2deg(step.previousBearing),\n bearing_after: rad2deg(step.nextBearing),\n location: coordinatesToJson(step.coords),\n modifier: getModifierFromAngle(step.angle),\n type\n }\n };\n if (step.levelChange !== null) {\n jsonStep.levelChange = step.levelChange;\n }\n if (typeof step.extras === 'object' && Object.keys(step.extras).length !== 0) {\n jsonStep.extras = step.extras;\n }\n\n return jsonStep;\n })\n };\n });\n\n return {\n 'code': 'Ok',\n 'routes': [\n {\n 'geometry': {\n 'type': 'LineString',\n 'coordinates': itinerary.coords.map(coordinatesToJson)\n },\n 'legs': jsonLegs,\n 'distance': itinerary.distance,\n 'duration': itinerary.duration,\n 'weight_name': 'routability',\n 'weight': 0\n }\n ],\n 'waypoints': []\n };\n}\n\n\n/**\n * @param {object} jsonSteps\n * @param {Coordinates[]} legCoords\n * @returns {Step[]}\n */\nfunction parseJsonSteps(jsonSteps, legCoords) {\n\n if (!jsonSteps) {\n return [];\n }\n\n return jsonSteps.map(jsonStep => {\n\n const step = new Step();\n step.coords = jsonToCoordinates(jsonStep.maneuver.location);\n\n const idStepCoordsInLeg = legCoords.findIndex(coords => step.coords.equalsTo(coords));\n if (idStepCoordsInLeg < 0) {\n throw new Error('Osrm Parser: Cannot find step coords in leg coordinates');\n }\n step._idCoordsInLeg = idStepCoordsInLeg;\n\n step.name = jsonStep.name;\n step.levelChange = jsonStep.levelChange ? jsonStep.levelChange : null;\n\n step.distance = jsonStep.distance;\n step.duration = jsonStep.duration;\n\n if (step.extras.subwayEntrance) {\n step.extras.subwayEntrance = true;\n if (jsonStep.extras.subwayEntranceRef) {\n step.extras.subwayEntranceRef = jsonStep.extras.subwayEntranceRef;\n }\n }\n\n return step;\n });\n}\n\n\n/**\n * Generate multi itineraries from OSRM JSON\n * @param {object} json JSON file provided by OSRM.\n * @param {Coordinates} from itinerary start\n * @param {Coordinates} to itinerary end\n * @param {?string} routingMode [walking|driving|bicycle]\n * @returns {?RouterResponse}\n */\nexport function createRouterResponseFromJson(json, from, to, routingMode = 'walking') {\n\n const { routes: jsonRoutes } = json;\n\n if (!jsonRoutes) {\n return null;\n }\n\n const routingModeCorrespondance = new Map();\n routingModeCorrespondance.set('walking', 'WALK');\n routingModeCorrespondance.set('driving', 'CAR');\n routingModeCorrespondance.set('bicycle', 'BIKE');\n const mode = routingModeCorrespondance.get(routingMode) || null;\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'osrm';\n\n routerResponse.from = from;\n routerResponse.to = to;\n\n for (const jsonItinerary of jsonRoutes) {\n\n const itinerary = new Itinerary();\n\n // itinerary.coords = jsonItinerary.geometry.coordinates.map(jsonToCoordinates);\n itinerary.distance = jsonItinerary.distance;\n itinerary.duration = jsonItinerary.duration;\n itinerary.from = from;\n itinerary.to = to;\n\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonLeg of jsonItinerary.legs) {\n\n const leg = new Leg();\n\n leg.mode = mode;\n leg.distance = jsonLeg.distance;\n leg.duration = jsonLeg.duration;\n\n leg.coords = jsonLeg.steps\n .map(step => step.geometry.coordinates.map(jsonToCoordinates))\n .flat()\n // Remove duplicates\n .filter((coords, idx, arr) => idx === 0 || !arr[idx - 1].equalsTo(coords));\n\n leg.from = {\n name: null,\n coords: leg.coords[0]\n };\n leg.to = {\n name: null,\n coords: leg.coords[leg.coords.length - 1]\n };\n\n leg.steps = parseJsonSteps(jsonLeg.steps, leg.coords);\n\n itinerary.legs.push(leg);\n }\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n\n }\n\n return routerResponse;\n}\n","/* eslint-disable max-statements */\nimport Polyline from '@mapbox/polyline';\n\nimport { Coordinates } from '@wemap/geo';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n return new Coordinates(json.lat, json.lon);\n}\n\n/**\n * @param {object} jsonSteps\n * @param {Coordinates[]} legCoords\n * @returns {Step[]}\n */\nfunction parseJsonSteps(jsonSteps, legCoords) {\n\n if (!jsonSteps) {\n return [];\n }\n\n return jsonSteps.map(jsonStep => {\n\n const step = new Step();\n const stepCoords = jsonToCoordinates(jsonStep);\n\n // OTP step does not have the same coordinates than a point in legCoords.\n // That is why we look for the closest point.\n const distances = legCoords.map(coords => coords.distanceTo(stepCoords));\n const idStepCoordsInLeg = distances.indexOf(Math.min(...distances));\n if (idStepCoordsInLeg < 0) {\n throw new Error('OTP Parser: Cannot find closest step');\n }\n step.coords = legCoords[idStepCoordsInLeg];\n step._idCoordsInLeg = idStepCoordsInLeg;\n\n step.name = jsonStep.streetName;\n step.levelChange = null;\n\n step.distance = jsonStep.distance;\n\n return step;\n });\n}\n\n/**\n * Generate multi itineraries from OTP JSON\n * @param {object} json JSON file provided by OTP.\n * @returns {?RouterResponse}\n */\nexport function createRouterResponseFromJson(json) {\n\n const { plan: jsonPlan } = json;\n\n if (!jsonPlan) {\n return null;\n }\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'otp';\n\n routerResponse.from = jsonToCoordinates(jsonPlan.from);\n routerResponse.to = jsonToCoordinates(jsonPlan.to);\n\n for (const jsonItinerary of jsonPlan.itineraries) {\n\n const itinerary = new Itinerary();\n\n itinerary.duration = jsonItinerary.duration;\n itinerary.startTime = jsonItinerary.startTime;\n itinerary.endTime = jsonItinerary.endTime;\n itinerary.from = routerResponse.from;\n itinerary.to = routerResponse.to;\n\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonLeg of jsonItinerary.legs) {\n\n const leg = new Leg();\n\n leg.mode = jsonLeg.mode;\n leg.duration = jsonLeg.duration;\n leg.startTime = jsonLeg.startTime;\n leg.endTime = jsonLeg.endTime;\n leg.from = {\n name: jsonLeg.from.name,\n coords: jsonToCoordinates(jsonLeg.from)\n };\n leg.to = {\n name: jsonLeg.to.name,\n coords: jsonToCoordinates(jsonLeg.to)\n };\n leg.coords = Polyline.decode(jsonLeg.legGeometry.points).map(([lat, lon]) => new Coordinates(lat, lon));\n\n leg.steps = parseJsonSteps(jsonLeg.steps, leg.coords);\n\n if (leg.mode === 'BUS' || leg.mode === 'TRAM') {\n leg.transportInfo = {\n name: jsonLeg.route,\n routeColor: jsonLeg.routeColor,\n routeTextColor: jsonLeg.routeTextColor,\n directionName: jsonLeg.headsign\n };\n\n const legStep = new Step();\n legStep.coords = leg.coords[0];\n legStep._idCoordsInLeg = 0;\n legStep.name = jsonLeg.headsign;\n legStep.levelChange = null;\n legStep.distance = jsonLeg.distance;\n leg.steps = [legStep];\n }\n\n // jsonLeg.distance is not reliable when compared to the array of leg coords.\n // leg.distance = jsonLeg.distance;\n leg.distance = leg.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n itinerary.legs.push(leg);\n\n }\n\n itinerary.distance = itinerary.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n }\n\n return routerResponse;\n}\n\n\n","import { GraphProjection } from '@wemap/geo';\n\nimport Leg from '../Leg.js';\nimport Step from '../Step.js';\n\nclass ItineraryInfo {\n\n /** @type {Step} */\n nextStep;\n\n /** @type {Step} */\n previousStep;\n\n /** @type {GraphProjection} */\n projection;\n\n /** @type {Leg} */\n leg;\n\n /** @type {number} */\n traveledDistance;\n\n /** @type {number} */\n traveledPercentage;\n\n /** @type {number} */\n remainingDistance;\n\n /** @type {number} */\n remainingPercentage;\n\n}\n\nexport default ItineraryInfo;\n","/* eslint-disable max-statements */\nimport { Coordinates, GraphEdge, GraphNode, MapMatching, Network } from '@wemap/geo';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport Step from '../Step.js';\nimport ItineraryInfo from './ItineraryInfo.js';\n\nclass ItineraryInfoManager {\n\n /** @type {Itinerary} */\n _itinerary;\n\n /** @type {Network} */\n _network;\n\n /** @type {Network} */\n _mapMatching;\n\n /** @type {Step[]} */\n _steps;\n\n /** @type {Step[]} */\n _coordsNextStep;\n\n /** @type {Step[]} */\n _coordsPreviousStep;\n\n /** @type {number[]} */\n _coordsDistanceTraveled;\n\n /** @type {Leg[]} */\n _coordsLeg;\n\n /** @type {Itinerary} */\n set itinerary(itinerary) {\n\n this._itinerary = itinerary;\n this._steps = itinerary.steps;\n this._network = itinerary.toNetwork();\n this._mapMatching = new MapMatching(this._network);\n\n this._coordsNextStep = new Array(itinerary.coords.length);\n this._coordsPreviousStep = new Array(itinerary.coords.length);\n this._coordsDistanceTraveled = new Array(itinerary.coords.length);\n this._coordsLeg = new Array(itinerary.coords.length);\n\n let stepId = 0;\n let previousStep = null;\n let nextStep = this._steps[0];\n let distanceTraveled = 0;\n\n itinerary.coords.forEach((coords, idx, arr) => {\n if (stepId < this._steps.length && this._steps[stepId].coords.equalsTo(coords)) {\n previousStep = this._steps[stepId];\n nextStep = stepId === this._steps.length - 1 ? null : this._steps[stepId + 1];\n stepId++;\n }\n if (idx !== 0) {\n distanceTraveled += arr[idx - 1].distanceTo(coords);\n }\n\n this._coordsNextStep[idx] = nextStep;\n this._coordsPreviousStep[idx] = previousStep;\n this._coordsDistanceTraveled[idx] = distanceTraveled;\n this._coordsLeg[idx] = itinerary.legs.find(leg => leg.coords.includes(coords));\n });\n }\n\n /**\n * @param {Coordinates} position\n * @returns {ItineraryInfo}\n */\n getInfo(position) {\n\n if (!(position instanceof Coordinates)) {\n return null;\n }\n\n const projection = this._mapMatching.getProjection(position);\n if (!projection) {\n return null;\n }\n\n let itineraryInfo = null;\n\n if (projection.nearestElement instanceof GraphNode) {\n const idx = this._itinerary.coords.findIndex(\n coords => projection.nearestElement.coords === coords\n );\n if (idx === -1) {\n throw new Error('ItineraryInfoManager: could not find projection in itinerary (Node)');\n }\n\n itineraryInfo = new ItineraryInfo();\n itineraryInfo.nextStep = this._coordsNextStep[idx];\n itineraryInfo.previousStep = this._coordsPreviousStep[idx];\n itineraryInfo.projection = projection;\n itineraryInfo.leg = this._coordsLeg[idx];\n itineraryInfo.traveledDistance = this._coordsDistanceTraveled[idx];\n itineraryInfo.remainingDistance = this._itinerary.distance - itineraryInfo.traveledDistance;\n itineraryInfo.traveledPercentage = itineraryInfo.traveledDistance / this._itinerary.distance;\n itineraryInfo.remainingPercentage = itineraryInfo.remainingDistance / this._itinerary.distance;\n\n } else if (projection.nearestElement instanceof GraphEdge) {\n\n let firstNode = projection.nearestElement.node1.coords;\n let idx = this._itinerary.coords.findIndex(coords => firstNode === coords);\n if (idx === -1) {\n throw new Error('ItineraryInfoManager: could not find projection in itinerary (Edge)');\n }\n\n // graphEdge is not necessarly ordered. We have to look for the first point\n if (idx === this._itinerary.coords.length - 1\n || this._itinerary.coords[idx + 1] !== projection.nearestElement.node2.coords\n ) {\n firstNode = projection.nearestElement.node2.coords;\n idx--;\n }\n\n itineraryInfo = new ItineraryInfo();\n itineraryInfo.nextStep = this._coordsNextStep[idx];\n itineraryInfo.previousStep = this._coordsPreviousStep[idx];\n itineraryInfo.projection = projection;\n itineraryInfo.leg = this._coordsLeg[idx];\n itineraryInfo.traveledDistance = this._coordsDistanceTraveled[idx]\n + projection.projection.distanceTo(firstNode);\n itineraryInfo.remainingDistance = this._itinerary.distance - itineraryInfo.traveledDistance;\n itineraryInfo.traveledPercentage = itineraryInfo.traveledDistance / this._itinerary.distance;\n itineraryInfo.remainingPercentage = itineraryInfo.remainingDistance / this._itinerary.distance;\n\n }\n\n return itineraryInfo;\n }\n\n}\n\nexport default ItineraryInfoManager;\n"],"names":["jsonToCoordinates","parseJsonSteps","createRouterResponseFromJson"],"mappings":"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"}
1
+ {"version":3,"file":"wemap-osm.es.js","sources":["../src/model/OsmElement.js","../src/model/OsmWay.js","../src/model/OsmNode.js","../src/model/OsmModel.js","../src/model/OsmParser.js","../src/routers/custom/OsmRouterOptions.js","../src/routers/custom/OsmRouter.js","../src/routers/LevelChange.js","../src/routers/Step.js","../src/routers/Leg.js","../src/routers/Itinerary.js","../src/routers/custom/StepsGeneration.js","../src/routers/custom/OsmRouterUtils.js","../src/routers/custom/OsmNetworkUtils.js","../src/routers/RouterResponse.js","../src/routers/Utils.js","../src/routers/osrm/OsrmUtils.js","../src/routers/otp/OtpUtils.js","../src/routers/info/ItineraryInfo.js","../src/routers/info/ItineraryInfoManager.js"],"sourcesContent":["class OsmElement {\n\n /** @type {number|null} */\n id;\n\n /** @type {object} */\n tags;\n\n /**\n * @param {number} id\n * @param {object} tags\n */\n constructor(id, tags) {\n this.id = id;\n this.tags = tags || {};\n }\n}\n\nexport default OsmElement;\n","import { Level } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmNode from './OsmNode.js';\n\nclass OsmWay extends OsmElement {\n\n /** @type {OsmNode[]} */\n nodes = [];\n\n /** @type {?Level} */\n level = null;\n\n /**\n * @param {number} id\n * @param {object} tags\n * @param {?Level} level\n */\n constructor(id, tags, level) {\n super(id, tags);\n this.level = level || null;\n }\n\n /**\n * @returns {boolean}\n */\n get areStairs() {\n return this.tags.highway === 'steps';\n }\n\n /**\n * @returns {boolean}\n */\n get isConveying() {\n return this.tags.hasOwnProperty('conveying');\n }\n\n /**\n * @returns {boolean}\n */\n get isEscalator() {\n return this.areStairs && this.isConveying;\n }\n\n /**\n * @returns {boolean}\n */\n get isMovingWalkway() {\n return !this.areStairs && this.isConveying;\n }\n\n /**\n * @returns {boolean}\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","import { Coordinates } from '@wemap/geo';\n\nimport OsmElement from './OsmElement.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmNode extends OsmElement {\n\n /** @type {Coordinates} */\n coords = null;\n\n /** @type {OsmWay[]} */\n ways = [];\n\n /**\n * @param {number} id\n * @param {Coordinates} coords\n * @param {object} tags\n */\n constructor(id, coords, tags) {\n super(id, tags);\n this.coords = coords;\n }\n\n /**\n * @returns {boolean}\n */\n get isElevator() {\n return this.tags.highway === 'elevator';\n }\n\n /**\n * @returns {boolean}\n */\n get isConveying() {\n return this.isElevator;\n }\n}\n\nexport default OsmNode;\n","import OsmNode from './OsmNode.js';\nimport OsmWay from './OsmWay.js';\n\nclass OsmModel {\n\n /** @type {OsmNode[]} */\n nodes;\n\n /** @type {OsmWay[]} */\n ways;\n\n /**\n * @param {OsmNode[]|undefined} nodes\n * @param {OsmWay[]|undefined} ways\n */\n constructor(nodes, ways) {\n this.nodes = nodes || [];\n this.ways = ways || [];\n }\n\n /**\n * @param {number} id\n * @returns {OsmNode|null}\n */\n getNodeById(id) {\n return this.nodes.find(node => node.id === id) || null;\n }\n\n /**\n * @param {string} name\n * @returns {OsmNode|null}\n */\n getNodeByName(name) {\n return this.nodes.find(node => node.tags.name === name) || null;\n }\n\n\n /**\n * @param {number} id\n * @returns {OsmWay|null}\n */\n getWayById(id) {\n return this.ways.find(way => way.id === id) || null;\n }\n\n /**\n * @param {string} name\n * @returns {OsmWay|null}\n */\n getWayByName(name) {\n return this.ways.find(way => way.tags.name === name) || null;\n }\n\n}\n\nexport default OsmModel;\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\nclass OsmParser {\n\n /**\n * @param {string} osmXmlString\n * @returns {OsmModel}\n */\n static parseOsmXmlString(osmXmlString) {\n\n const model = new OsmModel();\n const parser = new SaxesParser(true);\n\n let buffer;\n\n const isDeleted = element => 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);\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);\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) {\n return new OsmNode(\n Number(attr.id),\n new Coordinates(Number(attr.lat), Number(attr.lon)));\n }\n\n static _parseWay(attr) {\n return new OsmWay(Number(attr.id));\n }\n}\n\nexport default OsmParser;\n","import { GraphRouterOptions } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\n\nclass OsmRouterOptions extends GraphRouterOptions {\n\n /** @type {OsmRouterOptions} */\n static DEFAULT = new OsmRouterOptions();\n\n /**\n * @returns {OsmRouterOptions}\n */\n static get WITHOUT_STAIRS() {\n const options = new OsmRouterOptions();\n options.acceptEdgeFn = edge => edge.builtFrom.tags.highway !== 'steps';\n return options;\n }\n\n /**\n * Get route duration\n * @param {Number} speed in km/h\n */\n static getDurationFromLength(length, speed = 5) {\n return length / (speed * 1000 / 3600);\n }\n\n /** @type {function(GraphEdge<OsmElement>):boolean} */\n weightEdgeFn = edge => edge.builtFrom.isElevator ? 30 : OsmRouterOptions.getDurationFromLength(edge.length);\n\n\n}\n\nexport default OsmRouterOptions;\n","import { Coordinates, GraphItinerary, GraphRouter, Network } from '@wemap/geo';\n\nimport OsmRouterOptions from './OsmRouterOptions.js';\nimport OsmElement from '../../model/OsmElement.js';\n\nclass OsmRouter extends GraphRouter {\n\n /**\n * @param {!Network<OsmElement>} network\n */\n constructor(network) {\n super(network);\n }\n\n /**\n * @param {Coordinates} start\n * @param {Coordinates} end\n * @param {OsmRouterOptions} options\n * @returns {GraphItinerary<OsmElement>}\n */\n getShortestPath(start, end, options = new OsmRouterOptions()) {\n return super.getShortestPath(start, end, options);\n }\n\n}\n\nexport default OsmRouter;\n","import { Level, GraphNode, GraphUtils } from '@wemap/geo';\n\nimport OsmElement from '../model/OsmElement.js';\n\nclass LevelChange {\n\n /** @type {!string} [up|down] */\n direction;\n\n /** @type {!number} [-2, -1, 1, ...] */\n difference;\n\n /** @type {?string} [elevator|conveyor|stairs] */\n type = null;\n\n /**\n * @param {GraphNode<OsmElement>} firstNode\n * @param {GraphNode<OsmElement>} secondNode\n * @returns {LevelChange}\n */\n static fromTwoNodes(firstNode, secondNode) {\n\n const levelChange = new LevelChange();\n\n const edge = GraphUtils.getEdgeByNodes(firstNode.edges, firstNode, secondNode);\n\n if (edge.builtFrom.isElevator) {\n levelChange.type = 'elevator';\n } else if (edge.builtFrom.isConveying) {\n levelChange.type = 'conveyor';\n } else if (edge.builtFrom.areStairs) {\n levelChange.type = 'stairs';\n }\n\n levelChange.difference = Level.diff(firstNode.coords.level, secondNode.coords.level);\n levelChange.direction = levelChange.difference > 0 ? 'up' : 'down';\n\n return levelChange;\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n return {\n direction: this.direction,\n difference: this.difference,\n type: this.type\n };\n }\n\n /**\n * @param {object} json\n * @returns {LevelChange}\n */\n static fromJson(json) {\n const levelChange = new LevelChange();\n levelChange.direction = json.direction;\n levelChange.difference = json.difference;\n levelChange.type = json.type;\n return levelChange;\n }\n}\n\nexport default LevelChange;\n","import { Coordinates } from '@wemap/geo';\n\nimport LevelChange from './LevelChange.js';\n\nclass Step {\n\n /** @type {!boolean} */\n firstStep = false;\n\n /** @type {!boolean} */\n lastStep = false;\n\n /** @type {!number} */\n number;\n\n /** @type {!Coordinates} */\n coords = [];\n\n\n /** @type {!number} */\n angle;\n\n /** @type {!number} */\n previousBearing;\n\n /** @type {!number} */\n nextBearing;\n\n\n /** @type {!number} */\n distance;\n\n /** @type {?number} */\n duration = null;\n\n /** @type {?string} */\n name = null;\n\n\n /** @type {?LevelChange} */\n levelChange = null;\n\n /** @type {?{?subwayEntrance: boolean, ?subwayEntranceRef: string}} */\n extras = {};\n\n /** @type {!number} */\n _idCoordsInLeg = null;\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n number: this.number,\n coords: this.coords.toCompressedJson(),\n angle: this.angle,\n previousBearing: this.previousBearing,\n nextBearing: this.nextBearing,\n distance: this.distance,\n _idCoordsInLeg: this._idCoordsInLeg\n };\n if (this.firstStep) {\n output.firstStep = true;\n }\n if (this.lastStep) {\n output.lastStep = true;\n }\n if (this.duration !== null) {\n output.duration = this.duration;\n }\n if (this.name !== null) {\n output.name = this.name;\n }\n if (this.levelChange !== null) {\n output.levelChange = this.levelChange.toJson();\n }\n if (this.extras && Object.keys(this.extras).length !== 0) {\n output.extras = this.extras;\n }\n return output;\n }\n\n /**\n * @param {object} json\n * @returns {Step}\n */\n static fromJson(json) {\n const step = new Step();\n step.number = json.number;\n step.coords = Coordinates.fromCompressedJson(json.coords);\n step.angle = json.angle;\n step.previousBearing = json.previousBearing;\n step.nextBearing = json.nextBearing;\n step.distance = json.distance;\n step._idCoordsInLeg = json._idCoordsInLeg;\n if (json.firstStep) {\n step.firstStep = json.firstStep;\n }\n if (json.lastStep) {\n step.lastStep = json.lastStep;\n }\n if (json.duration) {\n step.duration = json.duration;\n }\n if (json.name) {\n step.name = json.name;\n }\n if (json.levelChange) {\n step.levelChange = LevelChange.fromJson(json.levelChange);\n }\n if (json.extras) {\n step.extras = json.extras;\n }\n return step;\n }\n}\n\nexport default Step;\n","import { Coordinates, Network } from '@wemap/geo';\n\nimport Step from './Step.js';\n\nclass Leg {\n\n /** @type {!string} can be WALK, BIKE, BUS, TRAM, CAR */\n mode;\n\n /** @type {!number} */\n distance;\n\n /** @type {!number} */\n duration;\n\n /** @type {?number} */\n startTime = null;\n\n /** @type {?number} */\n endTime = null;\n\n /** @type {!{name: ?string, coords: !Coordinates}} */\n from;\n\n /** @type {!{name: ?string, coords: !Coordinates}} */\n to;\n\n /** @type {!Coordinates[]} */\n coords;\n\n /** @type {?{name: !string, routeColor: ?string, routeTextColor: ?string, directionName: ?string}} */\n transportInfo = null;\n\n /** @type {?(Step[])} */\n steps = null;\n\n /**\n * @returns {Network}\n */\n toNetwork() {\n return Network.fromCoordinates([this.coords]);\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n mode: this.mode,\n from: { coords: this.from.coords.toCompressedJson() },\n to: { coords: this.to.coords.toCompressedJson() },\n distance: this.distance,\n duration: this.duration,\n coords: this.coords.map(coords => coords.toCompressedJson())\n };\n if (this.from.name) {\n output.from.name = this.from.name;\n }\n if (this.to.name) {\n output.to.name = this.to.name;\n }\n if (this.startTime !== null) {\n output.startTime = this.startTime;\n }\n if (this.endTime !== null) {\n output.endTime = this.endTime;\n }\n if (this.transportInfo !== null) {\n output.transportInfo = this.transportInfo;\n }\n if (this.steps !== null && this.steps.length > 0) {\n output.steps = this.steps.map(step => step.toJson());\n }\n return output;\n }\n\n\n /**\n * @param {object} json\n * @returns {Leg}\n */\n static fromJson(json) {\n const leg = new Leg();\n leg.mode = json.mode;\n leg.from = { coords: Coordinates.fromCompressedJson(json.from.coords) };\n leg.to = { coords: Coordinates.fromCompressedJson(json.to.coords) };\n leg.distance = json.distance;\n leg.duration = json.duration;\n leg.coords = json.coords.map(Coordinates.fromCompressedJson);\n if (json.from.name) {\n leg.from.name = json.from.name;\n }\n if (json.to.name) {\n leg.to.name = json.to.name;\n }\n if (json.startTime) {\n leg.startTime = json.startTime;\n }\n if (json.endTime) {\n leg.endTime = json.endTime;\n }\n if (json.transportInfo) {\n leg.transportInfo = json.transportInfo;\n }\n if (json.steps) {\n leg.steps = json.steps.map(Step.fromJson);\n }\n return leg;\n }\n\n}\n\nexport default Leg;\n","/* eslint-disable max-statements */\nimport { Coordinates, Network } from '@wemap/geo';\nimport Leg from './Leg.js';\nimport Step from './Step.js';\n\n/**\n * Main attributes are:\n * nodes: the ordered list of Node\n * edges: the ordered list of Edge\n * start: the start point (Coordinates)\n * end: the end point (Coordinates)\n * length: the route length\n */\nclass Itinerary {\n\n /** @type {!Coordinates} */\n from;\n\n /** @type {!Coordinates} */\n to;\n\n /** @type {!number} */\n distance;\n\n /** @type {!number} */\n duration;\n\n /** @type {?number} */\n startTime = null;\n\n /** @type {?number} */\n endTime = null;\n\n /** @type {!(Leg[])} */\n legs = [];\n\n /** @type {?Coordinates[]} */\n _coords = null;\n\n set coords(_) {\n throw new Error('Itinerary.coords cannot be set. They are calculated from Itinerary.legs.');\n }\n\n /** @type {!(Coordinates[])} */\n get coords() {\n if (!this._coords) {\n // Returns the coordinates contained in all legs and remove duplicates between array\n this._coords = this.legs.reduce((acc, val) => {\n const isDuplicate = acc.length && val.coords.length && acc[acc.length - 1].equalsTo(val.coords[0]);\n acc.push(...val.coords.slice(isDuplicate ? 1 : 0));\n return acc;\n }, []);\n }\n return this._coords;\n }\n\n set steps(_) {\n throw new Error('Itinerary.step cannot be set. They are calculated from Itinerary.legs.');\n }\n\n /** @type {!(Step[])} */\n get steps() {\n return this.legs.map(leg => leg.steps).flat();\n }\n\n /**\n * @returns {Network}\n */\n toNetwork() {\n return Network.fromCoordinates([this.coords]);\n }\n\n /**\n * @param {Itinerary[]} itineraries\n * @returns {Itinerary}\n */\n static fromItineraries(...itineraries) {\n const itinerary = new Itinerary();\n itinerary.from = itineraries[0].from;\n itinerary.to = itineraries[itineraries.length - 1].to;\n itinerary.distance = 0;\n itinerary.duration = 0;\n itinerary.legs = [];\n\n itineraries.forEach(_itinerary => {\n itinerary.distance += _itinerary.distance;\n itinerary.duration += _itinerary.duration;\n itinerary.legs.push(..._itinerary.legs);\n itinerary.legs.forEach(leg => {\n leg.steps[0].firstStep = false;\n leg.steps[leg.steps.length - 1].lastStep = false;\n });\n });\n\n itinerary.legs[0].steps[0].firstStep = true;\n const lastLeg = itinerary.legs[itinerary.legs.length - 1];\n lastLeg.steps[lastLeg.steps.length - 1].lastStep = true;\n\n return itinerary;\n }\n\n /**\n * Convert lat/lng/level points to Itinerary\n * @param {number[][]} points 2D points array of lat/lng/level (level is optional)\n * @param {Coordinates} from\n * @param {Coordinates} to\n * @param {string} mode\n * @returns {Itinerary}\n */\n static fromOrderedPointsArray(points, start, end) {\n\n const pointToCoordinates = point => new Coordinates(point[0], point[1], null, point[2]);\n\n return this.fromOrderedCoordinates(\n points.map(pointToCoordinates),\n pointToCoordinates(start),\n pointToCoordinates(end)\n );\n }\n\n /**\n * Convert ordered Coordinates to Itinerary\n * @param {Coordinates[]} points\n * @param {Coordinates} from\n * @param {Coordinates} to\n * @param {string} mode\n * @returns {Itinerary}\n */\n static fromOrderedCoordinates(points, from, to, mode = 'WALK') {\n\n const itinerary = new Itinerary();\n itinerary.from = from;\n itinerary.to = to;\n\n const leg = new Leg();\n leg.mode = mode;\n leg.from = from;\n leg.to = to;\n\n leg.coords = points;\n leg.distance = points.reduce((acc, coords, idx, arr) => {\n if (idx !== 0) {\n return acc + arr[idx - 1].distanceTo(coords);\n }\n return acc;\n }, 0);\n leg.duration = leg.distance;\n itinerary.legs.push(leg);\n\n itinerary.distance = leg.distance;\n itinerary.duration = leg.duration;\n\n return itinerary;\n }\n\n /**\n * @returns {object}\n */\n toJson() {\n const output = {\n from: this.from.toCompressedJson(),\n to: this.to.toCompressedJson(),\n distance: this.distance,\n duration: this.duration,\n legs: this.legs.map(leg => leg.toJson())\n };\n if (this.startTime !== null) {\n output.startTime = this.startTime;\n }\n if (this.endTime !== null) {\n output.endTime = this.endTime;\n }\n return output;\n }\n\n /**\n * @param {object} json\n * @returns {Itinerary}\n */\n static fromJson(json) {\n const itinerary = new Itinerary();\n itinerary.from = Coordinates.fromCompressedJson(json.from);\n itinerary.to = Coordinates.fromCompressedJson(json.to);\n itinerary.distance = json.distance;\n itinerary.duration = json.duration;\n itinerary.legs = json.legs.map(Leg.fromJson);\n if (json.startTime) {\n itinerary.startTime = json.startTime;\n }\n if (json.endTime) {\n itinerary.endTime = json.endTime;\n }\n return itinerary;\n }\n}\nexport default Itinerary;\n","/* eslint-disable complexity */\n/* eslint-disable max-statements */\nimport { Coordinates, GraphItinerary } from '@wemap/geo';\nimport { diffAngle, deg2rad } from '@wemap/maths';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport Step from '../Step.js';\nimport LevelChange from '../LevelChange.js';\n\nconst SKIP_STEP_ANGLE_MAX = deg2rad(20);\n\nclass StepsGeneration {\n\n /**\n * @param {GraphItinerary<OsmElement>} itinerary\n * @returns {Step[]}\n */\n static fromGraphItinerary(itinerary) {\n\n const steps = [];\n\n const { start, end, nodes, edges } = itinerary;\n\n let currentStep, previousStep;\n let previousBearing = start.bearingTo(nodes[0].coords);\n\n for (let i = 0; i < nodes.length - 1; i++) {\n\n const isFirstStep = !currentStep;\n\n const node = nodes[i];\n const nextNode = nodes[i + 1];\n const edge = edges[i];\n\n const bearing = edge.bearing;\n const angle = diffAngle(previousBearing, bearing + Math.PI);\n\n let splitByAngle = Math.abs(diffAngle(Math.PI, angle)) >= SKIP_STEP_ANGLE_MAX;\n\n const splitByLevel = edge.level && edge.level.isRange\n && node.coords.level && !node.coords.level.isRange;\n splitByAngle = splitByAngle && !(node.coords.level && node.coords.level.isRange);\n\n const splitStepCondition = splitByAngle || splitByLevel;\n\n const isSubwayEntrance = node ? node.builtFrom.tags.railway === 'subway_entrance' : false;\n\n // New step creation\n if (isFirstStep || splitStepCondition || isSubwayEntrance) {\n\n previousStep = currentStep;\n\n currentStep = new Step();\n currentStep.coords = node.coords;\n currentStep.number = steps.length + 1;\n currentStep.angle = angle;\n currentStep.previousBearing = previousBearing;\n currentStep.nextBearing = bearing;\n currentStep.name = edge.builtFrom.tags.name || null;\n currentStep.distance = 0;\n currentStep.duration = 0;\n\n if (isSubwayEntrance) {\n currentStep.extras.subwayEntrance = true;\n currentStep.name = node.builtFrom.tags.name;\n if (node.builtFrom.tags.ref) {\n currentStep.extras.subwayEntranceRef = node.builtFrom.tags.ref;\n }\n }\n\n if (splitByLevel) {\n currentStep.levelChange = LevelChange.fromTwoNodes(node, nextNode);\n }\n\n steps.push(currentStep);\n\n if (!previousStep) {\n currentStep.firstStep = true;\n }\n }\n\n currentStep.distance += edge.length;\n currentStep.duration += itinerary.edgesWeights[i];\n previousBearing = bearing;\n }\n\n const lastNode = nodes[nodes.length - 1];\n const lastStep = new Step();\n lastStep.coords = lastNode.coords;\n lastStep.number = steps.length + 1;\n lastStep.previousBearing = previousBearing;\n lastStep.distance = lastNode.coords.distanceTo(end);\n if (!Coordinates.equalsTo(lastNode.coords, end)) {\n lastStep.nextBearing = lastNode.coords.bearingTo(end);\n lastStep.angle = diffAngle(lastStep.previousBearing, lastStep.nextBearing + Math.PI);\n }\n lastStep.lastStep = true;\n steps.push(lastStep);\n\n return steps;\n }\n\n}\nexport default StepsGeneration;\n","import { GraphItinerary } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport StepsGeneration from './StepsGeneration.js';\n\n/**\n * @param {GraphItinerary<OsmElement>} graphItinerary\n * @param {string} mode\n * @returns {Leg}\n */\nexport function createLegFromGraphItinerary(graphItinerary, mode = 'WALK') {\n\n const leg = new Leg();\n\n leg.from = { coords: graphItinerary.start };\n leg.to = { coords: graphItinerary.end };\n leg.coords = graphItinerary.nodes.map(node => node.coords);\n leg.distance = graphItinerary.edges.reduce((acc, edge) => acc + edge.length, 0);\n leg.duration = graphItinerary.edgesWeights.reduce((acc, weight) => acc + weight, 0);\n leg.mode = mode;\n leg.steps = StepsGeneration.fromGraphItinerary(graphItinerary);\n\n return leg;\n}\n\n/**\n * @param {GraphItinerary<OsmElement>} graphItinerary\n * @param {string} mode\n * @returns {Itinerary}\n */\nexport function createItineraryFromGraphItinerary(graphItinerary, mode = 'WALK') {\n\n const leg = createLegFromGraphItinerary(graphItinerary, mode);\n\n const itinerary = new Itinerary();\n\n itinerary.from = graphItinerary.start;\n itinerary.to = graphItinerary.end;\n itinerary.distance = leg.distance;\n itinerary.duration = leg.duration;\n itinerary.legs.push(leg);\n\n return itinerary;\n}\n","import { Level, GraphEdge, GraphNode, Network } from '@wemap/geo';\n\nimport OsmElement from '../../model/OsmElement.js';\nimport OsmModel from '../../model/OsmModel.js';\nimport OsmNode from '../../model/OsmNode.js';\nimport OsmWay from '../../model/OsmWay.js';\n\n\nexport const HIGHWAYS_PEDESTRIANS = ['footway', 'steps', 'pedestrian', 'living_street', 'path', 'track', 'sidewalk'];\n\nexport const DEFAULT_WAY_SELECTOR = way => {\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\n/**\n * @param {Network<OsmElement>} network\n * @param {string} name\n */\nexport function getNodeByName(network, name) {\n return network.nodes.find(({ builtFrom }) => builtFrom.tags.name === name);\n}\n\n/**\n * @param {Network<OsmElement>} network\n * @param {string} name\n */\nexport function getEdgeByName(network, name) {\n return network.edges.find(({ builtFrom }) => builtFrom.tags.name === name);\n}\n\n/**\n * @param {GraphEdge<OsmElement>} edge\n * @param {OsmWay} way\n * @returns {boolean}\n */\nfunction manageOneWay(edge, way) {\n\n const { highway, oneway, conveying } = way.tags;\n\n edge.isOneway = Boolean((oneway === 'yes' || oneway === 'true' || oneway === '1')\n || (conveying && highway && ['yes', '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/**\n * @param {Network} networkModel\n * @param {GraphNode} node\n */\nfunction createNodesAndEdgesFromElevator(networkModel, node) {\n\n /** @type {GraphNode[]} */\n const createdNodes = [];\n const getOrCreateLevelNode = level => {\n let levelNode = createdNodes.find(({ coords }) => Level.equalsTo(level, coords.level));\n if (!levelNode) {\n levelNode = new GraphNode(node.coords.clone());\n levelNode.coords.level = level;\n createdNodes.push(levelNode);\n networkModel.nodes.push(levelNode);\n }\n return levelNode;\n };\n\n // Create nodes from node.edges\n node.edges.forEach(edge => {\n if (edge.level.isRange) {\n throw new Error('Cannot handle this elevator edge due to ambiguity');\n }\n\n const levelNode = getOrCreateLevelNode(edge.level);\n if (edge.node1 === node) {\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 const newEdge = new GraphEdge(\n createdNode1,\n createdNode2,\n new Level(createdNode1.coords.level.val, createdNode2.coords.level.val),\n node.builtFrom\n );\n networkModel.edges.push(newEdge);\n }\n }\n\n // Remove the historical elevator node from the network\n networkModel.nodes = networkModel.nodes.filter(_node => _node !== node);\n}\n\n\n/**\n * @param {OsmModel} osmModel\n * @param {function} _waySelectionFilter\n * @returns {Network<OsmElement>}\n */\nexport function createNetworkFromOsmModel(\n osmModel,\n waySelectionFilter = DEFAULT_WAY_SELECTOR\n) {\n\n const networkModel = new Network();\n\n const nodesCreated = {};\n const elevatorNodes = [];\n\n /**\n * @param {OsmNode} osmNode\n */\n const getOrCreateNode = osmNode => {\n let node = nodesCreated[osmNode.id];\n if (!node) {\n node = new GraphNode(osmNode.coords, osmNode);\n nodesCreated[osmNode.id] = node;\n networkModel.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 GraphEdge(firstNode, secondNode, way.level, way);\n manageOneWay(edge, way);\n networkModel.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(networkModel, node);\n });\n\n GraphNode.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","import { Coordinates } from '@wemap/geo';\n\nimport Itinerary from './Itinerary.js';\nclass RouterResponse {\n\n /** @type {!string} */\n routerName;\n\n /** @type {!Coordinates} */\n from;\n\n /** @type {!Coordinates} */\n to;\n\n /** @type {!(Itinerary[])} */\n itineraries = [];\n}\n\nexport default RouterResponse;\n","import { diffAngle } from '@wemap/maths';\n\nimport Itinerary from './Itinerary.js';\n\n/**\n * @param {Itinerary} itinerary\n */\nexport function generateStepsMetadata(itinerary) {\n\n let counter = 1;\n\n itinerary.legs.forEach((leg, legId) => {\n leg.steps.forEach((step, stepId) => {\n\n if (counter === 1) {\n step.firstStep = true;\n }\n if (legId === itinerary.legs.length - 1\n && stepId === leg.steps.length - 1) {\n step.lastStep = true;\n }\n\n step.number = counter++;\n\n\n /*\n * Generate previousBearing, nextBearing and angle\n */\n\n let coordsBeforeStep;\n if (step._idCoordsInLeg > 0) {\n coordsBeforeStep = leg.coords[step._idCoordsInLeg - 1];\n } else if (legId === 0) {\n coordsBeforeStep = itinerary.from;\n } else {\n coordsBeforeStep = itinerary.legs[legId - 1].to.coords;\n }\n\n let coordsAfterStep;\n if (step._idCoordsInLeg !== leg.coords.length - 1) {\n coordsAfterStep = leg.coords[step._idCoordsInLeg + 1];\n } else if (legId === itinerary.legs.length - 1) {\n coordsAfterStep = itinerary.to;\n } else {\n coordsAfterStep = itinerary.legs[legId + 1].from.coords;\n }\n\n step.previousBearing = coordsBeforeStep.bearingTo(step.coords);\n step.nextBearing = step.coords.bearingTo(coordsAfterStep);\n step.angle = diffAngle(step.previousBearing, step.nextBearing + Math.PI);\n\n });\n });\n}\n","/* eslint-disable max-statements */\n\nimport { Level, Coordinates } from '@wemap/geo';\nimport { rad2deg, positiveMod } from '@wemap/maths';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport LevelChange from '../LevelChange.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {Coordinates} coordinates\n * @returns {object}\n */\nexport function coordinatesToJson(coordinates) {\n const output = [coordinates.lng, coordinates.lat];\n if (coordinates.level) {\n output.push(coordinates.level.toString());\n }\n return output;\n}\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n const output = new Coordinates(json[1], json[0]);\n if (json.length > 2) {\n output.level = Level.fromString(json[2]);\n }\n return output;\n}\n\nexport function nodesToJsonCoords(nodes) {\n return nodes.map(node => coordinatesToJson(node.coords));\n}\n\n\nexport function getModifierFromAngle(_angle) {\n\n const angle = positiveMod(rad2deg(_angle), 360);\n\n if (angle > 0 && angle < 60) {\n return 'sharp right';\n }\n if (angle >= 60 && angle < 140) {\n return 'right';\n }\n if (angle >= 140 && angle < 160) {\n return 'slight right';\n }\n if (angle >= 160 && angle <= 200) {\n return 'straight';\n }\n if (angle > 200 && angle <= 220) {\n return 'slight left';\n }\n if (angle > 220 && angle <= 300) {\n return 'left';\n }\n if (angle > 300 && angle < 360) {\n return 'sharp left';\n }\n return 'u turn';\n}\n\n\nexport function noRouteFoundJson(message) {\n return {\n 'code': 'NoRoute',\n message\n };\n}\n\n/**\n * @param {Itinerary} itinerary\n * @returns {object}\n */\nexport function itineraryToOsrmJson(itinerary) {\n\n const lastLegId = itinerary.legs.length - 1;\n\n const jsonLegs = itinerary.legs.map(({ distance, duration, coords, steps }, idLeg) => {\n\n const lastStepId = steps.length - 1;\n\n return {\n distance,\n duration,\n steps: steps.map((step, idStep, arr) => {\n\n let type = idStep === 0 && idLeg === 0 ? 'depart' : 'turn';\n type = idStep === lastStepId && idLeg === lastLegId ? 'arrive' : type;\n\n const stepCoordsIdx = coords.findIndex(p => p.equalsTo(step.coords));\n const nextStepCoordsIdx = idStep === lastStepId\n ? stepCoordsIdx\n : coords.findIndex(p => p.equalsTo(arr[idStep + 1].coords));\n\n const jsonStep = {\n geometry: {\n type: 'LineString',\n coordinates: coords.slice(stepCoordsIdx, nextStepCoordsIdx + 1).map(coordinatesToJson)\n },\n distance: step.distance,\n duration: step.duration,\n name: step.name,\n maneuver: {\n bearing_before: rad2deg(step.previousBearing),\n bearing_after: rad2deg(step.nextBearing),\n location: coordinatesToJson(step.coords),\n modifier: getModifierFromAngle(step.angle),\n type\n }\n };\n if (step.levelChange !== null) {\n jsonStep.levelChange = step.levelChange.toJson();\n }\n if (typeof step.extras === 'object' && Object.keys(step.extras).length !== 0) {\n jsonStep.extras = step.extras;\n }\n\n return jsonStep;\n })\n };\n });\n\n return {\n 'code': 'Ok',\n 'routes': [\n {\n 'geometry': {\n 'type': 'LineString',\n 'coordinates': itinerary.coords.map(coordinatesToJson)\n },\n 'legs': jsonLegs,\n 'distance': itinerary.distance,\n 'duration': itinerary.duration,\n 'weight_name': 'routability',\n 'weight': 0\n }\n ],\n 'waypoints': []\n };\n}\n\n\n/**\n * @param {object} jsonSteps\n * @param {Coordinates[]} legCoords\n * @returns {Step[]}\n */\nfunction parseJsonSteps(jsonSteps, legCoords) {\n\n if (!jsonSteps) {\n return [];\n }\n\n return jsonSteps.map(jsonStep => {\n\n const step = new Step();\n step.coords = jsonToCoordinates(jsonStep.maneuver.location);\n\n const idStepCoordsInLeg = legCoords.findIndex(coords => step.coords.equalsTo(coords));\n if (idStepCoordsInLeg < 0) {\n throw new Error('Osrm Parser: Cannot find step coords in leg coordinates');\n }\n step._idCoordsInLeg = idStepCoordsInLeg;\n\n step.name = jsonStep.name;\n step.levelChange = jsonStep.levelChange ? LevelChange.fromJson(jsonStep.levelChange) : null;\n\n step.distance = jsonStep.distance;\n step.duration = jsonStep.duration;\n\n if (step.extras.subwayEntrance) {\n step.extras.subwayEntrance = true;\n if (jsonStep.extras.subwayEntranceRef) {\n step.extras.subwayEntranceRef = jsonStep.extras.subwayEntranceRef;\n }\n }\n\n return step;\n });\n}\n\n\n/**\n * Generate multi itineraries from OSRM JSON\n * @param {object} json JSON file provided by OSRM.\n * @param {Coordinates} from itinerary start\n * @param {Coordinates} to itinerary end\n * @param {?string} routingMode [walking|driving|bicycle]\n * @returns {?RouterResponse}\n */\nexport function createRouterResponseFromJson(json, from, to, routingMode = 'walking') {\n\n const { routes: jsonRoutes } = json;\n\n if (!jsonRoutes) {\n return null;\n }\n\n const routingModeCorrespondance = new Map();\n routingModeCorrespondance.set('walking', 'WALK');\n routingModeCorrespondance.set('driving', 'CAR');\n routingModeCorrespondance.set('bicycle', 'BIKE');\n const mode = routingModeCorrespondance.get(routingMode) || null;\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'osrm';\n\n routerResponse.from = from;\n routerResponse.to = to;\n\n for (const jsonItinerary of jsonRoutes) {\n\n const itinerary = new Itinerary();\n\n // itinerary.coords = jsonItinerary.geometry.coordinates.map(jsonToCoordinates);\n itinerary.distance = jsonItinerary.distance;\n itinerary.duration = jsonItinerary.duration;\n itinerary.from = from;\n itinerary.to = to;\n\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonLeg of jsonItinerary.legs) {\n\n const leg = new Leg();\n\n leg.mode = mode;\n leg.distance = jsonLeg.distance;\n leg.duration = jsonLeg.duration;\n\n leg.coords = jsonLeg.steps\n .map(step => step.geometry.coordinates.map(jsonToCoordinates))\n .flat()\n // Remove duplicates\n .filter((coords, idx, arr) => idx === 0 || !arr[idx - 1].equalsTo(coords));\n\n leg.from = {\n name: null,\n coords: leg.coords[0]\n };\n leg.to = {\n name: null,\n coords: leg.coords[leg.coords.length - 1]\n };\n\n leg.steps = parseJsonSteps(jsonLeg.steps, leg.coords);\n\n itinerary.legs.push(leg);\n }\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n\n }\n\n return routerResponse;\n}\n","/* eslint-disable max-statements */\nimport Polyline from '@mapbox/polyline';\n\nimport { Coordinates } from '@wemap/geo';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport RouterResponse from '../RouterResponse.js';\nimport Step from '../Step.js';\nimport { generateStepsMetadata } from '../Utils.js';\n\n/**\n * @param {object} json\n * @returns {Coordinates}\n */\nexport function jsonToCoordinates(json) {\n return new Coordinates(json.lat, json.lon);\n}\n\n/**\n * @param {object} jsonSteps\n * @param {Coordinates[]} legCoords\n * @returns {Step[]}\n */\nfunction parseJsonSteps(jsonSteps, legCoords) {\n\n if (!jsonSteps) {\n return [];\n }\n\n return jsonSteps.map(jsonStep => {\n\n const step = new Step();\n const stepCoords = jsonToCoordinates(jsonStep);\n\n // OTP step does not have the same coordinates than a point in legCoords.\n // That is why we look for the closest point.\n const distances = legCoords.map(coords => coords.distanceTo(stepCoords));\n const idStepCoordsInLeg = distances.indexOf(Math.min(...distances));\n if (idStepCoordsInLeg < 0) {\n throw new Error('OTP Parser: Cannot find closest step');\n }\n step.coords = legCoords[idStepCoordsInLeg];\n step._idCoordsInLeg = idStepCoordsInLeg;\n\n step.name = jsonStep.streetName;\n step.levelChange = null;\n\n step.distance = jsonStep.distance;\n\n return step;\n });\n}\n\n/**\n * Generate multi itineraries from OTP JSON\n * @param {object} json JSON file provided by OTP.\n * @returns {?RouterResponse}\n */\nexport function createRouterResponseFromJson(json) {\n\n const { plan: jsonPlan } = json;\n\n if (!jsonPlan) {\n return null;\n }\n\n const routerResponse = new RouterResponse();\n routerResponse.routerName = 'otp';\n\n routerResponse.from = jsonToCoordinates(jsonPlan.from);\n routerResponse.to = jsonToCoordinates(jsonPlan.to);\n\n for (const jsonItinerary of jsonPlan.itineraries) {\n\n const itinerary = new Itinerary();\n\n itinerary.duration = jsonItinerary.duration;\n itinerary.startTime = jsonItinerary.startTime;\n itinerary.endTime = jsonItinerary.endTime;\n itinerary.from = routerResponse.from;\n itinerary.to = routerResponse.to;\n\n routerResponse.itineraries.push(itinerary);\n\n for (const jsonLeg of jsonItinerary.legs) {\n\n const leg = new Leg();\n\n leg.mode = jsonLeg.mode;\n leg.duration = jsonLeg.duration;\n leg.startTime = jsonLeg.startTime;\n leg.endTime = jsonLeg.endTime;\n leg.from = {\n name: jsonLeg.from.name,\n coords: jsonToCoordinates(jsonLeg.from)\n };\n leg.to = {\n name: jsonLeg.to.name,\n coords: jsonToCoordinates(jsonLeg.to)\n };\n leg.coords = Polyline.decode(jsonLeg.legGeometry.points).map(([lat, lon]) => new Coordinates(lat, lon));\n\n leg.steps = parseJsonSteps(jsonLeg.steps, leg.coords);\n\n if (leg.mode === 'BUS' || leg.mode === 'TRAM') {\n leg.transportInfo = {\n name: jsonLeg.route,\n routeColor: jsonLeg.routeColor,\n routeTextColor: jsonLeg.routeTextColor,\n directionName: jsonLeg.headsign\n };\n\n const legStep = new Step();\n legStep.coords = leg.coords[0];\n legStep._idCoordsInLeg = 0;\n legStep.name = jsonLeg.headsign;\n legStep.levelChange = null;\n legStep.distance = jsonLeg.distance;\n leg.steps = [legStep];\n }\n\n // jsonLeg.distance is not reliable when compared to the array of leg coords.\n // leg.distance = jsonLeg.distance;\n leg.distance = leg.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n itinerary.legs.push(leg);\n\n }\n\n itinerary.distance = itinerary.coords.reduce((acc, coords, idx, arr) => {\n if (idx === 0) {\n return acc;\n }\n return acc + arr[idx - 1].distanceTo(coords);\n }, 0);\n\n // All legs have to be parsed before computing steps metadata\n generateStepsMetadata(itinerary);\n }\n\n return routerResponse;\n}\n\n\n","import { GraphProjection } from '@wemap/geo';\n\nimport Leg from '../Leg.js';\nimport Step from '../Step.js';\n\nclass ItineraryInfo {\n\n /** @type {Step} */\n nextStep;\n\n /** @type {Step} */\n previousStep;\n\n /** @type {GraphProjection} */\n projection;\n\n /** @type {Leg} */\n leg;\n\n /** @type {number} */\n traveledDistance;\n\n /** @type {number} */\n traveledPercentage;\n\n /** @type {number} */\n remainingDistance;\n\n /** @type {number} */\n remainingPercentage;\n\n}\n\nexport default ItineraryInfo;\n","/* eslint-disable max-statements */\nimport { Coordinates, GraphEdge, GraphNode, MapMatching, Network } from '@wemap/geo';\n\nimport Itinerary from '../Itinerary.js';\nimport Leg from '../Leg.js';\nimport Step from '../Step.js';\nimport ItineraryInfo from './ItineraryInfo.js';\n\nclass ItineraryInfoManager {\n\n /** @type {Itinerary} */\n _itinerary;\n\n /** @type {Network} */\n _network;\n\n /** @type {Network} */\n _mapMatching;\n\n /** @type {Step[]} */\n _steps;\n\n /** @type {Step[]} */\n _coordsNextStep;\n\n /** @type {Step[]} */\n _coordsPreviousStep;\n\n /** @type {number[]} */\n _coordsDistanceTraveled;\n\n /** @type {Leg[]} */\n _coordsLeg;\n\n /** @type {Itinerary} */\n set itinerary(itinerary) {\n\n if (itinerary === null) {\n this._itinerary = null;\n return;\n }\n\n this._itinerary = itinerary;\n this._steps = itinerary.steps;\n this._network = itinerary.toNetwork();\n this._mapMatching = new MapMatching(this._network);\n\n this._coordsNextStep = new Array(itinerary.coords.length);\n this._coordsPreviousStep = new Array(itinerary.coords.length);\n this._coordsDistanceTraveled = new Array(itinerary.coords.length);\n this._coordsLeg = new Array(itinerary.coords.length);\n\n let stepId = 0;\n let previousStep = null;\n let nextStep = this._steps[0];\n let distanceTraveled = 0;\n\n itinerary.coords.forEach((coords, idx, arr) => {\n if (stepId < this._steps.length && this._steps[stepId].coords.equalsTo(coords)) {\n previousStep = this._steps[stepId];\n nextStep = stepId === this._steps.length - 1 ? null : this._steps[stepId + 1];\n stepId++;\n }\n if (idx !== 0) {\n distanceTraveled += arr[idx - 1].distanceTo(coords);\n }\n\n this._coordsNextStep[idx] = nextStep;\n this._coordsPreviousStep[idx] = previousStep;\n this._coordsDistanceTraveled[idx] = distanceTraveled;\n this._coordsLeg[idx] = itinerary.legs.find(leg => leg.coords.includes(coords));\n });\n }\n\n /**\n * @param {Coordinates} position\n * @returns {ItineraryInfo}\n */\n getInfo(position) {\n\n if (!this._itinerary) {\n return null;\n }\n\n if (!(position instanceof Coordinates)) {\n return null;\n }\n\n const projection = this._mapMatching.getProjection(position);\n if (!projection) {\n return null;\n }\n\n let itineraryInfo = null;\n\n if (projection.nearestElement instanceof GraphNode) {\n const idx = this._itinerary.coords.findIndex(\n coords => projection.nearestElement.coords === coords\n );\n if (idx === -1) {\n throw new Error('ItineraryInfoManager: could not find projection in itinerary (Node)');\n }\n\n itineraryInfo = new ItineraryInfo();\n itineraryInfo.nextStep = this._coordsNextStep[idx];\n itineraryInfo.previousStep = this._coordsPreviousStep[idx];\n itineraryInfo.projection = projection;\n itineraryInfo.leg = this._coordsLeg[idx];\n itineraryInfo.traveledDistance = this._coordsDistanceTraveled[idx];\n itineraryInfo.remainingDistance = this._itinerary.distance - itineraryInfo.traveledDistance;\n itineraryInfo.traveledPercentage = itineraryInfo.traveledDistance / this._itinerary.distance;\n itineraryInfo.remainingPercentage = itineraryInfo.remainingDistance / this._itinerary.distance;\n\n } else if (projection.nearestElement instanceof GraphEdge) {\n\n let firstNode = projection.nearestElement.node1.coords;\n let idx = this._itinerary.coords.findIndex(coords => firstNode === coords);\n if (idx === -1) {\n throw new Error('ItineraryInfoManager: could not find projection in itinerary (Edge)');\n }\n\n // graphEdge is not necessarly ordered. We have to look for the first point\n if (idx === this._itinerary.coords.length - 1\n || this._itinerary.coords[idx + 1] !== projection.nearestElement.node2.coords\n ) {\n firstNode = projection.nearestElement.node2.coords;\n idx--;\n }\n\n itineraryInfo = new ItineraryInfo();\n itineraryInfo.nextStep = this._coordsNextStep[idx];\n itineraryInfo.previousStep = this._coordsPreviousStep[idx];\n itineraryInfo.projection = projection;\n itineraryInfo.leg = this._coordsLeg[idx];\n itineraryInfo.traveledDistance = this._coordsDistanceTraveled[idx]\n + projection.projection.distanceTo(firstNode);\n itineraryInfo.remainingDistance = this._itinerary.distance - itineraryInfo.traveledDistance;\n itineraryInfo.traveledPercentage = itineraryInfo.traveledDistance / this._itinerary.distance;\n itineraryInfo.remainingPercentage = itineraryInfo.remainingDistance / this._itinerary.distance;\n\n }\n\n return itineraryInfo;\n }\n\n}\n\nexport default ItineraryInfoManager;\n"],"names":["jsonToCoordinates","parseJsonSteps","createRouterResponseFromJson"],"mappings":"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"}
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "directory": "packages/osm"
12
12
  },
13
13
  "name": "@wemap/osm",
14
- "version": "5.1.7",
14
+ "version": "5.1.10",
15
15
  "bugs": {
16
16
  "url": "https://github.com/wemap/wemap-modules-js/issues"
17
17
  },
@@ -31,5 +31,5 @@
31
31
  "@wemap/maths": "^5.1.1",
32
32
  "saxes": "^5.0.1"
33
33
  },
34
- "gitHead": "a8632ba6c45522049c9eeaa557da4d1b1ed0416b"
34
+ "gitHead": "6e6153bf8dd922a647f37ed0b22034a80f1c2322"
35
35
  }
@@ -58,10 +58,10 @@ function createNodesAndEdgesFromElevator(networkModel, node) {
58
58
 
59
59
  /** @type {GraphNode[]} */
60
60
  const createdNodes = [];
61
- const getOrCreateLevelNode = level => {
61
+ const getOrCreateLevelNode = (level, builtFrom) => {
62
62
  let levelNode = createdNodes.find(({ coords }) => Level.equalsTo(level, coords.level));
63
63
  if (!levelNode) {
64
- levelNode = new GraphNode(node.coords.clone());
64
+ levelNode = new GraphNode(node.coords.clone(), builtFrom);
65
65
  levelNode.coords.level = level;
66
66
  createdNodes.push(levelNode);
67
67
  networkModel.nodes.push(levelNode);
@@ -75,7 +75,7 @@ function createNodesAndEdgesFromElevator(networkModel, node) {
75
75
  throw new Error('Cannot handle this elevator edge due to ambiguity');
76
76
  }
77
77
 
78
- const levelNode = getOrCreateLevelNode(edge.level);
78
+ const levelNode = getOrCreateLevelNode(edge.level, node.builtFrom);
79
79
  if (edge.node1 === node) {
80
80
  edge.node1 = levelNode;
81
81
  } else {