Curating local data for local people. In Bath.

Minecraft Map of Bath

The Ordnance Survey have published a Minecraft map of Great Britain. Its recently been updated to include more detail. Its a fantastic idea and has, I think, some potential use as an educational tool.

However the full map is something like 20GB, eating up a fair bit of disk space and memory and making it difficult to use it on older hardware. So I wondered whether there was a way to cut out a limited section of the map focusing on a smaller area. Like Bath for example.

Here’s how I did it.

After I’d failed to convince the OS to do the work for me my first port of call was to look at whether they had published any code that would let me re-run their world generation. Unfortunately they’ve decided not to do that which is a shame. As far as I can tell the world generation is based on open data so would have made a nice showcase for re-purposing their data in a new way. I also didn’t want to re-write it from scratch, although it would be an interesting project for someone to tackle. Especially if they were to use additional open sources.

So I started to dig through the plethora of Minecraft level editing tools to find something that I could use. Ideally I wanted to be able to take the geometry for B&NES and use the OS Minecraft co-ordinator finder to cut out the relevant region from the map.

However I struggled to find a command-line tool that would do exactly what I needed. This Python library for reading Minecraft levels looked like what I wanted. It has a command-line application for interacting with a world, including extracting bounded areas into schematics. However I had mixed results. While I was able to load the OS level and extract a schematic I couldn’t seem to successfully import it into the empty world I’d created.

So I turned to MCEdit which is a graphical Minecraft world editor which also happens to be written in Python. It seems to be well used by people creating large complex Minecraft builds and it has lots of features for copying and pasting sections of levels. I’d been reluctant to use it though as I figured it would be slow dealing with such a large world. I was also hoping to script something that could be tailored by other people interested in generating sections of the map covering their own area.

Anyway, I found that MCEdit, while slow to open the file, does provides a nice 2D way to navigate through the world (press Tab when you’ve loaded a level to switch perspective). So by jumping to the co-ordinates above Bath (around X:15000, Y:100, Z:45600 will do it) I was able to see the region I wanted to copy.

The MCEdit selection tool allows you to grab an area which you can then extract. You can also choose to “prune” the rest of the world leaving just your selection. I doubt this is the most efficient way to do it as it takes a couple of hours on my laptop with some fiddling around. But the end result is a level containing just the region surrounding Bath, Keynsham and Bathampton. Its also a lot smaller, about 20Mb.

If you’d like to download a copy of the level then you can download it here. The map contains Ordnance Survey Data © Crown Copyright and Database Distribution 2014.

I’ve set the spawn point to be on Beechen Cliff overlooking the centre of Bath.

Note that the scale isn’t 1:1 with normal Minecraft. IIRC a Minecraft block is essentially a 1m cube. For the OS map they explain that a block is more like a cuboid measuring 25 m x 25 m x 12m.

The OS documentation indicates which block type maps to which type of geographical feature. You can also follow the instructions in their readme to install the level.

What can you do with it? Well, I was wondering whether it might provide a fun and alternative way to visualise some local data. Let me know if you do anything with it!