Coin Ney Forum

Coin Ney Forum

You are not logged in.

#1 2020-09-13 21:28:58

Registered: 2020-09-13
Posts: 1

you should be able to see a map of the UK below

Posts tagged ‘ programming ’.
Mar 30 13              d3, , , open data, open source, planet compsoc,  programming , , ,           Realtime UK train map.

A quick project to visualise some of the open data available about the UK train network

First of all, the result,  you should be able to see a map of the UK below , with coloured dots appearing to represent trains as they arrive at stations in realtime.

This requires a browser that supports SVG and websockets

I’ve only tested it works in Firefox and Chrome.
Click for larger version  So, whats going on here.
It starts with the network rail operational data feeds one of which  provides a stream of events for train movements (excellently documented by the  Open Rail Data  wiki).
The  interesting  fields of data are the timestamp of the event, and the planned timestamp of the event, as well as the STANOX code.
These allow me to locate the event, and to calculate the delay between when the event should have happened, and when it actually happened.
To display the events on a map the STANOX code needs to be translated into something more useful, to do that I grabbed one of the reference data files described here.

I then use that to convert STANOX codes to TIPLOC codes (bear with me)

Once I have the TIPLOC code I can find the Easting and Northing of stations using the NaPTAN dataset.
This doesn’t cover the locations of all events as it only has public stations and doesn’t include depot/switch points that trains also report at, but it turns out it locates  about  70% of the events received, which is more than enough for a visualisation.

Unfortunately Eastings and Northings are not a very useful co-ordinate system

what I really want is WGS84 latitude and longitude (GPS co-ordinates), thankfully Chris Veness of has written conversion functions in javascript.
At this point I’m connecting to the  National Rail  data feed in node, looking up the location and coverting to the useful lat/long, so I have a realtime stream of train locations and how delayed they are in my console.
The next step is to get this into a  browser .
I don’t really have any experience with drawing maps in the browser, but my first guess that d3 will be useful proves correct, .

And I quickly find this extremely useful tutorial: Let’s Make a Map

I take the end result of this tutorial.

Slightly zoom and recentre the map (the national rail data doesn’t cover Northern Ireland

and not much goes on in the very north of Scotland).
The result is a nice looking SVG UK map that I can draw points on using the d3 projection to convert the lat/long to x/y points.
The last thing to link together is to get the data from node to the  browser , I wanted to use websockets given the streaming nature of the data, so I grab ws for node.
I currently use lighttpd as a webserver, which can’t handle websocket proxying, so I also setup HAProxy in front of lighttpd to pass the websocket re quest s directly to node.
At this point it all works, I have dots appearing on my map in the browser as trains arrive at stations.
To make things a little more interesting I use d3 to create a colour gradient for on time to very delayed trains, and I use a radial gradient with some transparency to make trains slightly colour an area of the map.
The result is what you (hopefully) see above, an animated map that shows locations of trains as they arrive, colour coded by how delayed the train is.

The source for this is all available on GitHub
2 Comments                               Feb 12 10              ajax

codepad, learning, mongodb, programming, ruby          Try Ruby!.
A site I came across some time ago.

Try Ruby gives you an interactive (AJAX) ruby shell

with a simple tutorial to follow.
In my opinion an awesome way to get started with a new language, I find learning is much easier by trying things out.
If you like this then you may also be interested in Try MongoDB (a similar MongoDB tutorial) and also codepad (a pastebin that allows you to execute certain programming languages and view the result).
Leave a comment.


Board footer

Powered by FluxBB