No description
Find a file
2020-08-19 21:33:59 +03:00
cmake chore included missing files 2020-08-19 21:15:39 +03:00
eval clean up and refactor half-baked development commits and squash them into a new version. 2019-01-12 01:08:13 +01:00
geo output all GeoJSON as WGS84 to be RFC 7946 conform 2019-07-23 22:47:35 +02:00
src fix: add missing changes 2020-08-19 21:33:59 +03:00
.gitignore chore: integrate libosmium for reading files 2020-08-18 21:24:03 +03:00
.gitmodules update xml submodule 2019-09-16 00:42:07 +02:00
.travis.yml chore included missing files 2020-08-19 21:15:39 +03:00
.ycm_extra_conf.py initial commit 2018-06-09 17:14:08 +02:00
CMakeLists.txt chore: disable osmium version check 2020-08-19 21:20:25 +03:00
cpplint.py Explicitly use python 2 in shebang, fixes #3 2019-04-08 12:38:38 +02:00
LICENSE license 2018-06-12 16:11:04 +02:00
pfaedle.cfg clean up and refactor half-baked development commits and squash them into a new version. 2019-01-12 01:08:13 +01:00
README.md be more precise in readme 2019-02-04 16:46:56 +01:00

Left: station-to-station path of a single train through Switzerland obtained from schedule timetable data. Right: path of the same train map-matched by pfaedle. Left: station-to-station path of a single train through Switzerland obtained from official schedule data. Right: path of the same train map-matched by pfaedle.

Left: station-to-station path of a single bus through Stuttgart obtained from official schedule data. Right: path of the same bus map-matched by pfaedle. Left: station-to-station path of a single bus through Stuttgart obtained from official schedule data. Right: path of the same bus map-matched by pfaedle.

Build
Status

pfaedle

Precise OpenStreetMap (OSM) map-matching for public transit schedules (GTFS data). Implementation and evaluation code for our paper Sparse Map-Matching in Public Transit Networks with Turn Restrictions.

Requirements

  • cmake
  • gcc >= 4.9 (or clang >= 5.0)

Building and Installation

Fetch this repository and init submodules:

git clone --recurse-submodules https://github.com/ad-freiburg/pfaedle
mkdir build && cd build
cmake ..
make -j

To install, type

make install

General Usage

Generating shapes for a GTFS feed

pfaedle -x <OSM FILE> <GTFS INPUT FOLDER>

A shape'd version of the input GTFS feed will be written to ./gtfs-out.

By default, shapes are only calculated for trips that don't have a shape in the input feed. To drop all existing shapes, use the -D flag.

For example, you may generate (and replace existing, see -D parameter) shapes for the GTFS dataset for Freiburg like this:

$ wget https://fritz.freiburg.de/csv_Downloads/VAGFR.zip && unzip VAGFR.zip
$ wget http://download.geofabrik.de/europe/germany/baden-wuerttemberg/freiburg-regbez-latest.osm.bz2 && bunzip2 freiburg-regbez-latest.osm.bz2
$ pfaedle -D -x freiburg-regbez-latest.osm .

Generating shapes for a specific MOT

To generate shapes for a specific mot only, use the -m option. Possible values are either tram, bus, coach, rail, subway, ferry, funicular, gondola, all (default) or GTFS vehicle type codes (0, 1, 2, 3, 4, 5, 6, 7).

Multiple values can be specified (comma separated).

OSM filtering

pfaedle comes with the ability to filter OpenStreetMap data. If you specify the -X flag, pfaedle will filter the input OSM file and output a new OSM file which contains exactly the data needed to calculate the shapes for the input GTFS feed and the input configuration.

This can be used to avoid parsing (for example) the entire planet.osm on each run.

Debugging

The following flags may be useful for debugging:

  • -T <GTFS TRIP ID> only calculate shape for a single trip (specified via its GTFS trip id) and output it as GeoJSON to <dbg-path>/path.json
  • --write-graph write the graph used for routing as GeoJSON to <dbg-path>/graph.json
  • --write-cgraph if -T is set, write the combination graph used for routing as GeoJSON to <dbg-path>/combgraph.json
  • --write-trgraph write the complete network graph to <dbg-path>/trgraph.json

Configuration

A default configuration file pfaedle.cfg can be found in this repo and will be installed with make install. Custom configuration files can be specified with the -c flag. If no -c flag is set, pfaedle will parse and merge the following cfg files in the given order (if present): <install prefix>/etc/pfaedle/pfaedle.cfg, $HOME/.config/pfaedle/pfaedle.cfg, <CWD>/pfaedle.cfg. Values given in later files will overwrite earlier defined values.

Evaluation

You may run an entire evaluation of our testing datasets Vitoria-Gasteiz, Paris, Switzerland and Stuttgart with

mkdir build && cd build
cmake ..
make -j
make eval

Notes:

  • this will download, and filter, the entire OSM files for Spain and the Stuttgart region. Make sure you have enough space left on your hard drive.
  • in evaluation mode, pfaedle needs significantly more time, because the calculation of the similarity measurements between shapes are expensive
  • if you are only interested in the end results of a single dataset, run make <dataset>.lighteval in /eval. For example, make paris.lighteval generates a shaped version of the paris dataset, without doing extensive comparisons to the ground truth.
  • similarily, if you want to run the extensive evaluation for a single dataset, run make <dataset>.eval in /eval.

Evaluation requirements

  • zlib

On Debianesque systems, type

sudo apt-get install zlib1g-dev

to install the dependencies.