@opentripplanner/core-utils 6.0.1-alpha.1 → 6.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/itinerary.js +67 -0
- package/esm/itinerary.js.map +1 -1
- package/lib/itinerary.d.ts +7 -0
- package/lib/itinerary.d.ts.map +1 -1
- package/lib/itinerary.js +61 -0
- package/lib/itinerary.js.map +1 -1
- package/package.json +1 -2
- package/src/itinerary.ts +64 -0
- package/tsconfig.tsbuildinfo +41 -105
package/esm/itinerary.js
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
|
+
import _defineProperty from "@babel/runtime/helpers/defineProperty";
|
|
1
2
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
3
|
+
|
|
4
|
+
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
|
|
5
|
+
|
|
6
|
+
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
|
|
7
|
+
|
|
2
8
|
import polyline from "@mapbox/polyline";
|
|
3
9
|
import turfAlong from "@turf/along";
|
|
4
10
|
import { calculateFares, getLegModeLabel, getModeForPlace, getPlaceName, getStepDirection, getStepInstructions, getStepStreetName, getTimeZoneOffset, getTransitFare } from "./deprecated";
|
|
@@ -390,6 +396,67 @@ export function calculatePhysicalActivity(itinerary) {
|
|
|
390
396
|
walkDuration: walkDuration
|
|
391
397
|
};
|
|
392
398
|
}
|
|
399
|
+
/**
|
|
400
|
+
* Sources:
|
|
401
|
+
* - https://www.itf-oecd.org/sites/default/files/docs/environmental-performance-new-mobility.pdf
|
|
402
|
+
* - https://www.thrustcarbon.com/insights/how-to-calculate-emissions-from-a-ferry-journey
|
|
403
|
+
* - https://www.itf-oecd.org/sites/default/files/life-cycle-assessment-calculations-2020.xlsx
|
|
404
|
+
* Other values extrapolated.
|
|
405
|
+
*/
|
|
406
|
+
|
|
407
|
+
var CARBON_INTENSITY_DEFAULTS = {
|
|
408
|
+
walk: 0.026,
|
|
409
|
+
bicycle: 0.017,
|
|
410
|
+
car: 0.162,
|
|
411
|
+
tram: 0.066,
|
|
412
|
+
subway: 0.066,
|
|
413
|
+
rail: 0.066,
|
|
414
|
+
bus: 0.09,
|
|
415
|
+
ferry: 0.082,
|
|
416
|
+
cable_car: 0.021,
|
|
417
|
+
gondola: 0.021,
|
|
418
|
+
funicular: 0.066,
|
|
419
|
+
transit: 0.066,
|
|
420
|
+
leg_switch: 0,
|
|
421
|
+
airplane: 0.382,
|
|
422
|
+
micromobility: 0.095
|
|
423
|
+
};
|
|
424
|
+
/**
|
|
425
|
+
* @param {itinerary} itinerary OTP trip itinierary
|
|
426
|
+
* @param {carbonIntensity} carbonIntensity carbon intensity by mode in grams/meter
|
|
427
|
+
* @param {units} units units to be used in return value
|
|
428
|
+
* @return Amount of carbon in chosen unit
|
|
429
|
+
*/
|
|
430
|
+
|
|
431
|
+
export function calculateEmissions(itinerary) {
|
|
432
|
+
var _itinerary$legs;
|
|
433
|
+
|
|
434
|
+
var carbonIntensity = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
|
|
435
|
+
var units = arguments.length > 2 ? arguments[2] : undefined;
|
|
436
|
+
|
|
437
|
+
// Apply defaults for any values that we don't have.
|
|
438
|
+
var carbonIntensityWithDefaults = _objectSpread(_objectSpread({}, CARBON_INTENSITY_DEFAULTS), carbonIntensity); // Distance is in meters, totalCarbon is in grams
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
var totalCarbon = (itinerary === null || itinerary === void 0 ? void 0 : (_itinerary$legs = itinerary.legs) === null || _itinerary$legs === void 0 ? void 0 : _itinerary$legs.reduce(function (total, leg) {
|
|
442
|
+
return (leg.distance * carbonIntensityWithDefaults[leg.mode.toLowerCase()] || 0) + total;
|
|
443
|
+
}, 0)) || 0;
|
|
444
|
+
|
|
445
|
+
switch (units) {
|
|
446
|
+
case "ounce":
|
|
447
|
+
return totalCarbon / 28.35;
|
|
448
|
+
|
|
449
|
+
case "kilogram":
|
|
450
|
+
return totalCarbon / 1000;
|
|
451
|
+
|
|
452
|
+
case "pound":
|
|
453
|
+
return totalCarbon / 454;
|
|
454
|
+
|
|
455
|
+
case "gram":
|
|
456
|
+
default:
|
|
457
|
+
return totalCarbon;
|
|
458
|
+
}
|
|
459
|
+
}
|
|
393
460
|
export function calculateTncFares(itinerary) {
|
|
394
461
|
// TODO: don't rely on deprecated methods!
|
|
395
462
|
// At the moment this is safe as none of these exported variables contain strings
|
package/esm/itinerary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/itinerary.ts"],"names":["polyline","turfAlong","calculateFares","getLegModeLabel","getModeForPlace","getPlaceName","getStepDirection","getStepInstructions","getStepStreetName","getTimeZoneOffset","getTransitFare","transitModes","getTransitModes","config","modes","map","tm","mode","isTransit","includes","isReservationRequired","leg","boardRule","isContinuousDropoff","alightRule","isFlex","isAdvanceBookingRequired","info","latestBookingTime","daysPrior","legDropoffRequiresAdvanceBooking","dropOffBookingInfo","isWalk","isBicycle","isBicycleRent","isCar","startsWith","isMicromobility","isAccessMode","hasTransit","modesStr","split","some","hasCar","hasBike","hasMicromobility","hasHail","indexOf","hasRental","getMapColor","get","toSentenceCase","str","String","charAt","toUpperCase","substr","toLowerCase","getCompanyFromLeg","from","rentedBike","rentedCar","rentedVehicle","tncData","networks","company","getItineraryBounds","itinerary","coords","legs","forEach","legCoords","toGeoJSON","legGeometry","points","coordinates","c","getLegBounds","length","push","lat","lon","to","legLocationAtDistance","distance","line","pt","units","geometry","e","legElevationAtDistance","traversed","unshift","i","start","elevDistanceSpan","console","warn","pct","elevSpan","getElevationProfile","steps","unitConversion","minElev","maxElev","gain","loss","previous","step","elevation","elev","diff","second","first","convertedElevation","getTextWidth","text","font","canvas","document","createElement","context","getContext","metrics","measureText","width","getCompanyForNetwork","networkString","companies","find","co","id","getCompaniesLabelFromNetworks","network","filter","label","join","getTNCLocation","type","location","toFixed","calculatePhysicalActivity","walkDuration","bikeDuration","duration","caloriesBurned","calculateTncFares","maxTNCFare","minTNCFare","tncCurrencyCode"],"mappings":"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","sourcesContent":["import polyline from \"@mapbox/polyline\";\nimport {\n Company,\n Config,\n ElevationProfile,\n FlexBookingInfo,\n Itinerary,\n LatLngArray,\n Leg,\n Step\n} from \"@opentripplanner/types\";\nimport turfAlong from \"@turf/along\";\n\nimport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n} from \"./deprecated\";\n\nexport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n};\n\n// All OTP transit modes\nexport const transitModes = [\n \"TRAM\",\n \"BUS\",\n \"SUBWAY\",\n \"FERRY\",\n \"RAIL\",\n \"GONDOLA\"\n];\n\n/**\n * @param {config} config OTP-RR configuration object\n * @return {Array} List of all transit modes defined in config; otherwise default mode list\n */\n\nexport function getTransitModes(config: Config): string[] {\n if (!config || !config.modes || !config.modes.transitModes)\n return transitModes;\n\n return config.modes.transitModes.map(tm =>\n typeof tm !== \"string\" ? tm.mode : tm\n );\n}\n\nexport function isTransit(mode: string): boolean {\n return transitModes.includes(mode) || mode === \"TRANSIT\";\n}\n\n/**\n * Returns true if the leg pickup rules enabled which require\n * calling ahead for the service to run. \"mustPhone\" is the only\n * property of boardRule which encodes this info.\n */\nexport function isReservationRequired(leg: Leg): boolean {\n return leg.boardRule === \"mustPhone\";\n}\n/**\n * Returns true if the leg has continuous dropoff enabled which requires\n * asking the driver to let the user off. \"coordinateWithDriver\" is the only\n * property of alightRule which encodes this info.\n */\nexport function isContinuousDropoff(leg: Leg): boolean {\n return leg.alightRule === \"coordinateWithDriver\";\n}\n/**\n * The two rules checked by the above two functions are the only values\n * returned by OTP when a leg is a flex leg.\n */\nexport function isFlex(leg: Leg): boolean {\n return isReservationRequired(leg) || isContinuousDropoff(leg);\n}\n\nexport function isAdvanceBookingRequired(info: FlexBookingInfo): boolean {\n return info?.latestBookingTime?.daysPrior > 0;\n}\nexport function legDropoffRequiresAdvanceBooking(leg: Leg): boolean {\n return isAdvanceBookingRequired(leg.dropOffBookingInfo);\n}\n\nexport function isWalk(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"WALK\";\n}\n\nexport function isBicycle(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE\";\n}\n\nexport function isBicycleRent(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE_RENT\";\n}\n\nexport function isCar(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"CAR\");\n}\n\nexport function isMicromobility(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"MICROMOBILITY\") || mode.startsWith(\"SCOOTER\");\n}\n\nexport function isAccessMode(mode: string): boolean {\n return (\n isWalk(mode) ||\n isBicycle(mode) ||\n isBicycleRent(mode) ||\n isCar(mode) ||\n isMicromobility(mode)\n );\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are transit modes\n */\nexport function hasTransit(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isTransit(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are car-based modes\n */\nexport function hasCar(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isCar(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are bicycle-based modes\n */\nexport function hasBike(modesStr: string): boolean {\n return modesStr\n .split(\",\")\n .some(mode => isBicycle(mode) || isBicycleRent(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are micromobility-based modes\n */\nexport function hasMicromobility(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isMicromobility(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a hailing mode\n */\nexport function hasHail(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_HAIL\") > -1);\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a rental mode\n */\nexport function hasRental(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_RENT\") > -1);\n}\n\nexport function getMapColor(mode: string): string {\n mode = mode || this.get(\"mode\");\n if (mode === \"WALK\") return \"#444\";\n if (mode === \"BICYCLE\") return \"#0073e5\";\n if (mode === \"SUBWAY\") return \"#e60000\";\n if (mode === \"RAIL\") return \"#b00\";\n if (mode === \"BUS\") return \"#080\";\n if (mode === \"TRAM\") return \"#800\";\n if (mode === \"FERRY\") return \"#008\";\n if (mode === \"CAR\") return \"#444\";\n if (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") return \"#f5a729\";\n return \"#aaa\";\n}\n\nexport function toSentenceCase(str: string): string {\n if (str == null) {\n return \"\";\n }\n str = String(str);\n return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();\n}\n\n/**\n * Derive the company string based on mode and network associated with leg.\n */\nexport function getCompanyFromLeg(leg: Leg): string {\n if (!leg) return null;\n const { from, mode, rentedBike, rentedCar, rentedVehicle, tncData } = leg;\n if (mode === \"CAR\" && rentedCar) {\n return from.networks[0];\n }\n if (mode === \"CAR\" && tncData) {\n return tncData.company;\n }\n if (mode === \"BICYCLE\" && rentedBike && from.networks) {\n return from.networks[0];\n }\n if (\n (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") &&\n rentedVehicle &&\n from.networks\n ) {\n return from.networks[0];\n }\n return null;\n}\n\nexport function getItineraryBounds(itinerary: Itinerary): LatLngArray[] {\n let coords = [];\n itinerary.legs.forEach(leg => {\n const legCoords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map((c: number[]) => [c[1], c[0]]);\n coords = [...coords, ...legCoords];\n });\n return coords;\n}\n\n/**\n * Return a coords object that encloses the given leg's geometry.\n */\nexport function getLegBounds(leg: Leg): number[] {\n const coords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map(c => [c[1], c[0]]);\n\n // in certain cases, there might be zero-length coordinates in the leg\n // geometry. In these cases, build us an array of coordinates using the from\n // and to data of the leg.\n if (coords.length === 0) {\n coords.push([leg.from.lat, leg.from.lon], [leg.to.lat, leg.to.lon]);\n }\n return coords;\n}\n\n/* Returns an interpolated lat-lon at a specified distance along a leg */\n\nexport function legLocationAtDistance(leg: Leg, distance: number): number[] {\n if (!leg.legGeometry) return null;\n\n try {\n const line = polyline.toGeoJSON(leg.legGeometry.points);\n const pt = turfAlong(line, distance, { units: \"meters\" });\n if (pt && pt.geometry && pt.geometry.coordinates) {\n return [pt.geometry.coordinates[1], pt.geometry.coordinates[0]];\n }\n } catch (e) {\n // FIXME handle error!\n }\n\n return null;\n}\n\n/* Returns an interpolated elevation at a specified distance along a leg */\n\nexport function legElevationAtDistance(\n points: number[][],\n distance: number\n): number {\n // Iterate through the combined elevation profile\n let traversed = 0;\n // If first point distance is not zero, insert starting point at zero with\n // null elevation. Encountering this value should trigger the warning below.\n if (points[0][0] > 0) {\n points.unshift([0, null]);\n }\n for (let i = 1; i < points.length; i++) {\n const start = points[i - 1];\n const elevDistanceSpan = points[i][0] - start[0];\n if (distance >= traversed && distance <= traversed + elevDistanceSpan) {\n // Distance falls within this point and the previous one;\n // compute & return iterpolated elevation value\n if (start[1] === null) {\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n }\n const pct = (distance - traversed) / elevDistanceSpan;\n const elevSpan = points[i][1] - start[1];\n return start[1] + elevSpan * pct;\n }\n traversed += elevDistanceSpan;\n }\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n}\n\n// Iterate through the steps, building the array of elevation points and\n// keeping track of the minimum and maximum elevations reached\nexport function getElevationProfile(\n steps: Step[],\n unitConversion = 1\n): ElevationProfile {\n let minElev = 100000;\n let maxElev = -100000;\n let traversed = 0;\n let gain = 0;\n let loss = 0;\n let previous = null;\n const points = [];\n steps.forEach(step => {\n if (!step.elevation || step.elevation.length === 0) {\n traversed += step.distance;\n return;\n }\n for (let i = 0; i < step.elevation.length; i++) {\n const elev = step.elevation[i];\n if (previous) {\n const diff = (elev.second - previous.second) * unitConversion;\n if (diff > 0) gain += diff;\n else loss += diff;\n }\n if (i === 0 && elev.first !== 0) {\n // console.warn(`No elevation data available for step ${stepIndex}-${i} at beginning of segment`, elev)\n }\n const convertedElevation = elev.second * unitConversion;\n if (convertedElevation < minElev) minElev = convertedElevation;\n if (convertedElevation > maxElev) maxElev = convertedElevation;\n points.push([traversed + elev.first, elev.second]);\n // Insert \"filler\" point if the last point in elevation profile does not\n // reach the full distance of the step.\n if (i === step.elevation.length - 1 && elev.first !== step.distance) {\n // points.push([traversed + step.distance, elev.second])\n }\n previous = elev;\n }\n traversed += step.distance;\n });\n return { maxElev, minElev, points, traversed, gain, loss };\n}\n\n/**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @param {string} text The text to be rendered.\n * @param {string} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\nexport function getTextWidth(text: string, font = \"22px Arial\"): number {\n // Create custom type for function including re-used canvas object\n type GetTextWidth = typeof getTextWidth & { canvas: HTMLCanvasElement };\n\n // re-use canvas object for better performance\n const canvas =\n (getTextWidth as GetTextWidth).canvas ||\n ((getTextWidth as GetTextWidth).canvas = document.createElement(\"canvas\"));\n const context = canvas.getContext(\"2d\");\n context.font = font;\n const metrics = context.measureText(text);\n return metrics.width;\n}\n\n/**\n * Get the configured company object for the given network string if the company\n * has been defined in the provided companies array config.\n */\nexport function getCompanyForNetwork(\n networkString: string,\n companies: Company[] = []\n): Company {\n const company = companies.find(co => co.id === networkString);\n if (!company) {\n console.warn(\n `No company found in config.yml that matches rented vehicle network: ${networkString}`,\n companies\n );\n }\n return company;\n}\n\n/**\n * Get a string label to display from a list of vehicle rental networks.\n *\n * @param {Array<string>} networks A list of network ids.\n * @param {Array<object>} [companies=[]] An optional list of the companies config.\n * @return {string} A label for use in presentation on a website.\n */\nexport function getCompaniesLabelFromNetworks(\n networks: string[],\n companies: Company[] = []\n): string {\n return networks\n .map(network => getCompanyForNetwork(network, companies))\n .filter(co => !!co)\n .map(co => co.label)\n .join(\"/\");\n}\n\nexport function getTNCLocation(leg: Leg, type: string): string {\n const location = leg[type];\n return `${location.lat.toFixed(5)},${location.lon.toFixed(5)}`;\n}\n\nexport function calculatePhysicalActivity(\n itinerary: Itinerary\n): {\n bikeDuration: number;\n caloriesBurned: number;\n walkDuration: number;\n} {\n let walkDuration = 0;\n let bikeDuration = 0;\n itinerary.legs.forEach(leg => {\n if (leg.mode.startsWith(\"WALK\")) walkDuration += leg.duration;\n if (leg.mode.startsWith(\"BICYCLE\")) bikeDuration += leg.duration;\n });\n const caloriesBurned =\n (walkDuration / 3600) * 280 + (bikeDuration / 3600) * 290;\n return {\n bikeDuration,\n caloriesBurned,\n walkDuration\n };\n}\n\nexport function calculateTncFares(itinerary) {\n // TODO: don't rely on deprecated methods!\n // At the moment this is safe as none of these exported variables contain strings\n const { maxTNCFare, minTNCFare, tncCurrencyCode } = calculateFares(\n itinerary,\n true\n );\n return { maxTNCFare, minTNCFare, tncCurrencyCode };\n}\n"],"file":"itinerary.js"}
|
|
1
|
+
{"version":3,"sources":["../src/itinerary.ts"],"names":["polyline","turfAlong","calculateFares","getLegModeLabel","getModeForPlace","getPlaceName","getStepDirection","getStepInstructions","getStepStreetName","getTimeZoneOffset","getTransitFare","transitModes","getTransitModes","config","modes","map","tm","mode","isTransit","includes","isReservationRequired","leg","boardRule","isContinuousDropoff","alightRule","isFlex","isAdvanceBookingRequired","info","latestBookingTime","daysPrior","legDropoffRequiresAdvanceBooking","dropOffBookingInfo","isWalk","isBicycle","isBicycleRent","isCar","startsWith","isMicromobility","isAccessMode","hasTransit","modesStr","split","some","hasCar","hasBike","hasMicromobility","hasHail","indexOf","hasRental","getMapColor","get","toSentenceCase","str","String","charAt","toUpperCase","substr","toLowerCase","getCompanyFromLeg","from","rentedBike","rentedCar","rentedVehicle","tncData","networks","company","getItineraryBounds","itinerary","coords","legs","forEach","legCoords","toGeoJSON","legGeometry","points","coordinates","c","getLegBounds","length","push","lat","lon","to","legLocationAtDistance","distance","line","pt","units","geometry","e","legElevationAtDistance","traversed","unshift","i","start","elevDistanceSpan","console","warn","pct","elevSpan","getElevationProfile","steps","unitConversion","minElev","maxElev","gain","loss","previous","step","elevation","elev","diff","second","first","convertedElevation","getTextWidth","text","font","canvas","document","createElement","context","getContext","metrics","measureText","width","getCompanyForNetwork","networkString","companies","find","co","id","getCompaniesLabelFromNetworks","network","filter","label","join","getTNCLocation","type","location","toFixed","calculatePhysicalActivity","walkDuration","bikeDuration","duration","caloriesBurned","CARBON_INTENSITY_DEFAULTS","walk","bicycle","car","tram","subway","rail","bus","ferry","cable_car","gondola","funicular","transit","leg_switch","airplane","micromobility","calculateEmissions","carbonIntensity","carbonIntensityWithDefaults","totalCarbon","reduce","total","calculateTncFares","maxTNCFare","minTNCFare","tncCurrencyCode"],"mappings":"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","sourcesContent":["import polyline from \"@mapbox/polyline\";\nimport {\n Company,\n Config,\n ElevationProfile,\n FlexBookingInfo,\n Itinerary,\n LatLngArray,\n Leg,\n Step\n} from \"@opentripplanner/types\";\nimport turfAlong from \"@turf/along\";\n\nimport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n} from \"./deprecated\";\n\nexport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n};\n\n// All OTP transit modes\nexport const transitModes = [\n \"TRAM\",\n \"BUS\",\n \"SUBWAY\",\n \"FERRY\",\n \"RAIL\",\n \"GONDOLA\"\n];\n\n/**\n * @param {config} config OTP-RR configuration object\n * @return {Array} List of all transit modes defined in config; otherwise default mode list\n */\n\nexport function getTransitModes(config: Config): string[] {\n if (!config || !config.modes || !config.modes.transitModes)\n return transitModes;\n\n return config.modes.transitModes.map(tm =>\n typeof tm !== \"string\" ? tm.mode : tm\n );\n}\n\nexport function isTransit(mode: string): boolean {\n return transitModes.includes(mode) || mode === \"TRANSIT\";\n}\n\n/**\n * Returns true if the leg pickup rules enabled which require\n * calling ahead for the service to run. \"mustPhone\" is the only\n * property of boardRule which encodes this info.\n */\nexport function isReservationRequired(leg: Leg): boolean {\n return leg.boardRule === \"mustPhone\";\n}\n/**\n * Returns true if the leg has continuous dropoff enabled which requires\n * asking the driver to let the user off. \"coordinateWithDriver\" is the only\n * property of alightRule which encodes this info.\n */\nexport function isContinuousDropoff(leg: Leg): boolean {\n return leg.alightRule === \"coordinateWithDriver\";\n}\n/**\n * The two rules checked by the above two functions are the only values\n * returned by OTP when a leg is a flex leg.\n */\nexport function isFlex(leg: Leg): boolean {\n return isReservationRequired(leg) || isContinuousDropoff(leg);\n}\n\nexport function isAdvanceBookingRequired(info: FlexBookingInfo): boolean {\n return info?.latestBookingTime?.daysPrior > 0;\n}\nexport function legDropoffRequiresAdvanceBooking(leg: Leg): boolean {\n return isAdvanceBookingRequired(leg.dropOffBookingInfo);\n}\n\nexport function isWalk(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"WALK\";\n}\n\nexport function isBicycle(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE\";\n}\n\nexport function isBicycleRent(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE_RENT\";\n}\n\nexport function isCar(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"CAR\");\n}\n\nexport function isMicromobility(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"MICROMOBILITY\") || mode.startsWith(\"SCOOTER\");\n}\n\nexport function isAccessMode(mode: string): boolean {\n return (\n isWalk(mode) ||\n isBicycle(mode) ||\n isBicycleRent(mode) ||\n isCar(mode) ||\n isMicromobility(mode)\n );\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are transit modes\n */\nexport function hasTransit(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isTransit(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are car-based modes\n */\nexport function hasCar(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isCar(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are bicycle-based modes\n */\nexport function hasBike(modesStr: string): boolean {\n return modesStr\n .split(\",\")\n .some(mode => isBicycle(mode) || isBicycleRent(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are micromobility-based modes\n */\nexport function hasMicromobility(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isMicromobility(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a hailing mode\n */\nexport function hasHail(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_HAIL\") > -1);\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a rental mode\n */\nexport function hasRental(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_RENT\") > -1);\n}\n\nexport function getMapColor(mode: string): string {\n mode = mode || this.get(\"mode\");\n if (mode === \"WALK\") return \"#444\";\n if (mode === \"BICYCLE\") return \"#0073e5\";\n if (mode === \"SUBWAY\") return \"#e60000\";\n if (mode === \"RAIL\") return \"#b00\";\n if (mode === \"BUS\") return \"#080\";\n if (mode === \"TRAM\") return \"#800\";\n if (mode === \"FERRY\") return \"#008\";\n if (mode === \"CAR\") return \"#444\";\n if (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") return \"#f5a729\";\n return \"#aaa\";\n}\n\nexport function toSentenceCase(str: string): string {\n if (str == null) {\n return \"\";\n }\n str = String(str);\n return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();\n}\n\n/**\n * Derive the company string based on mode and network associated with leg.\n */\nexport function getCompanyFromLeg(leg: Leg): string {\n if (!leg) return null;\n const { from, mode, rentedBike, rentedCar, rentedVehicle, tncData } = leg;\n if (mode === \"CAR\" && rentedCar) {\n return from.networks[0];\n }\n if (mode === \"CAR\" && tncData) {\n return tncData.company;\n }\n if (mode === \"BICYCLE\" && rentedBike && from.networks) {\n return from.networks[0];\n }\n if (\n (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") &&\n rentedVehicle &&\n from.networks\n ) {\n return from.networks[0];\n }\n return null;\n}\n\nexport function getItineraryBounds(itinerary: Itinerary): LatLngArray[] {\n let coords = [];\n itinerary.legs.forEach(leg => {\n const legCoords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map((c: number[]) => [c[1], c[0]]);\n coords = [...coords, ...legCoords];\n });\n return coords;\n}\n\n/**\n * Return a coords object that encloses the given leg's geometry.\n */\nexport function getLegBounds(leg: Leg): number[] {\n const coords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map(c => [c[1], c[0]]);\n\n // in certain cases, there might be zero-length coordinates in the leg\n // geometry. In these cases, build us an array of coordinates using the from\n // and to data of the leg.\n if (coords.length === 0) {\n coords.push([leg.from.lat, leg.from.lon], [leg.to.lat, leg.to.lon]);\n }\n return coords;\n}\n\n/* Returns an interpolated lat-lon at a specified distance along a leg */\n\nexport function legLocationAtDistance(leg: Leg, distance: number): number[] {\n if (!leg.legGeometry) return null;\n\n try {\n const line = polyline.toGeoJSON(leg.legGeometry.points);\n const pt = turfAlong(line, distance, { units: \"meters\" });\n if (pt && pt.geometry && pt.geometry.coordinates) {\n return [pt.geometry.coordinates[1], pt.geometry.coordinates[0]];\n }\n } catch (e) {\n // FIXME handle error!\n }\n\n return null;\n}\n\n/* Returns an interpolated elevation at a specified distance along a leg */\n\nexport function legElevationAtDistance(\n points: number[][],\n distance: number\n): number {\n // Iterate through the combined elevation profile\n let traversed = 0;\n // If first point distance is not zero, insert starting point at zero with\n // null elevation. Encountering this value should trigger the warning below.\n if (points[0][0] > 0) {\n points.unshift([0, null]);\n }\n for (let i = 1; i < points.length; i++) {\n const start = points[i - 1];\n const elevDistanceSpan = points[i][0] - start[0];\n if (distance >= traversed && distance <= traversed + elevDistanceSpan) {\n // Distance falls within this point and the previous one;\n // compute & return iterpolated elevation value\n if (start[1] === null) {\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n }\n const pct = (distance - traversed) / elevDistanceSpan;\n const elevSpan = points[i][1] - start[1];\n return start[1] + elevSpan * pct;\n }\n traversed += elevDistanceSpan;\n }\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n}\n\n// Iterate through the steps, building the array of elevation points and\n// keeping track of the minimum and maximum elevations reached\nexport function getElevationProfile(\n steps: Step[],\n unitConversion = 1\n): ElevationProfile {\n let minElev = 100000;\n let maxElev = -100000;\n let traversed = 0;\n let gain = 0;\n let loss = 0;\n let previous = null;\n const points = [];\n steps.forEach(step => {\n if (!step.elevation || step.elevation.length === 0) {\n traversed += step.distance;\n return;\n }\n for (let i = 0; i < step.elevation.length; i++) {\n const elev = step.elevation[i];\n if (previous) {\n const diff = (elev.second - previous.second) * unitConversion;\n if (diff > 0) gain += diff;\n else loss += diff;\n }\n if (i === 0 && elev.first !== 0) {\n // console.warn(`No elevation data available for step ${stepIndex}-${i} at beginning of segment`, elev)\n }\n const convertedElevation = elev.second * unitConversion;\n if (convertedElevation < minElev) minElev = convertedElevation;\n if (convertedElevation > maxElev) maxElev = convertedElevation;\n points.push([traversed + elev.first, elev.second]);\n // Insert \"filler\" point if the last point in elevation profile does not\n // reach the full distance of the step.\n if (i === step.elevation.length - 1 && elev.first !== step.distance) {\n // points.push([traversed + step.distance, elev.second])\n }\n previous = elev;\n }\n traversed += step.distance;\n });\n return { maxElev, minElev, points, traversed, gain, loss };\n}\n\n/**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @param {string} text The text to be rendered.\n * @param {string} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\nexport function getTextWidth(text: string, font = \"22px Arial\"): number {\n // Create custom type for function including re-used canvas object\n type GetTextWidth = typeof getTextWidth & { canvas: HTMLCanvasElement };\n\n // re-use canvas object for better performance\n const canvas =\n (getTextWidth as GetTextWidth).canvas ||\n ((getTextWidth as GetTextWidth).canvas = document.createElement(\"canvas\"));\n const context = canvas.getContext(\"2d\");\n context.font = font;\n const metrics = context.measureText(text);\n return metrics.width;\n}\n\n/**\n * Get the configured company object for the given network string if the company\n * has been defined in the provided companies array config.\n */\nexport function getCompanyForNetwork(\n networkString: string,\n companies: Company[] = []\n): Company {\n const company = companies.find(co => co.id === networkString);\n if (!company) {\n console.warn(\n `No company found in config.yml that matches rented vehicle network: ${networkString}`,\n companies\n );\n }\n return company;\n}\n\n/**\n * Get a string label to display from a list of vehicle rental networks.\n *\n * @param {Array<string>} networks A list of network ids.\n * @param {Array<object>} [companies=[]] An optional list of the companies config.\n * @return {string} A label for use in presentation on a website.\n */\nexport function getCompaniesLabelFromNetworks(\n networks: string[],\n companies: Company[] = []\n): string {\n return networks\n .map(network => getCompanyForNetwork(network, companies))\n .filter(co => !!co)\n .map(co => co.label)\n .join(\"/\");\n}\n\nexport function getTNCLocation(leg: Leg, type: string): string {\n const location = leg[type];\n return `${location.lat.toFixed(5)},${location.lon.toFixed(5)}`;\n}\n\nexport function calculatePhysicalActivity(\n itinerary: Itinerary\n): {\n bikeDuration: number;\n caloriesBurned: number;\n walkDuration: number;\n} {\n let walkDuration = 0;\n let bikeDuration = 0;\n itinerary.legs.forEach(leg => {\n if (leg.mode.startsWith(\"WALK\")) walkDuration += leg.duration;\n if (leg.mode.startsWith(\"BICYCLE\")) bikeDuration += leg.duration;\n });\n const caloriesBurned =\n (walkDuration / 3600) * 280 + (bikeDuration / 3600) * 290;\n return {\n bikeDuration,\n caloriesBurned,\n walkDuration\n };\n}\n\n/**\n * Sources:\n * - https://www.itf-oecd.org/sites/default/files/docs/environmental-performance-new-mobility.pdf\n * - https://www.thrustcarbon.com/insights/how-to-calculate-emissions-from-a-ferry-journey\n * - https://www.itf-oecd.org/sites/default/files/life-cycle-assessment-calculations-2020.xlsx\n * Other values extrapolated.\n */\nconst CARBON_INTENSITY_DEFAULTS = {\n walk: 0.026,\n bicycle: 0.017,\n car: 0.162,\n tram: 0.066,\n subway: 0.066,\n rail: 0.066,\n bus: 0.09,\n ferry: 0.082,\n cable_car: 0.021,\n gondola: 0.021,\n funicular: 0.066,\n transit: 0.066,\n leg_switch: 0,\n airplane: 0.382,\n micromobility: 0.095\n};\n\n/**\n * @param {itinerary} itinerary OTP trip itinierary\n * @param {carbonIntensity} carbonIntensity carbon intensity by mode in grams/meter\n * @param {units} units units to be used in return value\n * @return Amount of carbon in chosen unit\n */\nexport function calculateEmissions(\n itinerary: Itinerary,\n carbonIntensity: Record<string, number> = {},\n units?: string\n): number {\n // Apply defaults for any values that we don't have.\n const carbonIntensityWithDefaults = {\n ...CARBON_INTENSITY_DEFAULTS,\n ...carbonIntensity\n };\n\n // Distance is in meters, totalCarbon is in grams\n const totalCarbon =\n itinerary?.legs?.reduce((total, leg) => {\n return (\n (leg.distance * carbonIntensityWithDefaults[leg.mode.toLowerCase()] ||\n 0) + total\n );\n }, 0) || 0;\n\n switch (units) {\n case \"ounce\":\n return totalCarbon / 28.35;\n case \"kilogram\":\n return totalCarbon / 1000;\n case \"pound\":\n return totalCarbon / 454;\n case \"gram\":\n default:\n return totalCarbon;\n }\n}\n\nexport function calculateTncFares(itinerary) {\n // TODO: don't rely on deprecated methods!\n // At the moment this is safe as none of these exported variables contain strings\n const { maxTNCFare, minTNCFare, tncCurrencyCode } = calculateFares(\n itinerary,\n true\n );\n return { maxTNCFare, minTNCFare, tncCurrencyCode };\n}\n"],"file":"itinerary.js"}
|
package/lib/itinerary.d.ts
CHANGED
|
@@ -105,6 +105,13 @@ export declare function calculatePhysicalActivity(itinerary: Itinerary): {
|
|
|
105
105
|
caloriesBurned: number;
|
|
106
106
|
walkDuration: number;
|
|
107
107
|
};
|
|
108
|
+
/**
|
|
109
|
+
* @param {itinerary} itinerary OTP trip itinierary
|
|
110
|
+
* @param {carbonIntensity} carbonIntensity carbon intensity by mode in grams/meter
|
|
111
|
+
* @param {units} units units to be used in return value
|
|
112
|
+
* @return Amount of carbon in chosen unit
|
|
113
|
+
*/
|
|
114
|
+
export declare function calculateEmissions(itinerary: Itinerary, carbonIntensity?: Record<string, number>, units?: string): number;
|
|
108
115
|
export declare function calculateTncFares(itinerary: any): {
|
|
109
116
|
maxTNCFare: any;
|
|
110
117
|
minTNCFare: any;
|
package/lib/itinerary.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"itinerary.d.ts","sourceRoot":"","sources":["../src/itinerary.ts"],"names":[],"mappings":"AACA,OAAO,EACL,OAAO,EACP,MAAM,EACN,gBAAgB,EAChB,eAAe,EACf,SAAS,EACT,WAAW,EACX,GAAG,EACH,IAAI,EACL,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACf,MAAM,cAAc,CAAC;AAEtB,OAAO,EACL,cAAc,EACd,eAAe,EACf,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACf,CAAC;AAGF,eAAO,MAAM,YAAY,UAOxB,CAAC;AAEF;;;GAGG;AAEH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAOxD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAEvD;AACD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAErD;AACD;;;GAGG;AACH,wBAAgB,MAAM,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAExC;AAED,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAEvE;AACD,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,GAAG,GAAG,OAAO,CAElE;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI5C;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI/C;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAInD;AAED,wBAAgB,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG3C;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrD;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAQlD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;GAGG;AACH,wBAAgB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAIjD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAYhD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAMlD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAoBlD;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW,EAAE,CAStE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,EAAE,CAY/C;AAID,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAc1E;AAID,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,QAAQ,EAAE,MAAM,GACf,MAAM,CAkCR;AAID,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,IAAI,EAAE,EACb,cAAc,SAAI,GACjB,gBAAgB,CAqClB;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAe,GAAG,MAAM,CAYtE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,aAAa,EAAE,MAAM,EACrB,SAAS,GAAE,OAAO,EAAO,GACxB,OAAO,CAST;AAED;;;;;;GAMG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,MAAM,EAAE,EAClB,SAAS,GAAE,OAAO,EAAO,GACxB,MAAM,CAMR;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG7D;AAED,wBAAgB,yBAAyB,CACvC,SAAS,EAAE,SAAS,GACnB;IACD,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACtB,CAcA;AAED,wBAAgB,iBAAiB,CAAC,SAAS,KAAA;;;;EAQ1C"}
|
|
1
|
+
{"version":3,"file":"itinerary.d.ts","sourceRoot":"","sources":["../src/itinerary.ts"],"names":[],"mappings":"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"}
|
package/lib/itinerary.js
CHANGED
|
@@ -37,6 +37,7 @@ exports.getCompanyForNetwork = getCompanyForNetwork;
|
|
|
37
37
|
exports.getCompaniesLabelFromNetworks = getCompaniesLabelFromNetworks;
|
|
38
38
|
exports.getTNCLocation = getTNCLocation;
|
|
39
39
|
exports.calculatePhysicalActivity = calculatePhysicalActivity;
|
|
40
|
+
exports.calculateEmissions = calculateEmissions;
|
|
40
41
|
exports.calculateTncFares = calculateTncFares;
|
|
41
42
|
Object.defineProperty(exports, "calculateFares", {
|
|
42
43
|
enumerable: true,
|
|
@@ -496,6 +497,66 @@ function calculatePhysicalActivity(itinerary) {
|
|
|
496
497
|
walkDuration
|
|
497
498
|
};
|
|
498
499
|
}
|
|
500
|
+
/**
|
|
501
|
+
* Sources:
|
|
502
|
+
* - https://www.itf-oecd.org/sites/default/files/docs/environmental-performance-new-mobility.pdf
|
|
503
|
+
* - https://www.thrustcarbon.com/insights/how-to-calculate-emissions-from-a-ferry-journey
|
|
504
|
+
* - https://www.itf-oecd.org/sites/default/files/life-cycle-assessment-calculations-2020.xlsx
|
|
505
|
+
* Other values extrapolated.
|
|
506
|
+
*/
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
const CARBON_INTENSITY_DEFAULTS = {
|
|
510
|
+
walk: 0.026,
|
|
511
|
+
bicycle: 0.017,
|
|
512
|
+
car: 0.162,
|
|
513
|
+
tram: 0.066,
|
|
514
|
+
subway: 0.066,
|
|
515
|
+
rail: 0.066,
|
|
516
|
+
bus: 0.09,
|
|
517
|
+
ferry: 0.082,
|
|
518
|
+
cable_car: 0.021,
|
|
519
|
+
gondola: 0.021,
|
|
520
|
+
funicular: 0.066,
|
|
521
|
+
transit: 0.066,
|
|
522
|
+
leg_switch: 0,
|
|
523
|
+
airplane: 0.382,
|
|
524
|
+
micromobility: 0.095
|
|
525
|
+
};
|
|
526
|
+
/**
|
|
527
|
+
* @param {itinerary} itinerary OTP trip itinierary
|
|
528
|
+
* @param {carbonIntensity} carbonIntensity carbon intensity by mode in grams/meter
|
|
529
|
+
* @param {units} units units to be used in return value
|
|
530
|
+
* @return Amount of carbon in chosen unit
|
|
531
|
+
*/
|
|
532
|
+
|
|
533
|
+
function calculateEmissions(itinerary, carbonIntensity = {}, units) {
|
|
534
|
+
var _itinerary$legs;
|
|
535
|
+
|
|
536
|
+
// Apply defaults for any values that we don't have.
|
|
537
|
+
const carbonIntensityWithDefaults = { ...CARBON_INTENSITY_DEFAULTS,
|
|
538
|
+
...carbonIntensity
|
|
539
|
+
}; // Distance is in meters, totalCarbon is in grams
|
|
540
|
+
|
|
541
|
+
const totalCarbon = (itinerary === null || itinerary === void 0 ? void 0 : (_itinerary$legs = itinerary.legs) === null || _itinerary$legs === void 0 ? void 0 : _itinerary$legs.reduce((total, leg) => {
|
|
542
|
+
return (leg.distance * carbonIntensityWithDefaults[leg.mode.toLowerCase()] || 0) + total;
|
|
543
|
+
}, 0)) || 0;
|
|
544
|
+
|
|
545
|
+
switch (units) {
|
|
546
|
+
case "ounce":
|
|
547
|
+
return totalCarbon / 28.35;
|
|
548
|
+
|
|
549
|
+
case "kilogram":
|
|
550
|
+
return totalCarbon / 1000;
|
|
551
|
+
|
|
552
|
+
case "pound":
|
|
553
|
+
return totalCarbon / 454;
|
|
554
|
+
|
|
555
|
+
case "gram":
|
|
556
|
+
default:
|
|
557
|
+
return totalCarbon;
|
|
558
|
+
}
|
|
559
|
+
}
|
|
499
560
|
|
|
500
561
|
function calculateTncFares(itinerary) {
|
|
501
562
|
// TODO: don't rely on deprecated methods!
|
package/lib/itinerary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/itinerary.ts"],"names":["transitModes","getTransitModes","config","modes","map","tm","mode","isTransit","includes","isReservationRequired","leg","boardRule","isContinuousDropoff","alightRule","isFlex","isAdvanceBookingRequired","info","latestBookingTime","daysPrior","legDropoffRequiresAdvanceBooking","dropOffBookingInfo","isWalk","isBicycle","isBicycleRent","isCar","startsWith","isMicromobility","isAccessMode","hasTransit","modesStr","split","some","hasCar","hasBike","hasMicromobility","hasHail","indexOf","hasRental","getMapColor","get","toSentenceCase","str","String","charAt","toUpperCase","substr","toLowerCase","getCompanyFromLeg","from","rentedBike","rentedCar","rentedVehicle","tncData","networks","company","getItineraryBounds","itinerary","coords","legs","forEach","legCoords","polyline","toGeoJSON","legGeometry","points","coordinates","c","getLegBounds","length","push","lat","lon","to","legLocationAtDistance","distance","line","pt","units","geometry","e","legElevationAtDistance","traversed","unshift","i","start","elevDistanceSpan","console","warn","pct","elevSpan","getElevationProfile","steps","unitConversion","minElev","maxElev","gain","loss","previous","step","elevation","elev","diff","second","first","convertedElevation","getTextWidth","text","font","canvas","document","createElement","context","getContext","metrics","measureText","width","getCompanyForNetwork","networkString","companies","find","co","id","getCompaniesLabelFromNetworks","network","filter","label","join","getTNCLocation","type","location","toFixed","calculatePhysicalActivity","walkDuration","bikeDuration","duration","caloriesBurned","calculateTncFares","maxTNCFare","minTNCFare","tncCurrencyCode"],"mappings":"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","sourcesContent":["import polyline from \"@mapbox/polyline\";\nimport {\n Company,\n Config,\n ElevationProfile,\n FlexBookingInfo,\n Itinerary,\n LatLngArray,\n Leg,\n Step\n} from \"@opentripplanner/types\";\nimport turfAlong from \"@turf/along\";\n\nimport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n} from \"./deprecated\";\n\nexport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n};\n\n// All OTP transit modes\nexport const transitModes = [\n \"TRAM\",\n \"BUS\",\n \"SUBWAY\",\n \"FERRY\",\n \"RAIL\",\n \"GONDOLA\"\n];\n\n/**\n * @param {config} config OTP-RR configuration object\n * @return {Array} List of all transit modes defined in config; otherwise default mode list\n */\n\nexport function getTransitModes(config: Config): string[] {\n if (!config || !config.modes || !config.modes.transitModes)\n return transitModes;\n\n return config.modes.transitModes.map(tm =>\n typeof tm !== \"string\" ? tm.mode : tm\n );\n}\n\nexport function isTransit(mode: string): boolean {\n return transitModes.includes(mode) || mode === \"TRANSIT\";\n}\n\n/**\n * Returns true if the leg pickup rules enabled which require\n * calling ahead for the service to run. \"mustPhone\" is the only\n * property of boardRule which encodes this info.\n */\nexport function isReservationRequired(leg: Leg): boolean {\n return leg.boardRule === \"mustPhone\";\n}\n/**\n * Returns true if the leg has continuous dropoff enabled which requires\n * asking the driver to let the user off. \"coordinateWithDriver\" is the only\n * property of alightRule which encodes this info.\n */\nexport function isContinuousDropoff(leg: Leg): boolean {\n return leg.alightRule === \"coordinateWithDriver\";\n}\n/**\n * The two rules checked by the above two functions are the only values\n * returned by OTP when a leg is a flex leg.\n */\nexport function isFlex(leg: Leg): boolean {\n return isReservationRequired(leg) || isContinuousDropoff(leg);\n}\n\nexport function isAdvanceBookingRequired(info: FlexBookingInfo): boolean {\n return info?.latestBookingTime?.daysPrior > 0;\n}\nexport function legDropoffRequiresAdvanceBooking(leg: Leg): boolean {\n return isAdvanceBookingRequired(leg.dropOffBookingInfo);\n}\n\nexport function isWalk(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"WALK\";\n}\n\nexport function isBicycle(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE\";\n}\n\nexport function isBicycleRent(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE_RENT\";\n}\n\nexport function isCar(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"CAR\");\n}\n\nexport function isMicromobility(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"MICROMOBILITY\") || mode.startsWith(\"SCOOTER\");\n}\n\nexport function isAccessMode(mode: string): boolean {\n return (\n isWalk(mode) ||\n isBicycle(mode) ||\n isBicycleRent(mode) ||\n isCar(mode) ||\n isMicromobility(mode)\n );\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are transit modes\n */\nexport function hasTransit(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isTransit(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are car-based modes\n */\nexport function hasCar(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isCar(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are bicycle-based modes\n */\nexport function hasBike(modesStr: string): boolean {\n return modesStr\n .split(\",\")\n .some(mode => isBicycle(mode) || isBicycleRent(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are micromobility-based modes\n */\nexport function hasMicromobility(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isMicromobility(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a hailing mode\n */\nexport function hasHail(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_HAIL\") > -1);\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a rental mode\n */\nexport function hasRental(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_RENT\") > -1);\n}\n\nexport function getMapColor(mode: string): string {\n mode = mode || this.get(\"mode\");\n if (mode === \"WALK\") return \"#444\";\n if (mode === \"BICYCLE\") return \"#0073e5\";\n if (mode === \"SUBWAY\") return \"#e60000\";\n if (mode === \"RAIL\") return \"#b00\";\n if (mode === \"BUS\") return \"#080\";\n if (mode === \"TRAM\") return \"#800\";\n if (mode === \"FERRY\") return \"#008\";\n if (mode === \"CAR\") return \"#444\";\n if (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") return \"#f5a729\";\n return \"#aaa\";\n}\n\nexport function toSentenceCase(str: string): string {\n if (str == null) {\n return \"\";\n }\n str = String(str);\n return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();\n}\n\n/**\n * Derive the company string based on mode and network associated with leg.\n */\nexport function getCompanyFromLeg(leg: Leg): string {\n if (!leg) return null;\n const { from, mode, rentedBike, rentedCar, rentedVehicle, tncData } = leg;\n if (mode === \"CAR\" && rentedCar) {\n return from.networks[0];\n }\n if (mode === \"CAR\" && tncData) {\n return tncData.company;\n }\n if (mode === \"BICYCLE\" && rentedBike && from.networks) {\n return from.networks[0];\n }\n if (\n (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") &&\n rentedVehicle &&\n from.networks\n ) {\n return from.networks[0];\n }\n return null;\n}\n\nexport function getItineraryBounds(itinerary: Itinerary): LatLngArray[] {\n let coords = [];\n itinerary.legs.forEach(leg => {\n const legCoords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map((c: number[]) => [c[1], c[0]]);\n coords = [...coords, ...legCoords];\n });\n return coords;\n}\n\n/**\n * Return a coords object that encloses the given leg's geometry.\n */\nexport function getLegBounds(leg: Leg): number[] {\n const coords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map(c => [c[1], c[0]]);\n\n // in certain cases, there might be zero-length coordinates in the leg\n // geometry. In these cases, build us an array of coordinates using the from\n // and to data of the leg.\n if (coords.length === 0) {\n coords.push([leg.from.lat, leg.from.lon], [leg.to.lat, leg.to.lon]);\n }\n return coords;\n}\n\n/* Returns an interpolated lat-lon at a specified distance along a leg */\n\nexport function legLocationAtDistance(leg: Leg, distance: number): number[] {\n if (!leg.legGeometry) return null;\n\n try {\n const line = polyline.toGeoJSON(leg.legGeometry.points);\n const pt = turfAlong(line, distance, { units: \"meters\" });\n if (pt && pt.geometry && pt.geometry.coordinates) {\n return [pt.geometry.coordinates[1], pt.geometry.coordinates[0]];\n }\n } catch (e) {\n // FIXME handle error!\n }\n\n return null;\n}\n\n/* Returns an interpolated elevation at a specified distance along a leg */\n\nexport function legElevationAtDistance(\n points: number[][],\n distance: number\n): number {\n // Iterate through the combined elevation profile\n let traversed = 0;\n // If first point distance is not zero, insert starting point at zero with\n // null elevation. Encountering this value should trigger the warning below.\n if (points[0][0] > 0) {\n points.unshift([0, null]);\n }\n for (let i = 1; i < points.length; i++) {\n const start = points[i - 1];\n const elevDistanceSpan = points[i][0] - start[0];\n if (distance >= traversed && distance <= traversed + elevDistanceSpan) {\n // Distance falls within this point and the previous one;\n // compute & return iterpolated elevation value\n if (start[1] === null) {\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n }\n const pct = (distance - traversed) / elevDistanceSpan;\n const elevSpan = points[i][1] - start[1];\n return start[1] + elevSpan * pct;\n }\n traversed += elevDistanceSpan;\n }\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n}\n\n// Iterate through the steps, building the array of elevation points and\n// keeping track of the minimum and maximum elevations reached\nexport function getElevationProfile(\n steps: Step[],\n unitConversion = 1\n): ElevationProfile {\n let minElev = 100000;\n let maxElev = -100000;\n let traversed = 0;\n let gain = 0;\n let loss = 0;\n let previous = null;\n const points = [];\n steps.forEach(step => {\n if (!step.elevation || step.elevation.length === 0) {\n traversed += step.distance;\n return;\n }\n for (let i = 0; i < step.elevation.length; i++) {\n const elev = step.elevation[i];\n if (previous) {\n const diff = (elev.second - previous.second) * unitConversion;\n if (diff > 0) gain += diff;\n else loss += diff;\n }\n if (i === 0 && elev.first !== 0) {\n // console.warn(`No elevation data available for step ${stepIndex}-${i} at beginning of segment`, elev)\n }\n const convertedElevation = elev.second * unitConversion;\n if (convertedElevation < minElev) minElev = convertedElevation;\n if (convertedElevation > maxElev) maxElev = convertedElevation;\n points.push([traversed + elev.first, elev.second]);\n // Insert \"filler\" point if the last point in elevation profile does not\n // reach the full distance of the step.\n if (i === step.elevation.length - 1 && elev.first !== step.distance) {\n // points.push([traversed + step.distance, elev.second])\n }\n previous = elev;\n }\n traversed += step.distance;\n });\n return { maxElev, minElev, points, traversed, gain, loss };\n}\n\n/**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @param {string} text The text to be rendered.\n * @param {string} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\nexport function getTextWidth(text: string, font = \"22px Arial\"): number {\n // Create custom type for function including re-used canvas object\n type GetTextWidth = typeof getTextWidth & { canvas: HTMLCanvasElement };\n\n // re-use canvas object for better performance\n const canvas =\n (getTextWidth as GetTextWidth).canvas ||\n ((getTextWidth as GetTextWidth).canvas = document.createElement(\"canvas\"));\n const context = canvas.getContext(\"2d\");\n context.font = font;\n const metrics = context.measureText(text);\n return metrics.width;\n}\n\n/**\n * Get the configured company object for the given network string if the company\n * has been defined in the provided companies array config.\n */\nexport function getCompanyForNetwork(\n networkString: string,\n companies: Company[] = []\n): Company {\n const company = companies.find(co => co.id === networkString);\n if (!company) {\n console.warn(\n `No company found in config.yml that matches rented vehicle network: ${networkString}`,\n companies\n );\n }\n return company;\n}\n\n/**\n * Get a string label to display from a list of vehicle rental networks.\n *\n * @param {Array<string>} networks A list of network ids.\n * @param {Array<object>} [companies=[]] An optional list of the companies config.\n * @return {string} A label for use in presentation on a website.\n */\nexport function getCompaniesLabelFromNetworks(\n networks: string[],\n companies: Company[] = []\n): string {\n return networks\n .map(network => getCompanyForNetwork(network, companies))\n .filter(co => !!co)\n .map(co => co.label)\n .join(\"/\");\n}\n\nexport function getTNCLocation(leg: Leg, type: string): string {\n const location = leg[type];\n return `${location.lat.toFixed(5)},${location.lon.toFixed(5)}`;\n}\n\nexport function calculatePhysicalActivity(\n itinerary: Itinerary\n): {\n bikeDuration: number;\n caloriesBurned: number;\n walkDuration: number;\n} {\n let walkDuration = 0;\n let bikeDuration = 0;\n itinerary.legs.forEach(leg => {\n if (leg.mode.startsWith(\"WALK\")) walkDuration += leg.duration;\n if (leg.mode.startsWith(\"BICYCLE\")) bikeDuration += leg.duration;\n });\n const caloriesBurned =\n (walkDuration / 3600) * 280 + (bikeDuration / 3600) * 290;\n return {\n bikeDuration,\n caloriesBurned,\n walkDuration\n };\n}\n\nexport function calculateTncFares(itinerary) {\n // TODO: don't rely on deprecated methods!\n // At the moment this is safe as none of these exported variables contain strings\n const { maxTNCFare, minTNCFare, tncCurrencyCode } = calculateFares(\n itinerary,\n true\n );\n return { maxTNCFare, minTNCFare, tncCurrencyCode };\n}\n"],"file":"itinerary.js"}
|
|
1
|
+
{"version":3,"sources":["../src/itinerary.ts"],"names":["transitModes","getTransitModes","config","modes","map","tm","mode","isTransit","includes","isReservationRequired","leg","boardRule","isContinuousDropoff","alightRule","isFlex","isAdvanceBookingRequired","info","latestBookingTime","daysPrior","legDropoffRequiresAdvanceBooking","dropOffBookingInfo","isWalk","isBicycle","isBicycleRent","isCar","startsWith","isMicromobility","isAccessMode","hasTransit","modesStr","split","some","hasCar","hasBike","hasMicromobility","hasHail","indexOf","hasRental","getMapColor","get","toSentenceCase","str","String","charAt","toUpperCase","substr","toLowerCase","getCompanyFromLeg","from","rentedBike","rentedCar","rentedVehicle","tncData","networks","company","getItineraryBounds","itinerary","coords","legs","forEach","legCoords","polyline","toGeoJSON","legGeometry","points","coordinates","c","getLegBounds","length","push","lat","lon","to","legLocationAtDistance","distance","line","pt","units","geometry","e","legElevationAtDistance","traversed","unshift","i","start","elevDistanceSpan","console","warn","pct","elevSpan","getElevationProfile","steps","unitConversion","minElev","maxElev","gain","loss","previous","step","elevation","elev","diff","second","first","convertedElevation","getTextWidth","text","font","canvas","document","createElement","context","getContext","metrics","measureText","width","getCompanyForNetwork","networkString","companies","find","co","id","getCompaniesLabelFromNetworks","network","filter","label","join","getTNCLocation","type","location","toFixed","calculatePhysicalActivity","walkDuration","bikeDuration","duration","caloriesBurned","CARBON_INTENSITY_DEFAULTS","walk","bicycle","car","tram","subway","rail","bus","ferry","cable_car","gondola","funicular","transit","leg_switch","airplane","micromobility","calculateEmissions","carbonIntensity","carbonIntensityWithDefaults","totalCarbon","reduce","total","calculateTncFares","maxTNCFare","minTNCFare","tncCurrencyCode"],"mappings":"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","sourcesContent":["import polyline from \"@mapbox/polyline\";\nimport {\n Company,\n Config,\n ElevationProfile,\n FlexBookingInfo,\n Itinerary,\n LatLngArray,\n Leg,\n Step\n} from \"@opentripplanner/types\";\nimport turfAlong from \"@turf/along\";\n\nimport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n} from \"./deprecated\";\n\nexport {\n calculateFares,\n getLegModeLabel,\n getModeForPlace,\n getPlaceName,\n getStepDirection,\n getStepInstructions,\n getStepStreetName,\n getTimeZoneOffset,\n getTransitFare\n};\n\n// All OTP transit modes\nexport const transitModes = [\n \"TRAM\",\n \"BUS\",\n \"SUBWAY\",\n \"FERRY\",\n \"RAIL\",\n \"GONDOLA\"\n];\n\n/**\n * @param {config} config OTP-RR configuration object\n * @return {Array} List of all transit modes defined in config; otherwise default mode list\n */\n\nexport function getTransitModes(config: Config): string[] {\n if (!config || !config.modes || !config.modes.transitModes)\n return transitModes;\n\n return config.modes.transitModes.map(tm =>\n typeof tm !== \"string\" ? tm.mode : tm\n );\n}\n\nexport function isTransit(mode: string): boolean {\n return transitModes.includes(mode) || mode === \"TRANSIT\";\n}\n\n/**\n * Returns true if the leg pickup rules enabled which require\n * calling ahead for the service to run. \"mustPhone\" is the only\n * property of boardRule which encodes this info.\n */\nexport function isReservationRequired(leg: Leg): boolean {\n return leg.boardRule === \"mustPhone\";\n}\n/**\n * Returns true if the leg has continuous dropoff enabled which requires\n * asking the driver to let the user off. \"coordinateWithDriver\" is the only\n * property of alightRule which encodes this info.\n */\nexport function isContinuousDropoff(leg: Leg): boolean {\n return leg.alightRule === \"coordinateWithDriver\";\n}\n/**\n * The two rules checked by the above two functions are the only values\n * returned by OTP when a leg is a flex leg.\n */\nexport function isFlex(leg: Leg): boolean {\n return isReservationRequired(leg) || isContinuousDropoff(leg);\n}\n\nexport function isAdvanceBookingRequired(info: FlexBookingInfo): boolean {\n return info?.latestBookingTime?.daysPrior > 0;\n}\nexport function legDropoffRequiresAdvanceBooking(leg: Leg): boolean {\n return isAdvanceBookingRequired(leg.dropOffBookingInfo);\n}\n\nexport function isWalk(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"WALK\";\n}\n\nexport function isBicycle(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE\";\n}\n\nexport function isBicycleRent(mode: string): boolean {\n if (!mode) return false;\n\n return mode === \"BICYCLE_RENT\";\n}\n\nexport function isCar(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"CAR\");\n}\n\nexport function isMicromobility(mode: string): boolean {\n if (!mode) return false;\n return mode.startsWith(\"MICROMOBILITY\") || mode.startsWith(\"SCOOTER\");\n}\n\nexport function isAccessMode(mode: string): boolean {\n return (\n isWalk(mode) ||\n isBicycle(mode) ||\n isBicycleRent(mode) ||\n isCar(mode) ||\n isMicromobility(mode)\n );\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are transit modes\n */\nexport function hasTransit(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isTransit(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are car-based modes\n */\nexport function hasCar(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isCar(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are bicycle-based modes\n */\nexport function hasBike(modesStr: string): boolean {\n return modesStr\n .split(\",\")\n .some(mode => isBicycle(mode) || isBicycleRent(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes are micromobility-based modes\n */\nexport function hasMicromobility(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => isMicromobility(mode));\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a hailing mode\n */\nexport function hasHail(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_HAIL\") > -1);\n}\n\n/**\n * @param {string} modesStr a comma-separated list of OTP modes\n * @return {boolean} whether any of the modes is a rental mode\n */\nexport function hasRental(modesStr: string): boolean {\n return modesStr.split(\",\").some(mode => mode.indexOf(\"_RENT\") > -1);\n}\n\nexport function getMapColor(mode: string): string {\n mode = mode || this.get(\"mode\");\n if (mode === \"WALK\") return \"#444\";\n if (mode === \"BICYCLE\") return \"#0073e5\";\n if (mode === \"SUBWAY\") return \"#e60000\";\n if (mode === \"RAIL\") return \"#b00\";\n if (mode === \"BUS\") return \"#080\";\n if (mode === \"TRAM\") return \"#800\";\n if (mode === \"FERRY\") return \"#008\";\n if (mode === \"CAR\") return \"#444\";\n if (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") return \"#f5a729\";\n return \"#aaa\";\n}\n\nexport function toSentenceCase(str: string): string {\n if (str == null) {\n return \"\";\n }\n str = String(str);\n return str.charAt(0).toUpperCase() + str.substr(1).toLowerCase();\n}\n\n/**\n * Derive the company string based on mode and network associated with leg.\n */\nexport function getCompanyFromLeg(leg: Leg): string {\n if (!leg) return null;\n const { from, mode, rentedBike, rentedCar, rentedVehicle, tncData } = leg;\n if (mode === \"CAR\" && rentedCar) {\n return from.networks[0];\n }\n if (mode === \"CAR\" && tncData) {\n return tncData.company;\n }\n if (mode === \"BICYCLE\" && rentedBike && from.networks) {\n return from.networks[0];\n }\n if (\n (mode === \"MICROMOBILITY\" || mode === \"SCOOTER\") &&\n rentedVehicle &&\n from.networks\n ) {\n return from.networks[0];\n }\n return null;\n}\n\nexport function getItineraryBounds(itinerary: Itinerary): LatLngArray[] {\n let coords = [];\n itinerary.legs.forEach(leg => {\n const legCoords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map((c: number[]) => [c[1], c[0]]);\n coords = [...coords, ...legCoords];\n });\n return coords;\n}\n\n/**\n * Return a coords object that encloses the given leg's geometry.\n */\nexport function getLegBounds(leg: Leg): number[] {\n const coords = polyline\n .toGeoJSON(leg.legGeometry.points)\n .coordinates.map(c => [c[1], c[0]]);\n\n // in certain cases, there might be zero-length coordinates in the leg\n // geometry. In these cases, build us an array of coordinates using the from\n // and to data of the leg.\n if (coords.length === 0) {\n coords.push([leg.from.lat, leg.from.lon], [leg.to.lat, leg.to.lon]);\n }\n return coords;\n}\n\n/* Returns an interpolated lat-lon at a specified distance along a leg */\n\nexport function legLocationAtDistance(leg: Leg, distance: number): number[] {\n if (!leg.legGeometry) return null;\n\n try {\n const line = polyline.toGeoJSON(leg.legGeometry.points);\n const pt = turfAlong(line, distance, { units: \"meters\" });\n if (pt && pt.geometry && pt.geometry.coordinates) {\n return [pt.geometry.coordinates[1], pt.geometry.coordinates[0]];\n }\n } catch (e) {\n // FIXME handle error!\n }\n\n return null;\n}\n\n/* Returns an interpolated elevation at a specified distance along a leg */\n\nexport function legElevationAtDistance(\n points: number[][],\n distance: number\n): number {\n // Iterate through the combined elevation profile\n let traversed = 0;\n // If first point distance is not zero, insert starting point at zero with\n // null elevation. Encountering this value should trigger the warning below.\n if (points[0][0] > 0) {\n points.unshift([0, null]);\n }\n for (let i = 1; i < points.length; i++) {\n const start = points[i - 1];\n const elevDistanceSpan = points[i][0] - start[0];\n if (distance >= traversed && distance <= traversed + elevDistanceSpan) {\n // Distance falls within this point and the previous one;\n // compute & return iterpolated elevation value\n if (start[1] === null) {\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n }\n const pct = (distance - traversed) / elevDistanceSpan;\n const elevSpan = points[i][1] - start[1];\n return start[1] + elevSpan * pct;\n }\n traversed += elevDistanceSpan;\n }\n console.warn(\n \"Elevation value does not exist for distance.\",\n distance,\n traversed\n );\n return null;\n}\n\n// Iterate through the steps, building the array of elevation points and\n// keeping track of the minimum and maximum elevations reached\nexport function getElevationProfile(\n steps: Step[],\n unitConversion = 1\n): ElevationProfile {\n let minElev = 100000;\n let maxElev = -100000;\n let traversed = 0;\n let gain = 0;\n let loss = 0;\n let previous = null;\n const points = [];\n steps.forEach(step => {\n if (!step.elevation || step.elevation.length === 0) {\n traversed += step.distance;\n return;\n }\n for (let i = 0; i < step.elevation.length; i++) {\n const elev = step.elevation[i];\n if (previous) {\n const diff = (elev.second - previous.second) * unitConversion;\n if (diff > 0) gain += diff;\n else loss += diff;\n }\n if (i === 0 && elev.first !== 0) {\n // console.warn(`No elevation data available for step ${stepIndex}-${i} at beginning of segment`, elev)\n }\n const convertedElevation = elev.second * unitConversion;\n if (convertedElevation < minElev) minElev = convertedElevation;\n if (convertedElevation > maxElev) maxElev = convertedElevation;\n points.push([traversed + elev.first, elev.second]);\n // Insert \"filler\" point if the last point in elevation profile does not\n // reach the full distance of the step.\n if (i === step.elevation.length - 1 && elev.first !== step.distance) {\n // points.push([traversed + step.distance, elev.second])\n }\n previous = elev;\n }\n traversed += step.distance;\n });\n return { maxElev, minElev, points, traversed, gain, loss };\n}\n\n/**\n * Uses canvas.measureText to compute and return the width of the given text of given font in pixels.\n *\n * @param {string} text The text to be rendered.\n * @param {string} font The css font descriptor that text is to be rendered with (e.g. \"bold 14px verdana\").\n *\n * @see https://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393\n */\nexport function getTextWidth(text: string, font = \"22px Arial\"): number {\n // Create custom type for function including re-used canvas object\n type GetTextWidth = typeof getTextWidth & { canvas: HTMLCanvasElement };\n\n // re-use canvas object for better performance\n const canvas =\n (getTextWidth as GetTextWidth).canvas ||\n ((getTextWidth as GetTextWidth).canvas = document.createElement(\"canvas\"));\n const context = canvas.getContext(\"2d\");\n context.font = font;\n const metrics = context.measureText(text);\n return metrics.width;\n}\n\n/**\n * Get the configured company object for the given network string if the company\n * has been defined in the provided companies array config.\n */\nexport function getCompanyForNetwork(\n networkString: string,\n companies: Company[] = []\n): Company {\n const company = companies.find(co => co.id === networkString);\n if (!company) {\n console.warn(\n `No company found in config.yml that matches rented vehicle network: ${networkString}`,\n companies\n );\n }\n return company;\n}\n\n/**\n * Get a string label to display from a list of vehicle rental networks.\n *\n * @param {Array<string>} networks A list of network ids.\n * @param {Array<object>} [companies=[]] An optional list of the companies config.\n * @return {string} A label for use in presentation on a website.\n */\nexport function getCompaniesLabelFromNetworks(\n networks: string[],\n companies: Company[] = []\n): string {\n return networks\n .map(network => getCompanyForNetwork(network, companies))\n .filter(co => !!co)\n .map(co => co.label)\n .join(\"/\");\n}\n\nexport function getTNCLocation(leg: Leg, type: string): string {\n const location = leg[type];\n return `${location.lat.toFixed(5)},${location.lon.toFixed(5)}`;\n}\n\nexport function calculatePhysicalActivity(\n itinerary: Itinerary\n): {\n bikeDuration: number;\n caloriesBurned: number;\n walkDuration: number;\n} {\n let walkDuration = 0;\n let bikeDuration = 0;\n itinerary.legs.forEach(leg => {\n if (leg.mode.startsWith(\"WALK\")) walkDuration += leg.duration;\n if (leg.mode.startsWith(\"BICYCLE\")) bikeDuration += leg.duration;\n });\n const caloriesBurned =\n (walkDuration / 3600) * 280 + (bikeDuration / 3600) * 290;\n return {\n bikeDuration,\n caloriesBurned,\n walkDuration\n };\n}\n\n/**\n * Sources:\n * - https://www.itf-oecd.org/sites/default/files/docs/environmental-performance-new-mobility.pdf\n * - https://www.thrustcarbon.com/insights/how-to-calculate-emissions-from-a-ferry-journey\n * - https://www.itf-oecd.org/sites/default/files/life-cycle-assessment-calculations-2020.xlsx\n * Other values extrapolated.\n */\nconst CARBON_INTENSITY_DEFAULTS = {\n walk: 0.026,\n bicycle: 0.017,\n car: 0.162,\n tram: 0.066,\n subway: 0.066,\n rail: 0.066,\n bus: 0.09,\n ferry: 0.082,\n cable_car: 0.021,\n gondola: 0.021,\n funicular: 0.066,\n transit: 0.066,\n leg_switch: 0,\n airplane: 0.382,\n micromobility: 0.095\n};\n\n/**\n * @param {itinerary} itinerary OTP trip itinierary\n * @param {carbonIntensity} carbonIntensity carbon intensity by mode in grams/meter\n * @param {units} units units to be used in return value\n * @return Amount of carbon in chosen unit\n */\nexport function calculateEmissions(\n itinerary: Itinerary,\n carbonIntensity: Record<string, number> = {},\n units?: string\n): number {\n // Apply defaults for any values that we don't have.\n const carbonIntensityWithDefaults = {\n ...CARBON_INTENSITY_DEFAULTS,\n ...carbonIntensity\n };\n\n // Distance is in meters, totalCarbon is in grams\n const totalCarbon =\n itinerary?.legs?.reduce((total, leg) => {\n return (\n (leg.distance * carbonIntensityWithDefaults[leg.mode.toLowerCase()] ||\n 0) + total\n );\n }, 0) || 0;\n\n switch (units) {\n case \"ounce\":\n return totalCarbon / 28.35;\n case \"kilogram\":\n return totalCarbon / 1000;\n case \"pound\":\n return totalCarbon / 454;\n case \"gram\":\n default:\n return totalCarbon;\n }\n}\n\nexport function calculateTncFares(itinerary) {\n // TODO: don't rely on deprecated methods!\n // At the moment this is safe as none of these exported variables contain strings\n const { maxTNCFare, minTNCFare, tncCurrencyCode } = calculateFares(\n itinerary,\n true\n );\n return { maxTNCFare, minTNCFare, tncCurrencyCode };\n}\n"],"file":"itinerary.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opentripplanner/core-utils",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.1.0",
|
|
4
4
|
"description": "Core functionality that is shared among numerous UI components",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=13"
|
|
@@ -14,7 +14,6 @@
|
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@mapbox/polyline": "^1.1.0",
|
|
16
16
|
"@opentripplanner/geocoder": "^1.2.2",
|
|
17
|
-
"@opentripplanner/types": "^2.0.0",
|
|
18
17
|
"@styled-icons/foundation": "^10.34.0",
|
|
19
18
|
"@turf/along": "^6.0.1",
|
|
20
19
|
"bowser": "^2.7.0",
|
package/src/itinerary.ts
CHANGED
|
@@ -445,6 +445,70 @@ export function calculatePhysicalActivity(
|
|
|
445
445
|
};
|
|
446
446
|
}
|
|
447
447
|
|
|
448
|
+
/**
|
|
449
|
+
* Sources:
|
|
450
|
+
* - https://www.itf-oecd.org/sites/default/files/docs/environmental-performance-new-mobility.pdf
|
|
451
|
+
* - https://www.thrustcarbon.com/insights/how-to-calculate-emissions-from-a-ferry-journey
|
|
452
|
+
* - https://www.itf-oecd.org/sites/default/files/life-cycle-assessment-calculations-2020.xlsx
|
|
453
|
+
* Other values extrapolated.
|
|
454
|
+
*/
|
|
455
|
+
const CARBON_INTENSITY_DEFAULTS = {
|
|
456
|
+
walk: 0.026,
|
|
457
|
+
bicycle: 0.017,
|
|
458
|
+
car: 0.162,
|
|
459
|
+
tram: 0.066,
|
|
460
|
+
subway: 0.066,
|
|
461
|
+
rail: 0.066,
|
|
462
|
+
bus: 0.09,
|
|
463
|
+
ferry: 0.082,
|
|
464
|
+
cable_car: 0.021,
|
|
465
|
+
gondola: 0.021,
|
|
466
|
+
funicular: 0.066,
|
|
467
|
+
transit: 0.066,
|
|
468
|
+
leg_switch: 0,
|
|
469
|
+
airplane: 0.382,
|
|
470
|
+
micromobility: 0.095
|
|
471
|
+
};
|
|
472
|
+
|
|
473
|
+
/**
|
|
474
|
+
* @param {itinerary} itinerary OTP trip itinierary
|
|
475
|
+
* @param {carbonIntensity} carbonIntensity carbon intensity by mode in grams/meter
|
|
476
|
+
* @param {units} units units to be used in return value
|
|
477
|
+
* @return Amount of carbon in chosen unit
|
|
478
|
+
*/
|
|
479
|
+
export function calculateEmissions(
|
|
480
|
+
itinerary: Itinerary,
|
|
481
|
+
carbonIntensity: Record<string, number> = {},
|
|
482
|
+
units?: string
|
|
483
|
+
): number {
|
|
484
|
+
// Apply defaults for any values that we don't have.
|
|
485
|
+
const carbonIntensityWithDefaults = {
|
|
486
|
+
...CARBON_INTENSITY_DEFAULTS,
|
|
487
|
+
...carbonIntensity
|
|
488
|
+
};
|
|
489
|
+
|
|
490
|
+
// Distance is in meters, totalCarbon is in grams
|
|
491
|
+
const totalCarbon =
|
|
492
|
+
itinerary?.legs?.reduce((total, leg) => {
|
|
493
|
+
return (
|
|
494
|
+
(leg.distance * carbonIntensityWithDefaults[leg.mode.toLowerCase()] ||
|
|
495
|
+
0) + total
|
|
496
|
+
);
|
|
497
|
+
}, 0) || 0;
|
|
498
|
+
|
|
499
|
+
switch (units) {
|
|
500
|
+
case "ounce":
|
|
501
|
+
return totalCarbon / 28.35;
|
|
502
|
+
case "kilogram":
|
|
503
|
+
return totalCarbon / 1000;
|
|
504
|
+
case "pound":
|
|
505
|
+
return totalCarbon / 454;
|
|
506
|
+
case "gram":
|
|
507
|
+
default:
|
|
508
|
+
return totalCarbon;
|
|
509
|
+
}
|
|
510
|
+
}
|
|
511
|
+
|
|
448
512
|
export function calculateTncFares(itinerary) {
|
|
449
513
|
// TODO: don't rely on deprecated methods!
|
|
450
514
|
// At the moment this is safe as none of these exported variables contain strings
|
package/tsconfig.tsbuildinfo
CHANGED
|
@@ -181,7 +181,7 @@
|
|
|
181
181
|
"signature": "dd5d607d8df908dc2961a99d4d82988643715b2cd83d1e35df357fa5fa5bf820",
|
|
182
182
|
"affectsGlobalScope": true
|
|
183
183
|
},
|
|
184
|
-
"
|
|
184
|
+
"../types/lib/index.d.ts": {
|
|
185
185
|
"version": "f647d8c48bc7bfe71ed6aa59b8a00080d3040099679881519a730a99330175e3",
|
|
186
186
|
"signature": "f647d8c48bc7bfe71ed6aa59b8a00080d3040099679881519a730a99330175e3",
|
|
187
187
|
"affectsGlobalScope": false
|
|
@@ -206,12 +206,12 @@
|
|
|
206
206
|
"signature": "6e634df2bb6d19b246e382c2e05d13cdd125e64bd3ffc8de5272fd3df5f0b0f3",
|
|
207
207
|
"affectsGlobalScope": false
|
|
208
208
|
},
|
|
209
|
-
"../../node_modules/@turf/helpers/dist/js/lib/geojson.d.ts": {
|
|
209
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/lib/geojson.d.ts": {
|
|
210
210
|
"version": "b07705bcc32e76e988958ee77d6aa8af64f2bd37471c6dcef6f2f73b65ef703c",
|
|
211
211
|
"signature": "b07705bcc32e76e988958ee77d6aa8af64f2bd37471c6dcef6f2f73b65ef703c",
|
|
212
212
|
"affectsGlobalScope": false
|
|
213
213
|
},
|
|
214
|
-
"../../node_modules/@turf/helpers/dist/js/index.d.ts": {
|
|
214
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/index.d.ts": {
|
|
215
215
|
"version": "3b66151321e7de40a507c35fa680c8ba58a6363ff0720a822ca498802a093872",
|
|
216
216
|
"signature": "3b66151321e7de40a507c35fa680c8ba58a6363ff0720a822ca498802a093872",
|
|
217
217
|
"affectsGlobalScope": false
|
|
@@ -222,8 +222,8 @@
|
|
|
222
222
|
"affectsGlobalScope": false
|
|
223
223
|
},
|
|
224
224
|
"./src/itinerary.ts": {
|
|
225
|
-
"version": "
|
|
226
|
-
"signature": "
|
|
225
|
+
"version": "05b50c45720c95f306df81f7c281acee167f2e2b64a01db012762a3ed8d1948a",
|
|
226
|
+
"signature": "60cdcfc039ef126d244885dff533b33fc72f70f0c69794435edd0f8b54961b5d",
|
|
227
227
|
"affectsGlobalScope": false
|
|
228
228
|
},
|
|
229
229
|
"./src/map.ts": {
|
|
@@ -582,8 +582,8 @@
|
|
|
582
582
|
"affectsGlobalScope": false
|
|
583
583
|
},
|
|
584
584
|
"../../node_modules/@types/fs-extra/index.d.ts": {
|
|
585
|
-
"version": "
|
|
586
|
-
"signature": "
|
|
585
|
+
"version": "6435575b4feae200831d37df9f871de6e695c64d3148611fe1b4d714d648ea24",
|
|
586
|
+
"signature": "6435575b4feae200831d37df9f871de6e695c64d3148611fe1b4d714d648ea24",
|
|
587
587
|
"affectsGlobalScope": false
|
|
588
588
|
},
|
|
589
589
|
"../../node_modules/@types/geojson/index.d.ts": {
|
|
@@ -1157,8 +1157,8 @@
|
|
|
1157
1157
|
"affectsGlobalScope": false
|
|
1158
1158
|
},
|
|
1159
1159
|
"../../node_modules/@types/json-stable-stringify/index.d.ts": {
|
|
1160
|
-
"version": "
|
|
1161
|
-
"signature": "
|
|
1160
|
+
"version": "626520302b2c8880e9eaa3a6a12022cc8b577a32e4d903aef85e3dd275063da4",
|
|
1161
|
+
"signature": "626520302b2c8880e9eaa3a6a12022cc8b577a32e4d903aef85e3dd275063da4",
|
|
1162
1162
|
"affectsGlobalScope": false
|
|
1163
1163
|
},
|
|
1164
1164
|
"../../node_modules/@types/json5/index.d.ts": {
|
|
@@ -1166,26 +1166,6 @@
|
|
|
1166
1166
|
"signature": "96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538",
|
|
1167
1167
|
"affectsGlobalScope": false
|
|
1168
1168
|
},
|
|
1169
|
-
"../../node_modules/@types/mapbox-gl/index.d.ts": {
|
|
1170
|
-
"version": "a49c26a7bad73494e987a795709e298223800407fa4e5c40c28539f752eb32ad",
|
|
1171
|
-
"signature": "a49c26a7bad73494e987a795709e298223800407fa4e5c40c28539f752eb32ad",
|
|
1172
|
-
"affectsGlobalScope": false
|
|
1173
|
-
},
|
|
1174
|
-
"../../node_modules/@types/mapbox__point-geometry/index.d.ts": {
|
|
1175
|
-
"version": "e86cd9c6c99834f8591ed72f08e4ca31570296f081206d0168f58f032cec5b58",
|
|
1176
|
-
"signature": "e86cd9c6c99834f8591ed72f08e4ca31570296f081206d0168f58f032cec5b58",
|
|
1177
|
-
"affectsGlobalScope": false
|
|
1178
|
-
},
|
|
1179
|
-
"../../node_modules/@types/pbf/index.d.ts": {
|
|
1180
|
-
"version": "2a856615ecd0af49997dfbb38cf94fd787d529062a2e96ce26b84432e61d785d",
|
|
1181
|
-
"signature": "2a856615ecd0af49997dfbb38cf94fd787d529062a2e96ce26b84432e61d785d",
|
|
1182
|
-
"affectsGlobalScope": false
|
|
1183
|
-
},
|
|
1184
|
-
"../../node_modules/@types/mapbox__vector-tile/index.d.ts": {
|
|
1185
|
-
"version": "ab438f22fa7748112b6b9744b992ab6049d2fa6f46f011c145ff9c90e533856a",
|
|
1186
|
-
"signature": "ab438f22fa7748112b6b9744b992ab6049d2fa6f46f011c145ff9c90e533856a",
|
|
1187
|
-
"affectsGlobalScope": false
|
|
1188
|
-
},
|
|
1189
1169
|
"../../node_modules/@types/mdast/index.d.ts": {
|
|
1190
1170
|
"version": "9a6d65d77455efaaaeff945bea30c38b8fe0922b807ba45cd23792392f1bfe76",
|
|
1191
1171
|
"signature": "9a6d65d77455efaaaeff945bea30c38b8fe0922b807ba45cd23792392f1bfe76",
|
|
@@ -1439,16 +1419,16 @@
|
|
|
1439
1419
|
"../../node_modules/date-fns/typings.d.ts"
|
|
1440
1420
|
],
|
|
1441
1421
|
"../../node_modules/@turf/along/dist/js/index.d.ts": [
|
|
1442
|
-
"../../node_modules/@turf/helpers/dist/js/index.d.ts",
|
|
1422
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/index.d.ts",
|
|
1443
1423
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
1444
1424
|
"../../node_modules/date-fns/typings.d.ts"
|
|
1445
1425
|
],
|
|
1446
|
-
"../../node_modules/@turf/helpers/dist/js/index.d.ts": [
|
|
1447
|
-
"../../node_modules/@turf/helpers/dist/js/lib/geojson.d.ts",
|
|
1426
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/index.d.ts": [
|
|
1427
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/lib/geojson.d.ts",
|
|
1448
1428
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
1449
1429
|
"../../node_modules/date-fns/typings.d.ts"
|
|
1450
1430
|
],
|
|
1451
|
-
"../../node_modules/@turf/helpers/dist/js/lib/geojson.d.ts": [
|
|
1431
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/lib/geojson.d.ts": [
|
|
1452
1432
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
1453
1433
|
"../../node_modules/date-fns/typings.d.ts"
|
|
1454
1434
|
],
|
|
@@ -1774,22 +1754,6 @@
|
|
|
1774
1754
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
1775
1755
|
"../../node_modules/date-fns/typings.d.ts"
|
|
1776
1756
|
],
|
|
1777
|
-
"../../node_modules/@types/mapbox-gl/index.d.ts": [
|
|
1778
|
-
"../../node_modules/@types/geojson/index.d.ts",
|
|
1779
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
1780
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
1781
|
-
],
|
|
1782
|
-
"../../node_modules/@types/mapbox__point-geometry/index.d.ts": [
|
|
1783
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
1784
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
1785
|
-
],
|
|
1786
|
-
"../../node_modules/@types/mapbox__vector-tile/index.d.ts": [
|
|
1787
|
-
"../../node_modules/@types/geojson/index.d.ts",
|
|
1788
|
-
"../../node_modules/@types/mapbox__point-geometry/index.d.ts",
|
|
1789
|
-
"../../node_modules/@types/pbf/index.d.ts",
|
|
1790
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
1791
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
1792
|
-
],
|
|
1793
1757
|
"../../node_modules/@types/mdast/index.d.ts": [
|
|
1794
1758
|
"../../node_modules/@types/unist/index.d.ts",
|
|
1795
1759
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
@@ -2172,10 +2136,6 @@
|
|
|
2172
2136
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
2173
2137
|
"../../node_modules/date-fns/typings.d.ts"
|
|
2174
2138
|
],
|
|
2175
|
-
"../../node_modules/@types/pbf/index.d.ts": [
|
|
2176
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
2177
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
2178
|
-
],
|
|
2179
2139
|
"../../node_modules/@types/pixelmatch/index.d.ts": [
|
|
2180
2140
|
"../../node_modules/@types/node/index.d.ts",
|
|
2181
2141
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
@@ -3043,15 +3003,10 @@
|
|
|
3043
3003
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3044
3004
|
"../../node_modules/date-fns/typings.d.ts"
|
|
3045
3005
|
],
|
|
3046
|
-
"./node_modules/@opentripplanner/types/lib/index.d.ts": [
|
|
3047
|
-
"../../node_modules/@types/react/index.d.ts",
|
|
3048
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3049
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
3050
|
-
],
|
|
3051
3006
|
"./src/deprecated-with-types.ts": [
|
|
3052
3007
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3053
3008
|
"../../node_modules/date-fns/typings.d.ts",
|
|
3054
|
-
"
|
|
3009
|
+
"../types/lib/index.d.ts",
|
|
3055
3010
|
"./src/time.ts"
|
|
3056
3011
|
],
|
|
3057
3012
|
"./src/index.ts": [
|
|
@@ -3068,18 +3023,18 @@
|
|
|
3068
3023
|
"../../node_modules/@turf/along/dist/js/index.d.ts",
|
|
3069
3024
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3070
3025
|
"../../node_modules/date-fns/typings.d.ts",
|
|
3071
|
-
"
|
|
3026
|
+
"../types/lib/index.d.ts"
|
|
3072
3027
|
],
|
|
3073
3028
|
"./src/map.ts": [
|
|
3074
3029
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3075
3030
|
"../../node_modules/date-fns/typings.d.ts",
|
|
3076
|
-
"
|
|
3031
|
+
"../types/lib/index.d.ts",
|
|
3077
3032
|
"./src/itinerary.ts"
|
|
3078
3033
|
],
|
|
3079
3034
|
"./src/route.ts": [
|
|
3080
3035
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3081
3036
|
"../../node_modules/date-fns/typings.d.ts",
|
|
3082
|
-
"
|
|
3037
|
+
"../types/lib/index.d.ts"
|
|
3083
3038
|
],
|
|
3084
3039
|
"./src/storage.ts": [
|
|
3085
3040
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
@@ -3088,13 +3043,18 @@
|
|
|
3088
3043
|
"./src/time.ts": [
|
|
3089
3044
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3090
3045
|
"../../node_modules/date-fns/typings.d.ts",
|
|
3091
|
-
"
|
|
3046
|
+
"../types/lib/index.d.ts",
|
|
3092
3047
|
"./src/deprecated-with-types.ts"
|
|
3093
3048
|
],
|
|
3094
3049
|
"./src/ui.ts": [
|
|
3095
3050
|
"../../node_modules/bowser/index.d.ts",
|
|
3096
3051
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3097
3052
|
"../../node_modules/date-fns/typings.d.ts"
|
|
3053
|
+
],
|
|
3054
|
+
"../types/lib/index.d.ts": [
|
|
3055
|
+
"../../node_modules/@types/react/index.d.ts",
|
|
3056
|
+
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3057
|
+
"../../node_modules/date-fns/typings.d.ts"
|
|
3098
3058
|
]
|
|
3099
3059
|
},
|
|
3100
3060
|
"exportedModulesMap": {
|
|
@@ -3108,16 +3068,16 @@
|
|
|
3108
3068
|
"../../node_modules/date-fns/typings.d.ts"
|
|
3109
3069
|
],
|
|
3110
3070
|
"../../node_modules/@turf/along/dist/js/index.d.ts": [
|
|
3111
|
-
"../../node_modules/@turf/helpers/dist/js/index.d.ts",
|
|
3071
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/index.d.ts",
|
|
3112
3072
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3113
3073
|
"../../node_modules/date-fns/typings.d.ts"
|
|
3114
3074
|
],
|
|
3115
|
-
"../../node_modules/@turf/helpers/dist/js/index.d.ts": [
|
|
3116
|
-
"../../node_modules/@turf/helpers/dist/js/lib/geojson.d.ts",
|
|
3075
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/index.d.ts": [
|
|
3076
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/lib/geojson.d.ts",
|
|
3117
3077
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3118
3078
|
"../../node_modules/date-fns/typings.d.ts"
|
|
3119
3079
|
],
|
|
3120
|
-
"../../node_modules/@turf/helpers/dist/js/lib/geojson.d.ts": [
|
|
3080
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/lib/geojson.d.ts": [
|
|
3121
3081
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3122
3082
|
"../../node_modules/date-fns/typings.d.ts"
|
|
3123
3083
|
],
|
|
@@ -3443,22 +3403,6 @@
|
|
|
3443
3403
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3444
3404
|
"../../node_modules/date-fns/typings.d.ts"
|
|
3445
3405
|
],
|
|
3446
|
-
"../../node_modules/@types/mapbox-gl/index.d.ts": [
|
|
3447
|
-
"../../node_modules/@types/geojson/index.d.ts",
|
|
3448
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3449
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
3450
|
-
],
|
|
3451
|
-
"../../node_modules/@types/mapbox__point-geometry/index.d.ts": [
|
|
3452
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3453
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
3454
|
-
],
|
|
3455
|
-
"../../node_modules/@types/mapbox__vector-tile/index.d.ts": [
|
|
3456
|
-
"../../node_modules/@types/geojson/index.d.ts",
|
|
3457
|
-
"../../node_modules/@types/mapbox__point-geometry/index.d.ts",
|
|
3458
|
-
"../../node_modules/@types/pbf/index.d.ts",
|
|
3459
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3460
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
3461
|
-
],
|
|
3462
3406
|
"../../node_modules/@types/mdast/index.d.ts": [
|
|
3463
3407
|
"../../node_modules/@types/unist/index.d.ts",
|
|
3464
3408
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
@@ -3841,10 +3785,6 @@
|
|
|
3841
3785
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3842
3786
|
"../../node_modules/date-fns/typings.d.ts"
|
|
3843
3787
|
],
|
|
3844
|
-
"../../node_modules/@types/pbf/index.d.ts": [
|
|
3845
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
3846
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
3847
|
-
],
|
|
3848
3788
|
"../../node_modules/@types/pixelmatch/index.d.ts": [
|
|
3849
3789
|
"../../node_modules/@types/node/index.d.ts",
|
|
3850
3790
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
@@ -4712,13 +4652,8 @@
|
|
|
4712
4652
|
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
4713
4653
|
"../../node_modules/date-fns/typings.d.ts"
|
|
4714
4654
|
],
|
|
4715
|
-
"./node_modules/@opentripplanner/types/lib/index.d.ts": [
|
|
4716
|
-
"../../node_modules/@types/react/index.d.ts",
|
|
4717
|
-
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
4718
|
-
"../../node_modules/date-fns/typings.d.ts"
|
|
4719
|
-
],
|
|
4720
4655
|
"./src/deprecated-with-types.ts": [
|
|
4721
|
-
"
|
|
4656
|
+
"../types/lib/index.d.ts"
|
|
4722
4657
|
],
|
|
4723
4658
|
"./src/index.ts": [
|
|
4724
4659
|
"./src/itinerary.ts",
|
|
@@ -4729,25 +4664,30 @@
|
|
|
4729
4664
|
"./src/ui.ts"
|
|
4730
4665
|
],
|
|
4731
4666
|
"./src/itinerary.ts": [
|
|
4732
|
-
"
|
|
4667
|
+
"../types/lib/index.d.ts"
|
|
4733
4668
|
],
|
|
4734
4669
|
"./src/map.ts": [
|
|
4735
|
-
"
|
|
4670
|
+
"../types/lib/index.d.ts"
|
|
4736
4671
|
],
|
|
4737
4672
|
"./src/route.ts": [
|
|
4738
|
-
"
|
|
4673
|
+
"../types/lib/index.d.ts"
|
|
4739
4674
|
],
|
|
4740
4675
|
"./src/time.ts": [
|
|
4741
|
-
"
|
|
4676
|
+
"../types/lib/index.d.ts",
|
|
4742
4677
|
"./src/deprecated-with-types.ts"
|
|
4678
|
+
],
|
|
4679
|
+
"../types/lib/index.d.ts": [
|
|
4680
|
+
"../../node_modules/@types/react/index.d.ts",
|
|
4681
|
+
"../../node_modules/date-fns-tz/typings.d.ts",
|
|
4682
|
+
"../../node_modules/date-fns/typings.d.ts"
|
|
4743
4683
|
]
|
|
4744
4684
|
},
|
|
4745
4685
|
"semanticDiagnosticsPerFile": [
|
|
4746
4686
|
"../../node_modules/@babel/parser/typings/babel-parser.d.ts",
|
|
4747
4687
|
"../../node_modules/@babel/types/lib/index.d.ts",
|
|
4748
4688
|
"../../node_modules/@turf/along/dist/js/index.d.ts",
|
|
4749
|
-
"../../node_modules/@turf/helpers/dist/js/index.d.ts",
|
|
4750
|
-
"../../node_modules/@turf/helpers/dist/js/lib/geojson.d.ts",
|
|
4689
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/index.d.ts",
|
|
4690
|
+
"../../node_modules/@turf/along/node_modules/@turf/helpers/dist/js/lib/geojson.d.ts",
|
|
4751
4691
|
"../../node_modules/@types/babel__core/index.d.ts",
|
|
4752
4692
|
"../../node_modules/@types/babel__generator/index.d.ts",
|
|
4753
4693
|
"../../node_modules/@types/babel__template/index.d.ts",
|
|
@@ -4801,9 +4741,6 @@
|
|
|
4801
4741
|
"../../node_modules/@types/json-schema/index.d.ts",
|
|
4802
4742
|
"../../node_modules/@types/json-stable-stringify/index.d.ts",
|
|
4803
4743
|
"../../node_modules/@types/json5/index.d.ts",
|
|
4804
|
-
"../../node_modules/@types/mapbox-gl/index.d.ts",
|
|
4805
|
-
"../../node_modules/@types/mapbox__point-geometry/index.d.ts",
|
|
4806
|
-
"../../node_modules/@types/mapbox__vector-tile/index.d.ts",
|
|
4807
4744
|
"../../node_modules/@types/mdast/index.d.ts",
|
|
4808
4745
|
"../../node_modules/@types/minimatch/index.d.ts",
|
|
4809
4746
|
"../../node_modules/@types/minimist/index.d.ts",
|
|
@@ -4867,7 +4804,6 @@
|
|
|
4867
4804
|
"../../node_modules/@types/overlayscrollbars/index.d.ts",
|
|
4868
4805
|
"../../node_modules/@types/parse-json/index.d.ts",
|
|
4869
4806
|
"../../node_modules/@types/parse5/index.d.ts",
|
|
4870
|
-
"../../node_modules/@types/pbf/index.d.ts",
|
|
4871
4807
|
"../../node_modules/@types/pixelmatch/index.d.ts",
|
|
4872
4808
|
"../../node_modules/@types/prettier/index.d.ts",
|
|
4873
4809
|
"../../node_modules/@types/pretty-hrtime/index.d.ts",
|
|
@@ -5016,7 +4952,6 @@
|
|
|
5016
4952
|
"../../node_modules/typescript/lib/lib.scripthost.d.ts",
|
|
5017
4953
|
"../../node_modules/typescript/lib/lib.webworker.importscripts.d.ts",
|
|
5018
4954
|
"../../node_modules/vfile-message/index.d.ts",
|
|
5019
|
-
"./node_modules/@opentripplanner/types/lib/index.d.ts",
|
|
5020
4955
|
"./src/deprecated-with-types.ts",
|
|
5021
4956
|
"./src/index.ts",
|
|
5022
4957
|
"./src/itinerary.ts",
|
|
@@ -5024,7 +4959,8 @@
|
|
|
5024
4959
|
"./src/route.ts",
|
|
5025
4960
|
"./src/storage.ts",
|
|
5026
4961
|
"./src/time.ts",
|
|
5027
|
-
"./src/ui.ts"
|
|
4962
|
+
"./src/ui.ts",
|
|
4963
|
+
"../types/lib/index.d.ts"
|
|
5028
4964
|
]
|
|
5029
4965
|
},
|
|
5030
4966
|
"version": "4.2.4"
|