UNPKG

@geoapify/route-planner-sdk

Version:

TypeScript SDK for the Geoapify Route Planner API. Supports route optimization, delivery planning, and timeline visualization in browser and Node.js

143 lines (142 loc) 4.85 kB
import { AgentPlan } from "./nested/result/agent-plan"; import { RoutePlannerResultConverter } from "../../tools/route-planner-result-converter"; import { JobPlan } from "./nested/result/job-plan"; import { ShipmentPlan } from "./nested/result/shipment-plan"; import { IndexConverter } from "../../helpers/index-converter"; /** * Provides convenient methods for reading Route Planner API results. */ export class RoutePlannerResult { constructor(callOptions, rawData) { this.callOptions = callOptions; this.rawData = rawData; this.data = RoutePlannerResultConverter.generateRoutePlannerResultData(this.rawData); // generate agent plans this.agentPlans = new Array(this.data.inputData.agents.length).fill(undefined); this.data.agents.forEach((agentPlan) => { this.agentPlans[agentPlan.agent_index] = new AgentPlan(agentPlan, this.data.inputData.agents[agentPlan.agent_index], this.getData().inputData, this.callOptions, this.getAgentViolations(agentPlan.agent_index)); }); // generate shipment plans this.shipmentPlans = (this.data.inputData.shipments || []).map((shipmentData, shipmentIndex) => { const agentPlan = this.agentPlans.find((agentPlan) => !!agentPlan && agentPlan.containsShipment(shipmentIndex)); return new ShipmentPlan(shipmentIndex, shipmentData, agentPlan); }); // generate job plans this.jobPlans = (this.data.inputData.jobs || []).map((jobData, jobIndex) => { const agentPlan = this.agentPlans.find((agentPlan) => !!agentPlan && agentPlan.containsJob(jobIndex)); return new JobPlan(jobIndex, jobData, agentPlan); }); } /** * Returns the data returned by the Route Planner API. */ getData() { return this.data; } /** * Returns the raw data returned by the Route Planner API. */ getRaw() { return this.rawData; } /** * Returns a list of all assigned agent solutions. */ getAgentPlans() { return this.agentPlans; } /** * Finds an agent's solution by their ID. */ getAgentPlan(agentIdOrIndex) { const agentIndex = IndexConverter.convertAgentToIndex(this.getRaw(), agentIdOrIndex); if (agentIndex >= 0) { return this.agentPlans[agentIndex]; } return undefined; } /** * Retrieves unassigned agents. */ getUnassignedAgents() { let data = this.getData(); if (!data.unassignedAgents || data.unassignedAgents.length == 0) { return []; } else { return data.unassignedAgents.map(index => { return data.inputData.agents[index]; }); } } /** * Retrieves unassigned jobs. */ getUnassignedJobs() { let data = this.getData(); if (!data.unassignedJobs || data.unassignedJobs.length == 0) { return []; } else { return data.unassignedJobs.map(index => { return data.inputData.jobs[index]; }); } } /** * Retrieves unassigned shipments. */ getUnassignedShipments() { let data = this.getData(); if (!data.unassignedShipments || data.unassignedShipments.length == 0) { return []; } else { return data.unassignedShipments.map(index => { return data.inputData.shipments[index]; }); } } /** * Returns a list of all assigned jobs */ getJobPlans() { return this.jobPlans; } /** * Finds job solution by their ID or index. */ getJobPlan(jobIdOrIndex) { const jobIndex = IndexConverter.convertJobToIndex(this.getRaw(), jobIdOrIndex); if (jobIndex >= 0) return this.jobPlans[jobIndex]; return undefined; } /** * Returns a list of all shipments */ getShipmentPlans() { return this.shipmentPlans; } /** * Finds shipment solution by their ID or index. */ getShipmentPlan(shipmentIdOrIndex) { const shipmentIndex = IndexConverter.convertShipmentToIndex(this.getRaw(), shipmentIdOrIndex); if (shipmentIndex >= 0) { return this.shipmentPlans[shipmentIndex]; } return undefined; } getCallOptions() { return this.callOptions; } getRoutingOptions() { return this.data.inputData; } getAgentViolations(agentIndex) { var _a, _b; const extendedData = this.rawData; return (_b = (_a = extendedData.properties.violations) === null || _a === void 0 ? void 0 : _a.filter(violation => violation.agentIndex === agentIndex)) !== null && _b !== void 0 ? _b : []; } }