At a recent internal hacking event here, NYPL Labs developer Paul Beaudoin recruited me into an interesting project: transforming one of the library's 20,000 digitized historical maps into the three-dimensional world of the building game Minecraft.
Our project was relatively modest. Britain's Ordnance Survey and Denmark's Ministry of the Environment have released Minecraft maps of entire countries, generated from modern survey data. A project called TopoMC can generate maps of any area in the United States, using data from the US Geological Survey. We wanted to give the same treatment to a map created using old-fashioned methods.
We chose to use this 1860 map of the Fort Washington area of Manhattan, near the Hudson River and modern-day 160th Street. There's something special about this map: it has contour lines, which give us a picture of how far above the waterline each point on the map is. These lines take the map into the third dimension and make it possible for us to translate it into a meaningful Minecraft world.
Download the Worlds
We made two versions of the Fort Washington map. Both maps will work with Minecraft for PC, Mac, or Linux.
The Minecraft wiki has instructions on installing a custom world once you've downloaded it.
From Map to Minecraft
Turning the 2D map into a 3D world was a multi-step process. First, Paul used QGIS to trace and label the contour lines on the digitized map. Then he generated a greyscale image that fills in the space between the contour lines to show the estimated elevation at every point on the map.
The Hudson River shows up as an area of entirely black pixels on the left side of the map—an area where the elevation is zero. Land near the riverbank is dark grey, which tells us that part of the Minecraft world should be a few blocks higher than the river. Land in the middle of the map is a very light grey, which tells us that that part of the Minecraft map should be much higher than the river.
The Feature Image
Paul then used Inkscape to trace over the map's major features: water, grass, dirt paths and the paved roads of the city grid system. He traced the footprints of buildings, including the map's most prominent feature, the New York Institution for Instruction of the Deaf and Dumb.
The result was a second image which covers the same area as the greyscale image. The greyscale image shows how high the elevation is at this point on the map, and this image shows which Minecraft block should be visible at that point. Bright green means "water", dark green means "grass", cyan means "cobblestone" (for paved roads), dark purple means "stone brick" (for building footprints), and so on.
Meanwhile, I wrote a Python script that uses Pymclevel to combine Paul's two images into a three-dimensional Minecraft world. If you're interested in running this script yourself, the source code is in our GitHub project.
I place a pillar of smoooth stone at every (x,z) coordinate in the world. The height of the pillar depends on the shade of grey at the corresponding pixel in the elevation image. A dark grey means a low pillar; a light grey means a high-up pillar. This gives a Minecraft world that has the right shape, but has no features—it's made entirely of smooth stone.
I get the features from Paul's other image. At every (x,z) coordinate I check the color of the corresponding pixel of the feature image. If it's dark green, I put a layer of grass on top of the smooth stone. If it's dark purple, I put down a layer of stone brick. And so on. The result is a three-dimensional world that represents the information found on a two-dimensional map.
The world we created is faithful to the original map, but it doesn't look like the real Fort Washington of 1860. Our world only shows what the map shows. Real buildings are three-dimensional structures made of varying materials, not the uniform two-dimensional outlines shown on the map. We could represent trees and vegetation in Minecraft if we knew where to put them, but they're not shown on the original map, so we don't have them in our world.
In an effort to make the world feel more like a real space, I created a second Minecraft world from Paul's images. The first world I made plays in creative mode, which allows the player to fly around the map. My second world plays in the more challenging survival mode, in which the player is confined to the ground and must negotiate the hilly terrain of Manhattan by jumping.
The survival-mode map has the same shape and terrain as the creative-mode map, but it also features randomly scattered trees, flowers, vegetation and animals. You can play this map like you would any other survival-mode map—cut down trees, dig for hidden resources, create farms, and build structures. It's still not a good model of nineteenth-century America—there were no creepers or Endermen back then— but I think it gives a better feeling of actually inhabiting a space.
This isn't the first time Labs has taken inspiration from NYPL's digitized map collection. Building Inspector is our project to visualize New York's past by applying computer vision and crowdsourcing techniques to old insurance atlases . As far as we're concerned, digitizing all these maps is just the first step. The next step is to extract the information contained in the map—the contour lines of the Fort Washington map, the building shapes and street addresses of the insurance atlases—and make it accessible to a twenty-first-century audience.