Public data on Lagos' ferry network, built so commuters and map apps can use it.
- Role
- Data engineer and associate on a team project
- Stack
- Node.js, Express, TypeScript, Drizzle ORM, PostgreSQL, Python, Jython, GTFS, OpenStreetMap, JOSM, Railway
Problem
Lagos has ferry routes but no public documentation of them. Commuters learn where the boats go, and when, by word of mouth. What information does exist is scattered across an official LASWA list, map apps, and what operators and field contractors know on the ground.
Solution
- Sources
- LASWA list, Google Maps and OpenStreetMap, field contractors, operator interviews, GPS logs
- Collection
- Public forms app for jetty and route submissions (Express, TypeScript)
- Storage
- PostgreSQL, accessed through Drizzle ORM
- Processing
- Python toolchain that builds the GTFS feed and runs the data-quality checks
- Output
- GTFS feed served at lagosferries.com, and published to Google Maps, OpenStreetMap, the Mobility Database and openAFRICA
- Map
- Public Next.js map app on top of the same data
Hardest parts
- Learning how GTFS works and turning the spec into Python.
- Figuring out how to batch update routes and facility geometry in JOSM.
Result
Published as a public GTFS feed, and live on Google Maps, OpenStreetMap, the Mobility Database and openAFRICA.