Hello Dr J,
I am a software engineer of Aubin, a multi-modal journey planner covering the whole of Great Britain using open data, which is currently in the beta phase.
Our journey planner has the ability to route passengers direct to the platform inside stations, with step by step navigation outside and inside stations, including which lifts to use, as long as the data exist in OpenStreetMap. It can tell you in real time which platform the train departs and guide you on the map to the platform as well.
We use Naptan AtcoCode as the identifier for all stops, but after checking the data, we have to make some adjustment on top of the data.
The first thing is that, a station, or even a single platform, can serve both mainline rail (National Rail) and metro services. However, the current data set have both the 9100 and 9400 codes for these stations / platforms where on the ground they are the same. As a result we have to process the feed to replace the 9400 codes by 9100 codes if the stations / platforms are shared.
The second thing is that, the Naptan schema guide specifies the codes for a stop area, access place and quay (using Transmodel terminology), however in the real dataset, I can’t find any real data for the platforms (quays) for mainline rail stations, but only the access places in the format of 9100TIPLOC, and a rail station will have multiple of these if there are multiple TIPLOCs (where the scheme guide specifies that the platforms should be in the format of 9100TIPLOC1). Even if there are multiple TIPLOCs for a rail station, they are part of the same station so they need to belong to the same stop area (910GTIPLOC), where the primary TIPLOC is used (the primary TIPLOC is the one in the National Rail timetable data station file with an interchange status not equal to 9).
Therefore we are not directly using the Naptan data for mainline rail stations / platforms but generate the codes directly from National Rail timetable data.
Using Clapham Junction as an example, we have data for various platforms in the following form, using the GTFS model:
{
{
"gtfsId": "GB:9100CLPHMJW3",
"name": "Clapham Junction (Platform 3)",
"platformCode": "3",
"parentStation": {
"gtfsId": "GB:910GCLPHMJC"
}
},
{
"gtfsId": "GB:9100CLPHMJM9",
"name": "Clapham Junction (Platform 9)",
"platformCode": "9",
"parentStation": {
"gtfsId": "GB:910GCLPHMJC"
}
},
{
"gtfsId": "GB:9100CLPHMJC14",
"name": "Clapham Junction (Platform 14)",
"platformCode": "14",
"parentStation": {
"gtfsId": "GB:910GCLPHMJC"
}
}
}
Another defect in the data is that, in the dataset, some tube stations only have one platform code but in the real world, there are multiple platform islands. For example, there is only one code listed for Finchley Road where services for both directions are assigned the same code, but in reality, there are 4 platforms, where both northbound platforms are on an island, and both southbound platforms are on another island. It is impossible for us to correctly tell a wheelchair user that changing trains between the same direction is possible, but changing between different directions is impossible. We therefore need accurate platform data in the dataset to support these use cases.
In order to provide more accurate navigation instructions, we also replace the location provided in the dataset with OpenStreetMap data if a match can be found.
Whether the platform is a rail platform or a metro platform is not important to us, and it is meaningless if both rail and metro services use it. The more important thing is to ensure that in the timetable data, both rail and metro services use the same code if they share the same platform in the real world, and use different codes if they use different platforms.
In regard to showing the symbols and branding, the stations are totally irrelevant. Only the service matters. If the service in an itinerary is a Metropolitan service, the tube logo is shown, if the service is a Chiltern service, the National Rail logo is shown, if the service is a heritage railway service, a generic train logo is shown. If the user plans a journey from Amersham to Rickmansworth, both the metro and the rail services are shown side by side to each other in a similar manner that the user can choose between multiple bus routes, as they use the exact same stops.
You can try our API, especially the stops endpoint, on OTP GraphQL Explorer and our web app on https://beta.aubin.app/ which uses that API.