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
JavaScript
;
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;