UNPKG

atriusmaps-node-sdk

Version:

This project provides an API to Atrius Personal Wayfinder maps within a Node environment. See the README.md for more information

96 lines (90 loc) 2.91 kB
'use strict'; var R = require('ramda'); var wayfinder = require('./wayfinder.js'); function _interopNamespaceDefault(e) { var n = Object.create(null); if (e) { Object.keys(e).forEach(function (k) { if (k !== 'default') { var d = Object.getOwnPropertyDescriptor(e, k); Object.defineProperty(n, k, d.get ? d : { enumerable: true, get: function () { return e[k]; } }); } }); } n.default = e; return Object.freeze(n); } var R__namespace = /*#__PURE__*/_interopNamespaceDefault(R); const getEdgeTo = (dst) => (node) => R__namespace.find((e) => e.dst === dst, node.edges); const calculateRoute = (graph, start, end, options) => { if (!start || !end) { throw Error("bad calculate Route request!"); } return graph.findShortestPath(start, end, options); }; const findRoute = (graph, start, destination, options = {}) => { const waypoints = []; const queues = []; let hasSecurity = false; let hasImmigration = false; const routeNodes = calculateRoute(graph, start, destination, options); if (routeNodes === null) { return null; } let previousRouteNode = null; for (let i = 0; i < routeNodes.length; i++) { const waypoint = { distance: 0, eta: 0 }; if (previousRouteNode) { const edgeUsed = getEdgeTo(routeNodes[i].id)(previousRouteNode); if (edgeUsed != null) { waypoint.distance = edgeUsed.distance; waypoint.eta = edgeUsed.transitTime; if (edgeUsed.type !== "Ground") { waypoint.portalType = edgeUsed.type; waypoint.isPortal = true; } if (edgeUsed.o) { waypoint.poiId = edgeUsed.o; } if (edgeUsed.path) { waypoint.curvedPathForward = edgeUsed.path; } if (edgeUsed.securityWaitTimes) { waypoint.securityWaitTimes = edgeUsed.securityWaitTimes; waypoint.eta = waypoint.securityWaitTimes.queueTime; } if (edgeUsed.securityLane) { waypoint.securityLane = edgeUsed.securityLane; waypoint.isSecurityCheckpoint = true; if (edgeUsed.securityLane.type === wayfinder.SecurityLaneType.SECURITY) { hasSecurity = true; } if (edgeUsed.securityLane.type === wayfinder.SecurityLaneType.IMMIGRATION) { hasImmigration = true; } if (edgeUsed.o) { queues.push(edgeUsed.o); } } } } waypoint.levelDifference = previousRouteNode ? routeNodes[i].ordinal - previousRouteNode.ordinal : 0; waypoint.position = R__namespace.omit(["edges", "id"], { ...routeNodes[i] }); waypoints.push(waypoint); previousRouteNode = routeNodes[i]; } R__namespace.last(waypoints).isDestination = true; return { waypoints, queues, hasSecurity, hasImmigration }; }; exports.findRoute = findRoute;