USGS Quadrangle with 3D Effects in QGIS

Ben Leamon
3 min readMay 9, 2020

Last year I found some maps with hillshades generated in Blender. I was immediately obsessed. They. Are. Gorgeous. I’ve had maps decorating my living-spaces since at least sixth grade, and the mix of hillshade, shadows, and color just felt so magical. At the time I had no idea how they were made, but after my last project using hillshades, I wanted to have a go at making one myself. Since I don’t have any experience using Blender, I decided to see how close I could get in QGIS. In this post I’ll outline what steps I followed, and how you can make your own.

Download the data:

To make one of these maps, you’ll need two data layers: a digital elevation model (DEM) and an old map to use for coloration. This is probably the hardest part. You need an old map that will look good with 3D effects and covers an area that has high-resolution DEM data available. The USGS has lots of both of these, but if you want to work with areas from other countries or map-makers, it might take a bit of research. The old map has to be old-timey enough for the contrast to look interesting, but also accurate enough for the lines to match present-day elevation data. To keep the hunt for data simple, I decided to focus on Point Reyes, California, and downloaded both the one-meter resolution DEM and an old USGS quadrangle from the USGS National Map.

The original Map from the USGS

Processing in QGIS:

I was expecting to need to georeference the image of the historical map, but happily it seems that the USGS did that for me, so the old map lined up naturally with the modern DEMs. If you do need to georeference your image, this might be a good place to start.

The DEMs, however included values for parts of Drakes Bay and the Pacific ocean, which I didn’t need. Ocean pixels seemed to be coded as -1.6, so I went through all of the coastal DEMS and deleted any areas matching this value using the raster calculator. For layer x, I ran:

((“x@1”> -1.6)*“x@1”) / ((“x@1”> -1.6)*1 + (“x@1”> -1.6)*0)

Unneeded ocean-tiles duly removed, I clipped the DEMs to fit the size of the quadrangle (some of them were a bit too big).

Next I turned all of the DEMs into hillshades. First, I tried using a multi-directional hillshade algorithm, but this didn’t show up very well when overlayed with the quadrangle, so in the end I used the Analitical Hillshade tool, with exaggeration set at 3, and resampling changed to Cubic and Average. Once I decided on a “recipe” this part went quickly, but finding the best hillshade values took a lot of trial and error.

After that I overlayed the hillshade with the quadrangle.

In Blender, the shadows are striking, the light almost buttery. Again, to keep things simple, I created additional shadows using Zoran-Cuckovic’s terrain shading plugin for QGIS. He also has a few interesting articles on modelling shadows, which I would recommend.

The finished project!

The final project has four layers. From the bottom:

  1. The USGS quadrangle
  2. Hillshade
  3. Overlayed copy of the USGS quadrangle
  4. Extra shadows from the Terrain Shading plugin

For next time:

Overall this project took about six hours from start to finish over the course of one afternoon. I think it looks good, and especially given the amount of time it took, I’m happy with it. While I was waiting for data to download I watched some videos about Blender, and it’s definitely something I’d like to look into. (Those shadows!)

I hope you enjoyed the write-up, and good luck with your maps!

--

--