NaPTAN/Surveying and Merging NaPTAN and OSM data

From OpenStreetMap Wiki
Jump to navigation Jump to search

For areas where we have recently added NaPTAN import data (bus stops data) we may find there are many duplicate bus stops to reconcile. We can manually merge new NaPTAN nodes with old OSM surveyed data and/or seek to survey bus stops again to improve accuracy.


Procedures for merging data are still evolving but at the moment the following is suggested:

  • We should seek to merge duplicate highway=bus_stop nodes into a single node. By using the 'merge' feature within editors, we preserve all tags from both datasets and also all relation memberships.
  • Tags that start with Naptan should not be edited until a system had been agreed on (except naptan:verified=*, see below)
  • The location of the node should be adjusted from accurate survey, aerial photography or an average position taken between the NaPTAN node point and the OSM node point. It's OK to move NaPTAN nodes around but make sure the road alignment is correct before you do this manually if you haven't checked the position of a stop with a GPS receiver. NaPTAN nodes in Birmingham were off position by anything between 5m and 100m.
  • The tag name=* should be changed to show the name on the Bus Stop. If the name has two separate lines they should be separated with a ' / ' eg Anerley Road / Croydon Road
    The tag Naptan:CommonName=* should not be changed.
  • The tag local_ref=* should be edited or added to show what is actually on the bus stop. For example in London this is usually a letter on a red sign on top of the bus stop
    The tag Naptan:Indicator=* should not be changed.
  • Add shelter=yes or shelter=no to specify if a bus shelter is present.
  • A note may be added to explain the changes you have made. The note should be used to indicate other errors in the Naptan data, for example, it's common for the bearing to be wrong. naptan:Error=* can be used to record errors in NaPTAN data.
  • If you are happy you have successfully verified or merged the bus stop then the naptan:verified=no tag should be set to naptan:verified=yes.
  • Edit the source tag (if present) to say source=naptan_import;survey or source=naptan_import;yahoo

Surveying tips

Although the NaPTAN nodes can be inaccurately placed, always remember your GPS can be inaccurate! The aim is always to place the nodes more accurately not less. When GPS surveying, it's important to be standing exactly at the bus stop and is best done when stationary not attempting to capture its position when driving or cycling past. We can now use Bing Aerial Imagery to achieve better accuracy. Although bus stops are generally too small to see, you can make paper-based notes, placing a bus stop accurately in relation to roads and buildings which are visible. This can work well as sanity check if you're not sure how good your GPS signal is. Note however that the Bing imagery is known to be off sometimes, by as much as 10m.

For London the original NaPTAN data had a bearing of 'N' for all stops. Many now have the correct bearing however there are still a good number of incorrect 'N' bearings in there. If a bearing is wrong a note tag should be used to indicate this. Do not change the actual Naptan tag.

Other bus stop tagging notes

See highway=bus_stop for full (international) tagging docs. The following bus stop tagging notes apply particularly to UK NaPTAN imported data

  • Ultimately we would like to include bus stops in Route Relations, along with the streets of the route (See Relation:route#Bus Routes (also trolley bus)) but...
  • Where the route_ref tag is present, ensure bus route numbers are added, separated by semicolons.
  • Where the bus stop is not kerbside but there is a pull-in for the bus like a mini-layby, the bus stop should be positioned some extra distance from the median line represented in the renderers. Suggest adding a tag layby=yes to indicate why the bus stop is further back than kerbside ones


If a NaPTAN node is not physically present on the ground and you have no knowledge that it is used as a stop then:

If a NaPTAN node is not physically present on the ground but you have knowledge that it is used as a stop then:

These latter stops may already have a NaPTAN "CUS" tag which indicates its a customary stop. We might make that explicit by adding a customary_stop=yes tag.


Python naptan package

You can get an up-to-date view of NaPTAN data using the Python/pandas naptan package maintained by Callum Mullins:

$ python -m venv naptan-venv --system-site-packages
$ . naptan-venv/bin/activate
$ pip install naptan
$ python

This API can be used to preview NaPTAN data against OSM in your browser:

>>> import naptan
>>> naptan.ATCO_CODES.query('Region=="SE"')
>>> oxon_stops = naptan.get_area_stops(['340'])
>>> naptan.view_map(oxon_stops)

The preview links to for closer examination of each stop.


NaPTAN/Novam is an older, now defunct merging tool.