UNPKG

connection-scan-algorithm

Version:
44 lines (43 loc) 2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const fs = require("fs"); const GtfsLoader_1 = require("./gtfs/GtfsLoader"); const TimeParser_1 = require("./gtfs/TimeParser"); const ConnectionScanAlgorithm_1 = require("./csa/ConnectionScanAlgorithm"); const ScanResultsFactory_1 = require("./csa/ScanResultsFactory"); const JourneyFactory_1 = require("./journey/JourneyFactory"); const DepartAfterQuery_1 = require("./query/DepartAfterQuery"); const MultipleCriteriaFilter_1 = require("./query/MultipleCriteriaFilter"); async function main() { const loader = new GtfsLoader_1.GtfsLoader(new TimeParser_1.TimeParser()); console.time("initial load"); const gtfs = await loader.load(fs.createReadStream("/home/linus/Downloads/gb-rail-latest.zip")); console.timeEnd("initial load"); const csa = new ConnectionScanAlgorithm_1.ConnectionScanAlgorithm(gtfs.connections, gtfs.transfers, new ScanResultsFactory_1.ScanResultsFactory(gtfs.interchange)); const query = new DepartAfterQuery_1.DepartAfterQuery(csa, new JourneyFactory_1.JourneyFactory(), [new MultipleCriteriaFilter_1.MultipleCriteriaFilter()]); console.time("query"); const results = query.plan(["TBW"], ["NRW"], new Date(), 9 * 3600); console.timeEnd("query"); results.forEach(result => console.log(journeyToString(result))); } function journeyToString(j) { return toTime(j.departureTime) + ", " + toTime(j.arrivalTime) + ", " + [j.legs[0].origin, ...j.legs.map(l => l.destination)].join("-"); } function toTime(time) { let hours = Math.floor(time / 3600); let minutes = Math.floor((time - (hours * 3600)) / 60); let seconds = time - (hours * 3600) - (minutes * 60); if (hours < 10) { hours = "0" + hours; } if (minutes < 10) { minutes = "0" + minutes; } if (seconds < 10) { seconds = "0" + seconds; } return hours + ":" + minutes + ":" + seconds; } main().catch(e => console.error(e));