QGIS: Refine Your Maps for Reporting and Publication
Setting up
This is an intermediate level tutorial. Before completing this tutorial, we recommend our QGIS: Introduction to Mapping tutorial. This tutorial is designed for QGIS 3.40. If you need to install it on your computer, go to the QGIS website.
We will start as always by creating a good folder structure to work within. This folder is where our project, our data, and creations will live. Folder structure is very important for keeping your data tidy, as well as for ease of sharing your project with others. You simply need to zip the project folder if you need to share the whole thing.
Open QGIS and create a new project with
Project > New
.Let’s now save our project:
Project > Save
.Create a new folder, let’s call it “qgis_reports”.
Inside that folder, create these folders:
“data” - for all the data we will use to make our maps, split into:
“raw” - raw data from your research or the internet
“processed” - any data you’ve modified
“output” - for any maps or images we export
“temp” - this folder isn’t necessary, but when you’re playing around and testing, it stops things getting messy.
Finally, let’s save our .qgz project file inside the “qgis_reports” folder, named “qgis_reports_map.qgz”
Your .qgz file should always be in the highest level folder, so it’s only looking down into folders for data, not back out.
This might feel unnecessary now, but things quickly get out of control and hard to find if you don’t have a good folder structure.
Let’s add an OpenStreetMap basemap to locate ourselves on the globe:
Browser panel > XYZ Tiles > OpenStreetMap
(double-click, or drag and drop into the Layers panel).
And finally change our CRS to match our project area (Brisbane) for today to EPSG:7856 - GDA2020 / MGA zone 56
Project > Properties
click theCRS
tab, filter for 7856, selectEPSG:7856 - GDA2020 / MGA zone 56
and clickOK
Today’s Aims
Main aims:
- Create a pretty map for output
- Automate our map description
If we have time:
- Learn to use Web Mapping Services
- Georeference an Image
Download the Data
Today we’re going to focus on making a pretty map, so let’s start by populating our map with some pre-generated data.
The data for this session can be directly downloaded from this link.
Once downloaded, extract the archive into your raw folder within your data folder.
Within QGIS, go to the Browser panel, open Project Home > data > raw
, then drag and drop each of your files into themap canvas.
You should have three new layers: Artefacts, Paths, and Project_area
Change the Symbology
Our vector layers are assigned a random colour when we load them. We now want to make them look better.
Point Geometry
- Open the
Layer Styling
panel by pressing F7 - Select the Artefacts layer from either the
Layer Styling
panel, or theLayers
panel. - In the
Layer Styling
panel, changeSingle Symbol
toCategorised
- From
Value
select Artefact Type - Click the
Classify
button
The random colours that QGIS gives you aren’t always pretty, so let’s change the colours
Click the dropdown next to the
Color ramp
Click
Create New Color Ramp...
, selectCatalog: ColorBrewer
, and clickOK
Click the dropdown next to
Scheme name
and chooseSet1
- This is a qualitative colour scheme that is easy to distinguish, Dark 2 and Paired are also good options, you can find out more about ColorBrewer here
Click the
back arrow button
next to Edit Ramp
Now that we have a nice colour scheme, let’s give it a contrasting Stroke color, and a new shape. The default is usually black, but I find this to look harsh, let’s make it a darker shade of the Fill colour
- Double click on the symbol of the
Artefact Scatter
- Click Simple Marker - this will allow us to change the fill, stroke, and shape of the marker
- Click the dropdown next to
Stroke color
, clickPick Color
, and then use the dropper to select the color from theFill Color
above, it should copy the colour!
- Click the dropdown next to
- Now click directly on the
Stroke color
color box, this will take you to theSelect Stroke Color
window- Drag the slider next to
V
to give us a darker shade of red - Click the
back arrow button
next to Artefact Scatter > Select Stroke Color
- Drag the slider next to
- From the bottom of the window select another shape, let’s go with the Triangle
- Click Simple Marker - this will allow us to change the fill, stroke, and shape of the marker
- Click the
back arrow button
next to Artefact Scatter
Repeat these steps for the Single Artefact - although you can leave the shape as a circle.
If you want, you can change the properties of all symbols at once:
Simply click in the white space below your symbol classes so that none are selected.
If you click on the button next to
Symbol
, it will take you toSymbol Settings
Try increasing the size of the symbols to 3mm
WARNING if you change the Stroke color here, it will change the stroke for all of your symbols, undoing your work from above.
Click the
back arrow button
next to Symbol Settings
Line Geometry
We can also make our lines look nice. Sometimes it can be as simple as picking a contrasting colour, and adding some more width. Sometimes it can be very useful to add some dashes to your line.
- Select the Paths layer from the
Layer Styling
panel - Under
Line
, clickSimple Line
- Change the
Color
to a colour that is different to your points, and stands out from the map. I’m going to use orange - Increase the
Stroke width
to 1mm - it looks big now, but will look better on your exported map later - Click the green + next to
Line
to add another line symbol
(You can add as many simple lines, as you like, you can even change this withSymbol layer type
to Arrows, Hashed lines, Filled lines, and more.)- Increase the
Stroke width
to 1mm to match - Change the
Stroke style
from Solid Line to Dashed Line - Change
Cap style
from Square to Round - Tick
Use custom dash pattern
- Click on the dashed line below the tick box
I like to set my Dash to 3mm and my Space to 5mm
- Increase the
- Change the
Polygon Geometry
Depending on your map, you may want your polygon to remain solid, to be transparent, have hatched lines, or simply be an outline. As our project area has items inside it, it is probably best suited as an outline.
- Select the Project_area layer from the
Layer Styling
panel - Under
Fill
, clickSimple Fill
- Change
Fill style
from Solid to No Brush- Note that this is where you could add horizontal, diagonal, or many other styles as a fill.
- Change
Stroke color
to something bright, like Yellow - Increase the
Stroke width
to 1mm
- Change
Labels
Let’s add some labels to our data.
- Select the Artefacts layer from the
Layer Styling
panel- In the
Layer Styling
panel, click the yellow abcLabels
tab- Change
No Labels
toSingle Labels
- Change the
Value
to fid - Change the
Color
to white - Just below the
Value
dropdown, click the third abc tab forBuffer
- Tick the
Draw text buffer
box - Change the
Size
to 0.8 - Change the
Color
to black - you could have reversed the two colours, but I prefer this contrast
- Tick the
- Change
- In the
Styles
If you want to try different looks for a feature, but not have to undo everything, you can save them as Styles
- In the
Layers
panel,Right click on Project_area > Styles > Add...
- Name the style Project Point
- Select the Project_area layer from either the
Layer Styling
panel- Under
Fill
, clickSimple Fill
- Change
Symbol layer type
from Simple Fill to Centroid Fill - Click Simple Marker and change the
Size
to 3 - you can also change the Stroke color if you like
- Under
Now we have a point as the centre of our polygon, we can edit this style and revert back to the original whenever we like
Themes
Themes work similarly to styles, but instead of changing the layer styling, it changes the layers present. We can use themes to create multiple looks for our map that we can easily swap between. Let’s create a map for our future Inset Map
- In the
Layers
panel, hide the Paths and Artefacts layers by unticking the boxes next to them. - Now click the Eye icon (Manage Map Themes) at the top of the
Layers
panel, and clickAdd theme...
- Let’s name our new theme Inset, and click
OK
- Let’s name our new theme Inset, and click
- Change the Project_area back to our original Default style:
Right click on Project_area > Styles (2) > default
The map should return to how it looked before.
Nothing exciting will happen yet, but we will be able to use this later.
Basemaps
Unless we really need everything on the OpenStreetMap, it is too busy, and distracting. Let’s load in a new basemap. There are many ways of doing this, in the past we’ve used the QuickMapServices plugin to load in new basemaps, and used XYZ tiles to load in basemaps, now we can go to the next step and source them externally.
Today we’re going to use a WMTS (Web Map Tile Service) from ESRI.
- Scroll down the
Browser
panel until your see WMS/WMTS - Right click WMS/WMTS and select
New Connection...
- In
Name
type ESRI World Imagery - In
URL
paste:
https://services.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer/WMTS/1.0.0/WMTSCapabilities.xml - Click
OK
- In
- In the
Browser
panel, navigateWMS/WMTS > ESRI World Imagery
and double click on default028mm- This is a very high resolution aerial basemap, however when you zoom closely in many areas it will often show “Map data not yet available” at a scale around 1:300
- The GoogleMapsCompatible is the same map at lower resolution, however it doesn’t have the “Map data not yet available” issue
- Arrange the layers so that the World Imagery layer is under your other layers (you can hide the OpenStreetMap now)
Themes (again)
Now that we’ve made some changes, we can see what themes do.
- In the
Layers
panel, click the Eye icon (Manage Map Themes), clickAdd theme...
- Let’s name our new theme Main, and click
OK
- Now, click the Eye icon again
- You will see that there are two check box options at the bottom: Inset and Main
- You can cycle between these two themes by choosing one or the other
- If you want to update a theme, simply hide/unhide the layers you want, go to
Eye icon > Replace theme...
and then select the theme you want to overwrite.
- Save your project
Layout Manager
Now we can prepare our map for export.
- Navigate to
Project > Layout Manager...
- Under New from Template click
Create
, name the map Project Map
- Under New from Template click
- This will open the Layout Manager
Page Properties
Before we do anything, let’s set up out environment.
- Navigate to
Layout > Page Properties..
- Here we can choose the size and orientation of our map.
- A4 is sensible, and it means you know the map will fit neatly into a report.
- Portrait means you can have a full page map without rotating the page in your report. But some spatial layouts make more sense in Landscape. Use your judgement.
Guides
Guides seem unnecessary, but they make lining things up, much much easier.
- In the right menu, click
Guides
- Click the green + under Horizontal Guides (if your canvas is a Landscape, choose Vertical Guides for this step)
- A new row should appear, click on the 0 and change it to 235
Map
- Add your map by clicking the map icon in the left menu, or navigating
Add Item > Add Map
- Your mouse will now be a +
- If you hover over the top corner of the canvas, the mouse should snap to the corner
- Click and drag until your mouse snaps to the corner created by the side of the canvas, and the guide you added
- In the
Items
panel on the right, double click on Map 1 and rename it Main- Giving Items clear names makes this process much more straightforward
Scale
Okay, we have our map, but it’s not zoomed in right. This is always a little tricky.
You could click the Move item content button on the left menu(or press C
on your keyboard), as this would allow you to drag the map around internally, and zoom in with your scroll wheel. But there is an easier way!
- Navigate back to your qgis_reports window
- Right click on your Project_area layer and select Zoom to Layer(s)
- Navigate back to your Project Map window
- In the right menu, click
Item Properties
- You will see these options:
- Click the first orange arrow button to Set Map Extent to Match Main Canvas Extent
- Click the third orange arrow button to Set Map Scale to Match Main Canvas Scale
- The other buttons do the reverse
- I like to then round the Scale up to a nice round number from something like 3814 to 4000
- In the right menu, click
Inset Map
You can add your inset map to the blank space at the bottom (or side) of you map canvas, or you can put it on top of you main map in unused space. However, we don’t have an edge to snap our inset map on to, so guides are useful here too.
- In the right menu, click
Guides
- Click the green + under Horizontal Guides
- A new row should appear, click on the 0 and change it to 10
- Click the green + under Vertical Guides
- A new row should appear, click on the 0 and change it to 10
- Click the green + under Horizontal Guides
We don’t need more guides unless you want a precise inset map size, but I’m happy so it’s aligned evenly with the top and side border.
- Add your map by clicking the map icon in the left menu, or navigating
Add Item > Add Map
- Hover over the corner created by your guides, the mouse should snap to the corner
- Click and drag until you’re happy with the size of your inset window (without overlapping any important features on the main map)
- Hover over the corner created by your guides, the mouse should snap to the corner
- Zoom out on the inset map, by selecting it from the
Items
tab and following the same approach as the Main map- Or by using Move item content button on the left menu (or press
C
on your keyboard), clicking on the inset and using the scroll wheel
- Or by using Move item content button on the left menu (or press
- In the
Items
panel on the right, double click on Map 2 and rename it Inset - Scroll to the bottom of the
Item Properties
panel and tick theFrame
box- This gives our inset a nice border which we can customise further
Now we have our maps added, we can bring our themes in to play again.
Themes (again!)
- Select Main from the
Items
panel- In
Item Properties
, you will see Layers section - Tick
Follow map theme
and from the dropdown change none to Main - Now this map is linked to the Main theme and will only update when we change that theme, or the layers attributed to the theme
- In
- Repeat this step for Inset
This is also a big advantage for using Styles, as the point is a better representation of our site on the inset map.
Title
- Add a text box to your map by clicking the
Add Label
icon in the left menu, or navigatingAdd Item > Add Label
- Click and drag in the empty canvas below the map where you want to put your title
- In the
Item Properties
panel remove the Lorem ipsum text, and add Brisbane Botanic Gardens - Under Appearance click the
Font
box to open theLabel Font
window- Change the text size to 18, you can make other font changes here too
- Click the
back arrow button
next toLabel Font
- In the
- In the
Items
panel on the right, double click on Brisbane Botanic Gardens and rename it Title
Okay, that’s a some fairly basic text, let’s do something interesting with the descriptive text.
Dynamic Text
- Add another text box to your map by clicking the
Add Label
icon in the left menu, or navigatingAdd Item > Add Label
- Click and drag in the empty canvas below the title
- In the
Items
panel on the right, double click on “Lorem ipsum” and rename it Description- In the
Item Properties
panel remove the “Lorem ipsum” text and then enter:- Created by:
- Date:
- Scale: 1:
- Datum:
- Sources:
- Normally we’d have to enter the details for each of these manually, but we can use Dynamic Text to do it for us
- In the
- In the
Item Properties
panel, click next to Date:, so the cursor is sitting there- Under the Main Properties text box, click
Dynamic Text > Current Date > Day/Month/Year (26/09/2025)
- This will insert code that looks like this:
[%format_date(now(), 'dd/MM/yyyy')%]
which automatically adds today’s date
- Under the Main Properties text box, click
- Now repeat those steps for the rest:
- Click next to Scale: 1:
- Click
Dynamic Text > Map Properties > Main > Scale (4000)
- The code will look like this:
[%format_number(item_variables('Main')['map_scale']
which automatically adds the main map’s scale
- The code will look like this:
- Click
- Click next to Datum:
- Click
Dynamic Text > Map Properties > Main > CRS Name (GDA2020 / MGA zone 56)
- The code will look like this:
[%item_variables('Main')['map_crs_description']%]
which automatically adds the main map’s CRS
- The code will look like this:
- Click
- Click next to Sources:
- Click
Dynamic Text > Layer Credits
- The code will look like this:
[%array_to_string(map_credits())%]
which automatically adds the sources built in to some of the data used - Note that this is built into the Metadata (layer
Properties > Metadate > Access
under Rights) of the baselayers, and the layers we downloaded. Not all layers will necessarily have this information, and sometimes it’s very detailed and clunky.
- The code will look like this:
- Click
- Click next to Scale: 1:
You could also add any extra text details such as the locality, disclaimers, or any other details needed.
Shapes
We can add a border around our information section. This isn’t necessary, but it looks nice!
- Add a rectangle to your map by clicking the
Add Shape
icon in the left menu, or navigatingAdd Item > Add Shape > Add Rectangle
- Hover over the corner created by the bottom of the map and the side of the canvas, the mouse should snap to the corner
- Click and drag until your mouse snaps to the opposite corner of the canvas
- In the
Items
panel, click the box next toStyle
, this will take you to theSymbol Settings
window- Click Simple Fill
- Change
Symbol layer type
from Simple Fill to Outline: Simple Line - Change the
Color
to a nice dark green - Increase the
Stroke width
to 5mm - Scroll to the bottom and tick the
Draw line only inside polygon
box
- Change
- Click Simple Fill
Legend
- Add a Legend your map by clicking the
Add Legend
icon in the left menu, or navigatingAdd Item > Add Legend
The legend always has too much detail to start. Let’s clean it up.
- In the
Item Properties
panel, change theTitle
to Legend - Under Legend Items untick
Auto update
- Click the drop down next to Artefacts, select the empty item, and then click the red – to remove it
- Remove the Imagery and the OpenStreetMap layer too
- Right click on Artefacts and select Hidden, we don’t need to see the group name
- Double click on Project_area and rename it to Project Area
- Scroll down to Fonts and Text Formatting, under Legend Title click the Title font button
- Change the
Size
to 13- You can change the Item Labels font size too, but 12 is fine here
- Change the
- Scroll down to Spacing
- Change Legend Title
Space below
to 2- You can change the Legend Items space between symbols too, but 2.5 is fine here
- Change Legend Title
North Arrow
- Add a North Arrow your map by clicking the Add North Arrow icon in the left menu, or navigating
Add Item > Add North Arrow
- Click and drag in the blank space under the map until you’re happy with the size of the arrow
- In the
Item Properties
panel, under theSVG Images
box, type arrow in the search bar- Choose a North arrow you like
Scalebar
- Add a scale bar to your map by clicking the Add Scale Bar icon in the left menu, or navigating
Add Item > Add Scale Bar
- You can click and drag in the blank space under the map, although the scale bar size will be set in a moment
- In the
Item Properties
panel, choose the appropriateScalebar units
- usually Metres or Kilometres- Under Segments, change the right
Segments
from right 2 to right 4 - Change
Fixed width
to 50 units (on this map, I have used 50 metre intervals, as that feels understandable)
- Under Segments, change the right
Finessing
You will remember that we orignally made the points and lines quite large, but you will see that on this export map they are a more reasonable size. This is because we set them to millimetres, which will scale with our screen resolution when we zoom on the original map, but will scale to the size of our fixed dimensions A4 page in the Layout Manager
.
Our point labels need to be resized too. Return to the qgis_reports
window and try changing their font size to 12 in the Labels
tab of the Layer Styling
panel.
If the change doesn’t flow through when you return to the Layout Manager/Project Map
window, try clicking the refresh button in the top menu.
Move anything you need around to get it looking sharp. You could try using Guides
if needed.
Save your project.
Layout > Save Project
Export options
Now that we’re done we can export. Generally to PDF or Image. Today we will use image.
Layout > Export as Image...
- You will see a popup warning about WMS servers. Some tile services have limits to the size of file you can export like this. If you exceed it, your basemap will be blank.
- Click
OK
- Navigate to your project’s output folder, and give the file a meaningful name “Brisbane Botanic Gardens Map”, click
Save
- The
Export resolution
should automatically be a print quality 300dpi, and the width and height were set by our A4 selection. - Click
Save
- Navigate to and open your file to make sure it worked!
Save a Map Template
This is crucial! Save your hardwork for next time!
Layout > Save as Template...
- Navigate to a folder you can easily find again, such as a broader QGIS folder.
- Give it a meaningful name “Report_Map_Template”
- Click
Save
Load a Map Template
Next time you need to make an export you can load your template in.
Open an old QGIS Project.
- Navigate to
Project > Layout Manager...
- Under New from Template change
Empty Layout
toSpecific
, click the three dots and navigate to your Report_Map_Template, select it, and clickOpen
- Click
Create
- Give the layout an appropriate name, and click
OK
- Under New from Template change
- This will open the Layout Manager
You will see that the inset and main maps are in the wrong location, the title is wrong, the scale bar is off, and the Legend is empty. But you know how to fix these!
Map Scale
- Navigate back to your QGIS window
- Right click on the most suitable layer and select Zoom to Layer(s)
- Navigate back to your Layout Manager window
- Click the Main from the
Item
panel, and click theItem Properties
panel - Click the first orange arrow button to Set Map Extent to Match Main Canvas Extent
- Click the third orange arrow button to Set Map Scale to Match Main Canvas Scale
- The other buttons do the reverse
- Round the Scale up to a nice round number
- Click the Main from the
- Fix the inset map too
Scalebar
- Click the Scalebar from the
Item
panel - In the
Item Properties
panel, changeScalebar units
to Metres or Kilometres - ChangeFixed width
to an appropriate unit
Legend
- Click the Legend from the
Item
panel - In the
Item Properties
panel, under the Legend Items box and click the green + to add a layer- Double click on and rename the layer if needed
- Repeat for all layers you need to list
Title
- Click the Title from the
Item
panel - In the
Item Properties
panel, under the Main Properties rename the title
And that’s it, you now have another map looking the way you want it, without too much hassle.
Feedback
Please visit our website to provide feedback and find upcoming training courses we have on offer.
More Data Sources
Aerial Imagery
There are a few places you can aquire aerial photography, today we will look at two sources, one is freely available Government Data from QImagery, the other is accessible from using your UQ credentials.
- Go to QImagery
- Read and tick the “I acknowledge I have read and agree to the Terms & Conditions” box, and click
Get Started
- Click the Search button, select ‘locality, town or city’ and search for “St Lucia” in the “Enter search term” search box and select the first result
- It will zoom to your selected location then click the newly appeared
Search
button - From here you can select from a wide array of images of QLD over many years.
- Click one of the drop-downs and hover over the options to see where those images are located. Preview the image by clicking View.
- You can then download your desired images by clicking “Download” and selecting TIFF (georeferenced)
- Move the TIFF file(s) to your project folder, and open them in QGIS
You can also get historical images from Geoscience Australia’s Historical Aerial Photo (HAP) Collection
Georeferencing
I will be happy to go over this in person, but if you need a guide, here is the QGIS how to
More Web Mapping Services
Add any of these URLs via ArcGIS REST Servers in QGIS