UNPKG

raptor-journey-planner

Version:

Implementation of the Round bAsed Public Transit Optimized Router (Raptor) journey planning algorithm.

51 lines (50 loc) 2.04 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const GTFSLoader_1 = require("./gtfs/GTFSLoader"); const StringResults_1 = require("./transfer-pattern/results/StringResults"); const TransferPatternRepository_1 = require("./transfer-pattern/TransferPatternRepository"); const fs = require("node:fs"); const RaptorAlgorithmFactory_1 = require("./raptor/RaptorAlgorithmFactory"); const TransferPatternQuery_1 = require("./query/TransferPatternQuery"); const mysql = require("mysql2/promise"); /** * Worker that finds transfer patterns for a given station */ async function worker(filename, date) { const stream = fs.createReadStream(filename); const [trips, transfers, interchange] = await (0, GTFSLoader_1.loadGTFS)(stream); const raptor = RaptorAlgorithmFactory_1.RaptorAlgorithmFactory.create(trips, transfers, interchange, date); const query = new TransferPatternQuery_1.TransferPatternQuery(raptor, () => new StringResults_1.StringResults(interchange)); const repository = new TransferPatternRepository_1.TransferPatternRepository(getDatabase()); process.on("message", async (stop) => { const results = query.plan(stop, date); await repository.storeTransferPatterns(results); morePlease(); }); process.on("SIGUSR2", () => { process.exit(); }); morePlease(); } function morePlease() { process.send("ready"); } function getDatabase() { return mysql.createPool({ host: process.env.DATABASE_HOSTNAME || "localhost", port: parseInt(process.env.DATABASE_PORT || "3306", 10), user: process.env.DATABASE_USERNAME || "root", password: process.env.DATABASE_PASSWORD || "", database: process.env.OJP_DATABASE_NAME || "ojp", connectionLimit: 3, }); } if (process.argv[2] && process.argv[3]) { worker(process.argv[2], new Date(process.argv[3])).catch(err => { console.error(err); process.exit(); }); } else { console.log("Please specify a date and GTFS file."); }