Important
gtfsmerge has moved into planarnetwork/gb-transit.
Development continues at
apps/gtfsmerge,
where it shares one GTFS schema, reader and writer with cif2gtfs and transxchange2gtfs — so a
rail feed and a bus feed can be merged into one without reconciling their stop ids.
The npm package is still gtfsmerge and is published from there. This repository is kept for its
history and issues; please open new ones against
gb-transit.
Some things changed in the move, including two bugs in the generated walk transfers — see the baseline.
gtfsmerge merges multiple GTFS zip files into a single zip.
- Transfers are created for stops that are close to each other
- Duplicate stops, agencies and routes are assumed to be the same stop and only output once.
- Calendars, calendar dates, trips and stop times are re-indexed.
- Identical calendars are merged into a single entry.
- Any calendars or calendar dates in the past are removed along with their corresponding trips
- Any calendar dates without a calendar are converted to a calendar
- Any unused stops are removed
- Routes can be removed based on their type (Bus, Rail, etc)
- This tool does not currently process any of the fares files. Please raise an issue if you would like this feature.
Please note that zip/unzip and node 11.x or above are required.
gtfsmerge is a CLI tool that can be installed via NPM:
sudo apt-get install nodejs zip
npm install -g gtfsmerge
It can be run by specifying the input and output files as CLI arguments:
gtfsmerge input1.zip input2.zip output.zip
You can specify the distance (in kilometers) that should be used add transfers for nearby stops:
gtfsmerge --transfer-distance=2 input1.zip input2.zip output.zip
Stops with the same ID in different files are assumed to be the same stop but it is possible to add a prefix if this is not the case:
gtfsmerge --stop-prefix=input1_stop input1.zip modified-input1.zip
gtfsmerge modified-input1.zip input2.zip output.zip
Routes can be removed based on their type:
gtfsmerge --remove-route-types=0,1,4 input1.zip input2.zip output.zip
Issues and PRs are very welcome. To get the project set up run
git clone git@github.com:planarnetwork/gtfsmerge
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.
