Raster Analysis
What are we going to learn?
In this workshop, we will learn about:
- Rasters
- Plugins
- DEM
- Terrain Analysis
- Contours
- Georeferencing
What is Raster Data?
A good example of a raster is an image file (like a jpg). If you zoom in on that image, you will see that it is just a grid of coloured pixels. Each pixel is just a cell with a number in it which tells the computer what colour it should be. The cell size might be small (high resolution), or large (low resolution).
A spatial raster is basically just a grid of cells like an image, but the values in those cells might represent the colours in an aerial photograph, or population density in that area, or the elevation. The main distinction of a spatial raster is that the grid is attached to a single coordinate point (usually in the top left corner), and the rest of the grid is laid on the map from there. The cells size of a spatial raster represents the distance each cell covers (for example they might be 1x1m or 10x10km).
Rasters aren’t as precise as vector data, as they are an approximation of the values in an area. For example every millimetre of a 1x1m cell might not have the same elevation, but the cell value is a helpful summary of the elevation in that area. This ability to neatly summarise and approximate data means that rasters are a very efficient way of showing continuous data across a large area.
A Digital Elevation Model (DEM) is a common example of raster data which shows the elevation of the land.
Aims for this session
In the last session we found that a number of residential areas will likely receive dust from the construction. One way to reduce dust is to regularly spray water on the roads, and wash down the trucks. However you now need to deal with the water runoff that creates. We can use watershed and basin analysis on a DEM to look at where the water will flow.
We can also use similar data to calculate how for away the wind turbines will be visible
Install the ArcGeek Calculator plugin
We need to install a plugin so we can access certain geoprocessing tools useful for basin analysis: the “ArcGeek Calculator” plugin.
There are many other plugins from the QGIS Community that you can explore to enhance QGIS, but we will stick with this for now.
A useful spatial library for basin analysis (and more) is SAGA.
Unfortunately, the built-in SAGA provider was removed in version 3.30, and it can be a little involved to get it working, which is why we use ArcGeek Calculator.
If you would like to access the SAGA tools, you can go to Plugins > Manage and Install Plugins... and Search... for “SAGA”. From the list on options choose Processing Saga NextGen Provider then in the bottom right, click Install Plugin. You might also need to install SAGA (version 9 or above) on your computer, if not already available.
No SAGA tools?
If the SAGA tools still don’t show in the Processing Toolbox after installing the plugin, try the following on Windows / macOS (as suggested by the plugin developers):
- Get the SAGA 9.2.1 binaries (download ‘saga_9.2.1_x64.zip’ for Windows, or ‘saga-9.2.1_mac.zip’ for macOS)
- Unzip it
- in QGIS go to Settings > Options > Processing > Providers > SAGANG and point the SAGA folder to your unzipped folder
If that doesn’t work on Windows, and you have administrator rights, try installing SAGA with ‘saga_9.2.1_x64_setup.exe’ instead.
For Linux, use your distribution’s package manager to install it (e.g. sudo apt install saga on Debian-based). If the repository’s version is too old, consider adding an external repository that provides a more recent version (e.g. the UbuntuGIS PPA for Ubuntu-based distributions).
Load in our Raster data
Our DEM comes from Geoscience Australia through their Elvis platform, but we have it ready to use in our raw data folder:
- Click the
Project Homedropdown, thendata > raw > 4-raster_data - Load in: Bris_DEM_5m.tif
Reproject the DEM
In the Bris_DEM_5m layer’s Properties (Right click > Properties... > Source), we can see that the Coordinate Reference System (CRS) in use is EPSG:7844 - GDA2020. It is the one that QGIS detected when opening the file. While this is good for Australian data, we can’t do slope and terrain measurements and analyses while our raster is measuring in degrees, we need it projected to use metres. A good PCS for around Brisbane/Meanjin is “EPSG:7856 - GDA2020 / MGA zone 56”. We can’t change that here, we instead will need to use the Warp (Reproject) tool.
- Use the tool
Raster > Projections > Warp (Reproject) - Make sure
Input layeris set asBris_DEM_5m. - pick “EPSG:7856 - GDA2020 / MGA zone 56” as the Target CRS
- if it is not in the list (ideally it would already be your “Project CRS”), you may need to click the Select CRS button

- untick No CRS
- use the filter to search for “7856”
- You should be able to find “EPSG:7856 - GDA2020 / MGA zone 56” under Predefined Coordinate Reference Systems
- if it is not in the list (ideally it would already be your “Project CRS”), you may need to click the Select CRS button
- Scroll down to click the three dots
...next to the Reprojected field, navigate to the project’s processed data folder, and type in Bris_DEM_5m_reproj and clickSave - Click
Run
If you want to learn more about the static datum GDA2020 (for “Geocentric Datum of Australia 2020”), an upgrade from the previous, less precise GDA94, head to the ICSM website.
Risks of Reprojecting Rasters
Important note: it is risky reprojecting Raster data, as this permanently changes the shape and structure of the underlying data.
Changing vector data from one Projection to another is straightforward, as you are just converting each point’s individual coordinates one-by-one. It’s just a numerical conversion. You can keep reprojecting vector data without issue.
When you reproject a raster, it will be in roughly the right location as the coordinate point in the top left corner will convert without issue. But because the raster is an interconnected grid, it will get stretched by the compromises made by the new projection. As we learned previously, the Mercator projection prioritises angles and direction, so converting to a Mercator projection might make your grid squares more rectangular. A projection like Albers Equal Area will prioritise area while distorting angles and shapes, so your raster might look very strange.
To make the data fit in this new shape, the reprojection process will use something called resampling. There are different resampling methods, but they basically overlap the old shape with the new one to determine what data fits in the new cells.
So what do you do?
Only reproject rasters when you must.
For example, if you are doing terrain analysis (such as slope), distance calculations, or spatial modeling that requires accurate measurement, you must reproject to a suitable projected coordinate system (not in degrees).
If you are analysing a raster with vectors, but your raster is in a different projection to your vectors, then reproject your vectors.
There are other exceptions, but if you’re unsure, check first.
Style the DEM
We can use the Layer Styling Panel to make the elevation layer more appealing.
- Use “Singleband pseudocolour” to apply a terrain colour palette suitable for elevation:
- Open the Color ramp dropdown
- Click “Create New Color Ramp”
- Choose “Catalog: cpt-city” and click “OK”
- In “Topography”, choose “wiki-schwarzwald-d050” and click “OK”
- Click “Classify”
- You can also add a hillshade to make your visualisation of elevation more readable and visually pleasing by giving an artificial lighting look to your map:
- Duplicate the DEM layer
- Rename it to “Hillshade”
- Make sure it is above the pseudocolour layer
- Change the symbology to “Hillshade”
- Change its “Resampling - Zoomed in” setting from “Nearest neighbour” to “Cubic” to make it look smoother
- In the “Transparency” tab of the Layer Styling Panel, change the opacity of the hillshade layer to about 10%
Let’s link these two together:
- Hold
Ctrland select both the Hillshade and the DEM layers - Press the
Add Groupbutton from the top of theLayerspanel - Call it “DEM”
Analyse Watersheds and Basins
Now that our raster is in a projected coordinate system, we can start doing measurements.
Using the ArcGeek Calculator plugin, we can infer the stream network and watershed basins from the DEM.
These are some examples of creating vector data from raster data!
Stream network
- Go to “Plugins - ArcGeek Calculator - Stream Network with Order”
- For
Input DEM, use Bris_DEM_5m_reproj - Keep the default for the other settings:
Flow Accumulation Thresholdmakes sure we don’t include smaller streams (that might not even exist)Smooth IterationsandSmooth Offsetcontrol the amount of smoothing applied to the streams
- Click “Run”
- Once finished (it takes a while), make the scratch layer permanent with the name “stream_network”
We now have a stream network we can style according to the “Strahler order” column.
Watershed basins
First, create a new vector layer for our basins’ “pour points”:
- Go to “Layer - Create Layer - New GeoPackage Layer…”
- Name the file “pour_points”
- The “Geometry type” can be “Point”
- Use the Project CRS (EPSG:7856)
- Click “OK”
- Select the new layer and click the “Edit” button
- Click “Add Point Feature”
- Place a point at the end of each of the two main streams
- Click “Save Layer Edits”
- Click “Toggle Editing”
We can now use these two pour points to find out which two basins they correspond to:
- Go to “Plugins - ArcGeek Calculator - Multiple Basin Delineation by Points”
- For
Input DEM, use Bris_DEM_5m_reproj - For
Input Point Shapefile, use pour_points - Keep the other values as default and click “Run”
We end up with two polygons that delineate the watershed basins for the two main streams, and we can see
Style the layers
We can now play with the symbology for those elements.
For the basins:
- Try using different colours for each basin, by classifying by “basin_id”, or remove the fill (
Simple fill > Symbol layer type > Outline: Simple Line) so you can see the elevation colours underneath. - You can also make the borders more obvious by changing the width of the stroke.
- We can add a new “name” column in the attribute table to label them (“Kedron Brook catchment” and “Enoggera Creek catchment”).
For the stream network:
- Change the colour of the streams:
- Change the symbol from “Single Symbol” to Graduated.
- Set the
Valueto “Strahler” - Choose an appropriate colour ramp
- Change the
Modedown the bottom of the window to “Equal Interval” - Click Apply
- You can also further differentiate minor channels from major ones by using a “Data defined override” for the Width value:
- Click on the bar next to
Symbol
- Click on the “Data defined override” icon
next to the Width field - Use the “Assistant”
- “Source” needs to be the column “Strahler” (which corresponds to the Strahler order)
- Click the double-arrow icon to “Fetch value range from layer”
- Change the “Size from” and “to” values to suitable values (e.g. from 0.1 to 0.5)
- Click on the bar next to
What does it mean?
It is now evident that runoff from Enoggera Hill can flow into two different catchments: the Kedron Brook catchment, and the Enoggera Creek catchment (which itself runs into the Brisbane river), which matters when considering the project’s impacts.
To do a similar thing using SAGA tools, we need to:
- Fill the sinks in the DEM with the
Fill sinks (Wang & Liu)(which would allow us to create a valid Strahler Order) - Use the
Channel network and drainage basinstool, and pick the outputs we want to keep (basins and channels)
Fill Sinks
A common problem with DEMs is that they have “sinks” that will make further analyses more difficult. This will mean the analysis is unable to best find where the water would flow. To resolve this, we need to use another tool to smooth out our raster before using the Channel network and drainage basins tool.
We can use the “Fill sinks (Wang & Liu)” tool to fill the sinks in our clipped DEM.
- Open the Processing Toolbox by clicking the cog icon from the top menu

- In the Processing Toolbox window
Searchfor “Fill sinks (Wang & Liu)” - Double-click on the Fill sinks (Wang & Liu) option
- For
Input layerchoose Bris_DEM_5m_reproj - We might have to play with the “Minimum slope” value. A value of 0.01 degrees should work well.
- As an output, we only need to tick the “Filled DEM” (first one in the list), which we can also save to file
- Click
Run
Channel network and drainage basin
Now we can use the Channel network and drainage basins tool to calculate the watershed, flow direction, channels and drainage basins.
- Open the Processing Toolbox

Searchfor “Channel network and drainage basin”- Double-click on the Channel network and drainage basin tool
- Make sure
Input layeris the Filled DEM option. - We might have to change the threshold to a higher one if the output includes too many small basins and channels.
- You will also need to tick the boxes of what you want it to output (see below), we will choose
Channel,Junctions, andDrainage Basins. - Click
Run
What are the different options:
- Strahler Order: A Strahler Order raster that is used to classify stream hierarchy
- Channels: Vector lines showing river paths with Strahler Order values.
- Junctions: Vector points showing where channels meet.
- Drainage Basins: Vector polygons delineating the areas that drain to the same point.
- Drainage Basins [optional]: A raster version of the other Drainage Basins.
- Flow Direction: A raster representing the direction of flow for each cell.
- Flow Connectivity: A raster showing how well water could flow through sections of your map.
Georeferencing an Image
- Navigate to
Layer > Georeferencer...- This will open the
Georeferencerwindow
- This will open the
- Go to
File > Open Raster... - Open the
raster_datafolder and openQAP1592_6735-1693dpi.JPG
This should load a black and white image of Enoggera Hill on 13 August, 1964. This image is from QImagery, to make georeferencing easier, we have already rotated this image so that north is at the top (which isn’t always the case with historical images!).
We now need to set a few Ground Control Points (GCPs) to align the image. We create these by clicking a point on the image, and then an associated point on our basemap.
Make sure your World Imagery basemap is the top visible layer.
Use the Pan tool
to find similar points on the historical image and your basemap. Look for key terrain areas that will be consistent across the decades: fencelines, bridges, old buildings, large rocks, unqiue landforms, T-Intersections, etc.
Be careful putting points on tall buildings, as the photo angle can make that vary wildly - try aiming for a bottom corner.
When you want to add a point, change to the Add GCP Point Tool
. Click to add a point on the Historical Image, in the pop-up click From Map Cavnas, and then the matching point on your Map. We will need at least 5 points spread throughout the map. As you add the points, you’ll see them appear in the GCP Table, higher residuals suggests that your points might not be lining up perfectly compared to each other. You want to try to be as accurate as you can, but you can’t be perfect.
To make this process easier…
- Put the
Georeferencerwindow on the right of your screen - Put the
QGISwindow on the left. - Press
Ctrl+Shift+Tabto make the map full screen. Press those keys again to bring the toolbars backCMD+Shift+Tabon Mac
Once you’ve added all your points, you need to open the Transformation Settings 
- For
Transformation Typeif you’re confident in all your points, chooseThin Plate Spline, if you’ve made some guesses or you have high residuals, go withPolynomial- it’s also much faster. - Choose where you want to save the output file
- For
Resampling Methodit depends.Nearest Neighbour is faster, but generally not as accurate.Cubictends to be more accurate, but it’s slow.Bilinearis a nice compromise. - Tick the
Save GCP Pointsbox. This means that after you georeference the image, if you decide you want to try again, you can reload the same points, and then remove or add some if you like. - Click
OK - Click
Start Georeferencing
Soon you will have a Georeferenced Historical Image. Try turning the layer visibility on and off to see where it has skewed compared to your basemap. This can help you better see where you might be able to shift, remove, or add some more GCPs.
Here is the QGIS how to Guide for Georeferencing
Clip the DEM
If we want to focus on the terrain inside our Project Area, we can use Raster > Extraction > Clip Raster by Mask Layer.
- Make sure the
Bris_DEM_5mis selected in theInput layer - Set
Mask LayertoProject Area - Scroll to the bottom and click the three dots
...next to the Clipped (mask) field, navigate to the project’s processed data folder, and type in EH_DEM_5m and clickSave - Click
Run
Contours
Adding a contour makes your elevation even more evident and can also be used to quickly show elevation on other layers
- Go to
Raster > Extraction > Contour.... - Ensure the Input Layer is your clipped DEM “EH_DEM_5m”
- For Interval between contour lines, the default is 10 m, which is good for this location. If you want to create finer the contour lines, it will take longer to process.
- Scroll down to “Contours” and click “…” next to [Create Temporary Layer]“, then”Save to file”, and save it as EH_Contours_10m to your project folder.
- Click Run
Viewshed
If you want to know what can be seen from a certain point in a landscape, or where in the landscape can see a certain point, you can use a DEM to perform a Viewshed Analysis. To be even more accurate, we can use a DSM instead - a Digital Surface Model. It’s very much like a DEM, but where a DEM has had the buildings and trees digitally removed, the DSM retains the heights of buildings and trees. This is useful for a viewshed, as it means that tall buildings might block the view in some areas.
In our case, we may be interested to know how far away people can see the wind turbines.
Open the Processing Toolbox
and search for the GDAL tool called “Viewshed”.
Normally this tool is used from the perspective of what an Observer can see around them, but we can reverse this and have the wind turbine as the Observer. If they can see you, you can see them.
- Input Layer: Choose your Bris_DEM_5m_reproj layer
- Click the three dots next to Observer location to select a point on the map
- Observer height, DEM units: 150 (this is the height of the centre of these wind turbines, it may be approrpiate to take into account the rotor length, but we’re keeping this simple)
- Target height, DEM units: 1.6 (the average human eye height is around 1.6m, choose a height you think might be appropriate)
- Maximum distance from observer to compute visibility: 15000 (5km is the distance you can see on flat ground due to the curvature of the earth, this changes as our “Observer” is much higher up, you can find calculators and a formula for this maximum distance. While you could theoretically still see the turbines from greater distances, their visual detectability begins to decrease).
This will produce a black and white raster showing what can be seen, and what can’t. Go to the Layer Styling Menu, and change it to Singleband Pseudocolor, change the Mode to Equal Interval, and set the Classes to 2. Change one of the Colors to transparent to highlight either where the turbines can be seen, or where they cannot.
If you want to get more sophisticated with your Viewshed analyses, there is, of course, a plugin called Visibility Analysis which will allow you to use one or multiple points as observers, take in account of the Earth’s curvature, see what vector points can see other vector points, and more.
Don’t forget to save your project!