Skip to main content
  1. Posts/

How I mapped the buses in Nelson

·3 mins·
public transport projects

Introduction
#

Mapping public transport in OpenStreetMap is quite complicated, so I wrote this guide to show how I went about mapping the bus network in my city. Note that I am using the iD editor. I hope this guide is be useful.

Make sure to read the wiki article on Buses to understand how they work, and everything I left out of this article.

First stop: bus stops
#

Bus stops are the most basic part of any bus network, and they’re relatively easy to map. Just place a node on the side of the road, where the passenger would wait for the bus. In iD you can choose the feature type ‘Bus Stop’ to autofill the basic tags:

highway=bus_stop
public_transport=platform
name=*

More information, such as the existence of shelters or benches, can be added later.

I used the official transport website (eBus.nz) several months ago, went through each route and added all the stops. It showed approximately where they are, and their names, which was enough for me. If your local transport website includes the reference code of each stop, you should add it using ref=*.

Bus route relations
#

Several months ago when I originally started mapping the buses, I could not understand this and left it for a while, and someone else started mapping them instead. I will still explain everything here though.

We are going to use a combination of iD and relatify to simplify creating relations.

In iD: Locate the first stop in the route. Scroll down to relations, click Add to a relation > New relation. Select ‘Bus route’ as the feature type. There is now a lot of information to fill out - make sure to read the wiki page for detailed explanations about each field. Not all of the following tags are required, but they add a lot of useful information:

type=route
route=bus
ref=* # the number or code identifying the route, e.g. 4
public_transport:version=2
network=* # for me this is eBus
operator=* # see wiki
opening_hours=* # see wiki
interval=* # the time between buses at any stop. Use a time format such as HH:MM:SS
duration=* # the time it takes to go from the first stop to the last
from=*
via=*
to=*
name=* # something like 'Route <ref>: <from> to <to>, via <via>'. It depends, see wiki.
fee=* # does it cost money? yes or no
roundtrip=* # yes for a loop; no for a straight route
bicycle=* # can you take a bike with you?
wheelchair=* # can people using wheelchairs get on?

Now you should have all the bus stops and a relation ready. Still using iD, split the highway=* way beside the first stop. Then add the first stop as ‘platform’ and that bit of road with an empty role to the relation. Upload your changes, and grab the ID of the route relation.

Using Relatify
#

I’m not going to