~mil/mobroute

General-Purpose FOSS Public Transportation Router in development. CLI, Linux GUI, Android App, and Go Library.

#36 Mobroute: Bucketing Transfers Optimization

~mil filed ticket on mobroute-tickets todo

a day ago

5e5c453 Split db loaders/queries into dbtomem and dbquery packages

~mil pushed to ~mil/mobroute git

2 days ago

#Mobroute

builds.sr.ht status

Mobroute is a general purpose FOSS public transportation router (e.g. trip planner) Go library and CLI that works by directly ingesting timetable (GTFS) data from transit agencies themselves (sourced from the Mobility Database). After data has been fetched, routing calculations can be run offline, and locally / on-device (as opposed to making a network call). Overall, Mobroute aims to offer an opensource framework (both CLI & library) for integrating data-provider-agnostic GTFS public transit capabilities (integrated GTFS ETL, GTFS multisource support, and routing algorithm) into applications to get users from point-a to point-b via public transit without comprising privacy or user freedoms.

In addition to the Mobroute Go library & CLI, the related subproject, the Transito app offers fully integrated routing functionality on mobile devices (Android & Linux) utilizing Mobroute's Go library's API.

The Mobroute & Transito projects overall are currently in active development but generally currently usable on mobile & via the CLI and looking for more users & testers. Mobroute & Transito work in many well-connected metros which have publicly available GTFS data, to name a few: Lisbon, NYC, Brussels, Krakow, and Bourges. You can see sample routes at the automated test results page, check for your metro here, and see details on the Transito mobile app here.

#Documentation:

#Project Overview / Featureset:

  • Well-executed singlemodal public transportation routing via GTFS data
    • Project focuses on implementing only GTFS routing providing for algorithmic & codebase simplicity
    • Other routers bill themselves as "multimodal"; Mobroute is proudly singlemodal (doesn't integrate automobile/OSM/PBF data)
    • Overall.. does one thing well: public transportation routing
  • Integration of automatic GTFS dataimport & ETL out-of-the-box via the Mobility Database
    • Frees user from having to source & manually download/import GTFS zip archives
    • System automatically downloads the data needed for a routing requests upon use
    • Supports using multiple GTFS sources independently and in combination for single routing requests
    • See Mobsql for details on ETL pipeline, uses SQLite under the hood
  • Efficient algorithmic routing via the Connection Scan Algorithm (CSA)
    • Being a singlemodal router lends Mobroute's design to implementation simplicity
    • The well academically studied CSA algorithm is utilized: see paper details here
    • CSA is non-graphbased, simple, and Mobroute's CSA implementation is well tested
  • Targeted to on-device and offline usage
    • Designed to be used on-device and offline once data is fetched
    • Run your routing request right on your mobile device for the privacy conscious
  • Fully thought-out small, simple, & modular design supporting library, CLI, & mobile usage
    • Built in Go, the design of the project is small and modular
    • 3 primary components:
      • Mobsql (GTFS-to-SQLite ETL pipeline: CLI + Go API)
      • Mobroute (Core routing algorithm via CSA: CLI + Go API)
      • Transito (Graphical mobile application for Android & Linux)
    • Mobsql and Mobroute can be used as both a CLI OR as a Go API as a library in your application
    • Transito, Mobroute's mobile application is written in Go (via Gio) and uses Mobroute's Go API

#Architecture:

The Mobroute project is composed of 3 separate codebases / smaller projects:

  • Mobsql: is a GTFS-to-SQL ETL tool which pulls GTFS sources from the MobilityDB into a SQLite database. It exposes both a CLI & a Go library (consumed by Mobroute).
  • Mobroute: is the core routing tool. This project handles interfacing Mobsql via its public Go API and then once the DB is loaded, opens the DB and performs routing calculations (currently via the Connection Scan Algorithm). It exposes both a CLI & a Go library ( consumed by Transito).
  • Transito: is a simple Android & Linux GUI app to use Mobroute. It allows querying from/to via Nominatim and performing routing calculations on-the-go via Mobroute's underlying routing mechanism (note this implicitly integrates Mobsql as well).