connection-scan-algorithm
Version:
Connection Scan Algorithm
44 lines (43 loc) • 2 kB
JavaScript
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));
;