UPDATE: Since writing this post I’ve had communication with the Ordnance Survey who have looked into the issues raised. The latest Terrain 50 data available supersedes this post and so I suspect the problems have been fixed. I now use Terrain 50 data for my broad brush national work. Please have a look at some of my newer posts for tips on working with GIS and raster data, especially this.
This is quite a technical post about (free) elevation data of Great Britain, analysed for Scotland.
I apologise for the screen shots, I wasn’t in the mood to make beautiful maps!
In spring 2010 the Ordnance Survey (OS) released a number of their mapping products for free under the brand OpenData with an attribution-only license. One part of the product suite was the Land-Form Panorama dataset, an elevation model available as either a grid (raster) or as contours. The model is based on the 1:50’000 contours from the 1980s (can’t find a ref for this on the web, but I remember reading it – so it must be true…). From the outset OS stated they would not update this dataset.
This spring (2013) OS released a new elevation model called Terrain 50 – which will be updated (annually)!
As I’ve been using Panorama for the past three years I thought it worth undertaking a quick analysis to see where the differences lay with Terrain 50, and how big they are. With two ‘perfect’ datasets this would show landscape changes of the past 20-30 years. In reality I was expecting Terrain 50 to highlight errors in the Panorama.
For this I used the open source GIS, GRASS. If you’d like to check my working you can, of course, use any GIS software of your choosing, or do it in a language like Python or R. Be warned, if you follow the steps below on a similar quantity of data you’ll need at least 4Gb of RAM.
GRASS is built up of many tools, those I’ve used I’ve included in brackets. Here are the steps I went through:
- Imported all the tiles from both datasets into my GRASS mapset (r.in.gdal)
- Then merged them (r.patch) into two sets: Panorama and Terrain 50
- Subtracted the Panorama data from the Terrain 50 (r.mapcalc)
- Exported the datasets (r.out.xyz) so I could analyse them in R, not having yet acquired the skill to use R inside GRASS…
- Loaded the data into R (takes a couple of minutes)
panorama=read.table("raw/OS_elevation/panorama", header=F, sep="|") terrain50=read.table("raw/OS_elevation/terrain50", header=F, sep="|")
- Plotted density curves (smoothed histograms) for both sets
png(file="smooth_hist.png") plot(density(terrain50$V3), main="Density plot of OS Terrain 50 (black) and Panorama (red)") lines(density(panorama$V3), col="red") dev.off()
- Discovered there’s very little difference between them…
Which isn’t a big surprise as the mountains of Scotland haven’t really changed much in the last 30 years. There is a small spike from the Terrain 50 around an elevation of 0 m AOD (Above Ordnance Datum). Most likely this is due to the inclusion of more small islands than the earlier dataset.
Fear not though, I didn’t stop there. Going back to GRASS I plotted up the difference layer I’d created in step 3, above. Generally there seemed to be little going on, but as I paid a little more attention the following differences stood out (map shows the Terrain 50 minus the Panorama):
- The Panorama data for the west of Scotland is generally east of the Terrain 50 data by approx 50 m
- This hasn’t really happened for the tile(s) over Inverness
- There are a couple of hot spots where a big difference is observed, I’ve picked two:
- Polla, Loch Eriboll has grown a 500 m high round hill. I’m 99.9% certain this is an error
- Near Loch Leven a large hole has been filled in! This is probably correct as there is/was opencast workings in these parts…
So, important question: should you switch to using Terrain 50 instead of Panorama?
I don’t know!! As a general rule, then probably: as it is supported and should improve over time. As to which data is in the right place (west-east shift), I also don’t know.
When I’ve a free bit of time and processing power I’ll do a comparison to the NextMap data, which should give us a much better idea.