ArduPlotter – 3D Map (CesiumJS)

So on Christmas Eve I was tracking Santa (as you do), and noticed that the NORAD tracking no longer opens up Google Earth, but instead works in browser.

Doing some digging around I found that they used Cesium. This uses WebGL to create 2D maps and 3D globes. From the start of ArduPlotter there has been a button to download a (generated) KML file of the flight which will open in Google Earth if you have it installed. Being able to view a 3D map in browser seemed like an awesome idea, so I set about making a quick prototype.

Whilst creating a 3D globe is pretty easy using the examples, actually getting the flight path in correctly proved a little tricky. Cesium uses Cesium Language (CZML) which is their own way of representing points in 3D space (and time) around the Earth. The API documentation is not the easiest to understand so I spent most of my time taking apart one of their examples, “BAMS C4ISR” which maps several moving objects flying around the Persian Gulf.

Once I had the basic map working I spent a bit of time experimenting with different parameters for Cesium. I wanted to have terrain elevation data, and satellite imagery. I had to set up a Bing Maps API for the satellite imagery (after experimenting with different providers Bing seemed to have the best resolution and availability for low level imagery. For the terrain data I’ve used VT MÄK. Again they seem to provide the most accurate and up to date elevation data.

ArduPlotter 3D Map

A sample flight. Sometimes features in the distance don’t load quite correctly.


ArduPlotter 3D Map Open StreetMap

I have left in the option to change the map imagery provider. Here Open StreetMap is being used


ArduPlotter 3D Map-zoom

Zooming in and moving around can make seeing the 3D nature of the plot easier.


This feature is by no means finished and finalized, but it is a good starting point for experimenting with different ways of visualising the data available in the flight logs.

Known Problems

  • If you move the view around before the map is fully loaded you may get very weird views
    This appears to be a Cesium problem rather than something I have done
  • All flights appear to start 4th August 2012 16:00
    I have not quite figured out ‘availability’  in the CZML. Also there is the question of what do I set this to, and how to calculate the duration of the flight reliably.
  • Some of the flight is cut off if the log is very big
    Again this is related to the point above
  • Flight is undergound
    This is because of the GPS altitude data in the log, and the 3rd party terrain data
  • Flight takes off / lands in the air
    Again, this is the same as the point above.

Leave a Reply

Your email address will not be published. Required fields are marked *