Getting the data
The Ordnance Survey OpenData can be downloaded or ordered on DVD from here. I thought I'd order the lot on DVD since its free and it would save my bandwidth and time burning gigs of data to disc.
The data comes on EcoDisc DVDs, packaged in cardboard sleeves:
For this post I'll only be using data on disc 1/6 and 3/6 on the OS Street View discs.
Getting GeoServer
GeoServer stable release can be downloaded here. I punted for the binary download format, because I want to run GeoServer on Linux. After unzipping and starting GeoServer, you should be able to browse to http://localhost:8080/geoserver/web/ and log in using the default username/password:
admin/geoserver
Using the Street View Rasters
First we need to decide what set of tiles we want to use. I only want maps for York and the surrounding area, so using the grid map:
Disc 3 of the OS Street View set contains the tif
image files I want, located in the directory:
data/seThe files need to be coppied to a location in GeoServers data directory tree. I coppied the images to:
geoserver-2.0.2/data_dir/data/OpenData/StreetView/se
The image files aren't GeoTIFFs, so need geo-referencing data not contained in the image file. This information is held on the disc 1 of the OS Street View set, in the directory:
data/georeferencing files/TFWWe only need the files which start with
se
, and these need to be copied along side the images in the data directory:
geoserver-2.0.2/data_dir/data/OpenData/StreetView/seWe also need to make sure that the file extension of the
tfw
is lower cased, using a Linux shell:
rename .TFW .tfw *.TFWWe should now have a directory containing
.tif
image files and .tfw
world files. Each of the tif/tfw pairs needs a file containing projection information before it can be loaded into GeoServer. The files aren't supplied with the raster data, but they are simple to create. The name of the file must match the name of the tif/tfw, and each of the files must contain the same data:
PROJCS["OSGB 1936 / British National Grid", GEOGCS["OSGB 1936", DATUM["OSGB_1936", SPHEROID["Airy 1830",6377563.396,299.3249646, AUTHORITY["EPSG","7001"]], AUTHORITY["EPSG","6277"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4277"]], UNIT["metre",1, AUTHORITY["EPSG","9001"]], PROJECTION["Transverse_Mercator"], PARAMETER["latitude_of_origin",49], PARAMETER["central_meridian",-2], PARAMETER["scale_factor",0.9996012717], PARAMETER["false_easting",400000], PARAMETER["false_northing",-100000], AUTHORITY["EPSG","27700"], AXIS["Easting",EAST], AXIS["Northing",NORTH]]
You can create the files by hand, or running the following Python script in the directory containing the .tif
files will do it for you:
import glob content = 'PROJCS["OSGB 1936 / British National Grid", GEOGCS["OSGB 1936", DATUM["OSGB_1936", SPHEROID["Airy 1830",6377563.396,299.3249646, AUTHORITY["EPSG","7001"]], AUTHORITY["EPSG","6277"]], PRIMEM["Greenwich",0, AUTHORITY["EPSG","8901"]], UNIT["degree",0.01745329251994328, AUTHORITY["EPSG","9122"]], AUTHORITY["EPSG","4277"]], UNIT["metre",1, AUTHORITY["EPSG","9001"]], PROJECTION["Transverse_Mercator"], PARAMETER["latitude_of_origin",49], PARAMETER["central_meridian",-2], PARAMETER["scale_factor",0.9996012717], PARAMETER["false_easting",400000], PARAMETER["false_northing",-100000], AUTHORITY["EPSG","27700"], AXIS["Easting",EAST], AXIS["Northing",NORTH]]' tifs = glob.glob('*.tif') for tif in tifs: prj = tif.split('.')[0] + '.prj' file = open(prj,'w') file.writelines(content) file.close()
If you have a data directory with files that look a bit like this, then you're ready to load them into GeoServer:
- Load GeoServer up in a browser http://localhost:8080/geoserver/web/ and login. Click the 'Workspaces' link in the 'Data' section of the left hand navigation bar. Now click the 'Add new workspace' link.
-
Name the workspace
OpenData
and give it the URIhttps://www.ordnancesurvey.co.uk/
, and click save. - Click the 'Stores' link in the 'Data' section of the left hand navigation bar. Now click the 'Add new Store' link. Under the 'Raster Data Sources' heading, click the 'ImageMosaic' link.
-
Select the
OpenData
workspace, name the data sourceOS Street View SE
and point the URL connection parameter to the data directory:file:data/OpenData/StreetView/se
and then click save. - You should be forwarded to the 'New Layer chooser page', click the 'Publish' link next to the 'se' layer in the table.
-
About halfway down the page there should be inputs for 'Native SRS' and 'Declared SRS', make sure they both contain:
EPSG:27700
and click the 'Compute from data' and 'Compute from native bounds' links. - Finally click save.
If all went well you should be able to use GeoServers 'Layer Preview' built in OpenLayers client to view the map:
Source Code
- .prj Python Script - prj.py