Implementation of the Connection Scan Algorithm in TypeScript.
Additional features not in the paper implementation:
- Various fixes in order to improve the quality of results.
- Calendars are checked to ensure services are running on the specified day
- The origin and destination may be a set of stops
- Interchange time at each station is applied
- Pickup / set down marker of stop times are obeyed
- Multi-criteria journey filtering
- Transfers (footpaths) can be used
It will work with any well formed GTFS data set.
Node +11 is required for all examples.
npm install --save connection-scan-algorithm
Find the first results that depart after a specific time
const {GtfsLoader, JourneyFactory, ConnectionScanAlgorithm, ScanResultsFactory, TimeParser, MultipleCriteriaFilter, DepartAfterQuery} = require("connection-scan-algorithm");
const gtfsLoader = new GtfsLoader(new TimeParser());
const gtfs = await gtfsLoader.load(fs.createReadStream("gtfs.zip"));
const csa = new ConnectionScanAlgorithm(gtfs.connections, gtfs.transfers, new ScanResultsFactory(gtfs.interchange));
const query = new DepartAfterQuery(csa, new JourneyFactory(), [new MultipleCriteriaFilter()]);
const results = query.plan(["TBW"], ["NRW"], new Date(), 9 * 3600);
- Short circuit connection scan once all destinations found
- Fake trip ID for transfers to (removes branch)
- Only scan transfers for stops once (avoid re-scan when time is improved)
Issues and PRs are very welcome. To get the project set up run:
git clone [email protected]:planarnetwork/connection-scan-algorithm
npm install --dev
npm test
If you would like to send a pull request please write your contribution in TypeScript and if possible, add a test.
This software is licensed under GNU GPLv3.