UNPKG

s2-tools

Version:

A collection of geospatial tools primarily designed for WGS84, Web Mercator, and S2.

171 lines 5.9 kB
import { parseCSVAsRecord } from '../../'; /** * Describes the type of pathway between two stops or station nodes. * * 1 - Walkway * 2 - Stairs * 3 - Moving sidewalk (travelator) * 4 - Escalator * 5 - Elevator * 6 - Fare gate (payment gate) * 7 - Exit gate */ export var GTFSPathwayMode; (function (GTFSPathwayMode) { GTFSPathwayMode[GTFSPathwayMode["Walkway"] = 1] = "Walkway"; GTFSPathwayMode[GTFSPathwayMode["Stairs"] = 2] = "Stairs"; GTFSPathwayMode[GTFSPathwayMode["MovingSidewalk"] = 3] = "MovingSidewalk"; GTFSPathwayMode[GTFSPathwayMode["Escalator"] = 4] = "Escalator"; GTFSPathwayMode[GTFSPathwayMode["Elevator"] = 5] = "Elevator"; GTFSPathwayMode[GTFSPathwayMode["FareGate"] = 6] = "FareGate"; GTFSPathwayMode[GTFSPathwayMode["ExitGate"] = 7] = "ExitGate"; })(GTFSPathwayMode || (GTFSPathwayMode = {})); /** * Indicates whether a pathway can be used in both directions: * * 0 - Unidirectional * 1 - Bidirectional * * Note: Exit gates (pathway_mode=7) must not be bidirectional. */ export var GTFSIsBidirectional; (function (GTFSIsBidirectional) { GTFSIsBidirectional[GTFSIsBidirectional["Unidirectional"] = 0] = "Unidirectional"; GTFSIsBidirectional[GTFSIsBidirectional["Bidirectional"] = 1] = "Bidirectional"; })(GTFSIsBidirectional || (GTFSIsBidirectional = {})); /** * # Pathways * * **Optional** * Represents edges in a station graph describing station interiors, connecting * platforms, entrances/exits, generic nodes, or boarding areas. * * **Primary Key**: (pathway_id) * * Pathways must be complete if included: * - No dangling locations if any pathways exist, except for platforms that have boarding areas. * - Platforms with boarding areas must not have pathways directly; their boarding areas do. * - Each platform (location_type=0) or boarding area (4) must have at least * one path to an entrance/exit (2) unless it’s impossible for riders to exit at that platform. */ export class GTFSPathway { /** * **Required** * Unique ID for the pathway record. */ id; /** * **Required** * The stop or node from which this pathway begins. * Must be location_type=0, 2, 3, or 4 (platform, entrance/exit, generic node, or boarding area). * Stations (location_type=1) are forbidden here. */ fromStopId; /** * **Required** * The stop or node at which this pathway ends. * Must be location_type=0, 2, 3, or 4 (platform, entrance/exit, generic node, or boarding area). * Stations (location_type=1) are forbidden here. */ toStopId; /** * **Required** * Pathway mode, e.g. walkway, stairs, escalator. */ mode; /** * **Required** * 0 = Unidirectional, 1 = Bidirectional */ isBidirectional; /** * **Optional** * Horizontal length in meters of the pathway. * Recommended for walkway, fare gate, exit gate. */ length; /** * **Optional** * Average time in seconds needed to traverse this pathway. * Recommended for moving sidewalk, escalator, elevator. */ traversalTime; /** * **Optional** * Number of stairs in this pathway. * Positive: fromStopId to toStopId goes upwards * Negative: fromStopId to toStopId goes downwards * Recommended for pathway_mode=2 (stairs). */ stairCount; /** * **Optional** * Maximum slope ratio. Positive for upwards, negative for downwards. * E.g., 0.083 is an 8.3% slope. * Used for walkway (1) or moving sidewalk (3) if relevant. */ maxSlope; /** * **Optional** * Minimum width of the pathway in meters, recommended if less than 1 meter. */ minWidth; /** * **Optional** * Public facing text on signage to help riders navigate (e.g. "Follow signs to X"). */ signpostedAs; /** * **Optional** * Public facing text on signage when traversing the pathway in reverse * (toStopId -> fromStopId), if different from `signpostedAs`. */ reversedSignpostedAs; /** @param data - the parsed GTFS CSV data */ constructor(data) { this.id = data.pathway_id; this.fromStopId = data.from_stop_id; this.toStopId = data.to_stop_id ?? data.to_stop_id_pathway_mode; // Required numeric fields this.mode = data.pathway_mode !== undefined ? parseInt(data.pathway_mode, 10) : GTFSPathwayMode.Walkway; this.isBidirectional = data.is_bidirectional !== undefined ? parseInt(data.is_bidirectional, 10) : GTFSIsBidirectional.Unidirectional; // Optional fields if (data.length !== undefined && data.length !== '') { this.length = parseFloat(data.length); } if (data.traversal_time !== undefined && data.traversal_time !== '') { this.traversalTime = parseInt(data.traversal_time, 10); } if (data.stair_count !== undefined && data.stair_count !== '') { this.stairCount = parseInt(data.stair_count, 10); } if (data.max_slope !== undefined && data.max_slope !== '') { this.maxSlope = parseFloat(data.max_slope); } if (data.min_width !== undefined && data.min_width !== '') { this.minWidth = parseFloat(data.min_width); } this.signpostedAs = data.signposted_as; this.reversedSignpostedAs = data.reversed_signposted_as; } } /** * @param input - the input string to parse from * @returns - an array of Pathways */ export function parseGTFSPathways(input) { const data = parseCSVAsRecord(input); const res = {}; for (const d of data) { const pathway = new GTFSPathway(d); res[pathway.id] = pathway; } return res; } //# sourceMappingURL=pathways.js.map