In QGIS 3, we have introduced support for 3D canvas. Most of the functionalities are intuitive and easy to use. But there are some configuration options which are hidden and require a bit of more in-depth explanation for users and developers.
This blog post and the follow-up ones will discuss a range of topics: data sources, 3D canvas navigation, configuration, working with various types of layers, styling and more!
To work with QGIS 3D, you need data: rasters and vectors. We will use digital terrain model rasters for 3D visualisation purpose. You can download SRTM data from the SRTM Tile Downloader.
For vectors, you can use any point, line and polygon data. There are different methods of creating 3D objects from each data type in the 3D canvas. If you want true 3D data representing buildings, you can download CityGML data from the list of open CityGML datasets.
For the purpose of these blog posts, we will use SRTM data for Mont Blanc and CityGML data for Berlin.
Note: You need to use a projected coordinate reference system in metres (or feet in case you belong to one of these countries) for your data and canvas to be able to use QGIS 3D.
3D Canvas and Navigation
To start with, we are going to add the terrain model for Mont Blanc to the QGIS canvas. Bing Aerial photo (as XYZ tiles layer) was also loaded in QGIS.
To view the 3D canvas, in the main menu select View > New 3D Map View
A floating QGIS panel will appear. You can drag the panel to the bottom part of your canvas to dock it.
To start with, the 3D view shows the same extent and view as seen in the 2D canvas. Also note that there is no dedicated toolbar for navigation in the 3D canvas. You can zoom in/out and pan in the 3D canvas in the same way as in the main 2D canvas:
- Move around map
- by dragging the map with left mouse button pressed
- by using up/down/left/right keys
- Zoom map in/out
- by using the mouse wheel
- by dragging mouse up/down with right mouse button pressed
The following additional options allow you to explore the map in 3D:
- Tilt / rotate camera
- by dragging the mouse with middle mouse button pressed
- by pressing Shift and dragging the mouse with left mouse button pressed
- by pressing Shift and using up/down/left/right keys
To reset the camera view, click button in the 3D canvas panel.
You can use a terrain raster to represent 3D elevation in your canvas. It is expected that such raster layer contains one band where each raster cell represents elevation. To do that, click button to open a new window with 3D view configuration. After selecting your raster layer for Elevation and clicking OK, you should be able to see Mont Blanc in the 3D view:
In the configuration window there are various other options to fine-tune the 3D scene - let’s have a closer look at their meaning. Before diving into the details, it is worth noting that terrain in 3D view is represented by a hierarchy of terrain tiles and as the camera moves closer to the terrain, existing tiles that do not have sufficient detail are replaced by smaller tiles with more details. Each tile has mesh geometry derived from the elevation raster layer and texture created by rendering 2D map for the extent of the tile.
Here is the complete list of the configuration options and their meaning:
- Elevation: Raster to be used for generation of terrain.
- Vertical scale: Scale factor for vertical axis. Raising the scale will make even small hills look like mountains!
- Tile resolution: How many samples from the terrain raster layer to use for each tile. The value of 16 px means that geometry of each tile will be built from 16x16 elevation samples. Higher number creates more detailed terrain tiles at the expense of increased rendering complexity.
- Skirt height: Sometimes it is possible to see small cracks between tiles of the terrain. Raising this value will add vertical walls (“skirts”) around terrain tiles to hide the cracks.
- Map tile resolution: Width and height of 2D map images used as textures for terrain tiles. The value of 256 px means that each tile will have map rendered into image of 256x256 pixels. Higher number creates more detailed terrain tiles at the expense of increased rendering complexity.
- Max. screen error: Determines threshold when existing terrain tiles are swapped to more detailed ones (and vice versa) - i.e. how soon 3D view will use higher quality tiles. Lower number means more details in the scene at the expense of increased rendering complexity.
- Max. ground error: Tells the 3D view at what resolution of terrain tiles it is fine to stop dividing them into more detailed tiles (because splitting them would not introduce any extra detail anyway). This value limits the depth of the hierarchy of tiles: lower value makes the hierarchy depth, increasing rendering complexity.
- Zoom levels: Show how many zoom levels will be used (depends on map tile resolution and max. ground error).
- Show labels: Toggles the map labels on/off
- Show map tile info: Adds border and tile numbers to terrain tiles (useful for troubleshooting terrain issues)
- Show bounding boxes: Shows 3D bounding boxes of terrain tiles (useful for troubleshooting terrain issues)