How to create custom geometries based on vector shapes to use on the map legend or symbology on QGIS
Fellow researchers and open-source GIS enthusiasts,
Welcome to my blog!
I’d like to start with a disclaimer – I may be a researcher of this very area but that doesn’t mean everything I do or write here will work for you, in your own desktop configurations and package versions. I have no responsibility if you lose data or mess up your installation. I also do not authorize any copies of my content.
This week, I am showing you how to create custom geometries to enhance your legends on QGIS Print Layout. Specifically, how to create these geometries based on vector files that you already have.
The example I will provide is how to create the Legend Patch Shape for the state of Rio Grande do Sul, in Brazil.
For this tutorial, I am using QGIS 3.20 “Odense”, although, as far as I read, any QGIS from version 3.14 has the Patch Shape editor and can be used.
First step: simplify your original vector. The more, the better.
Remember it’s going to look tiny in your symbology box, so no need to have overly heavy and complicated geometries – we are aiming for an eye-catching symbol, your map itself should provide the reader with the extra details.
What I am doing here regards polygon simplification is not far off from what I showed in this post, so you will see a couple of references to it.
In my example: first, I open the shapefile for the Rio Grande do Sul (RS) state (by IBGE).
If your file has a MultiPolygon type or is made of several polygons, I suggest you generate a version of it with only one polygon. If you don’t know how to do that, I explained it step-by-step on this post.
Now, let’s simplify this polygon. To do this, use the tool “Simplify”:
Choose the distance tolerance to use on the simplification. The larger the tolerance, the more simplified your polygon will become.
Save it and Run.
This is the resulting geometry:
It kept the general shape of the state with none of the details.
Open the simplified polygon file
Open your newly created file on QGIS, if that did not happen automatically.
Now, what we want to do is to take the geometry coordinates and put them in a format which is compatible to the Legend Patch Shape editor. The format which we seek is ((LONG LAT, LONG LAT, LONG LAT)), in which each pair of longitude and latitude is one polygon vertex.
To transform my geometry into the needed format, I will export is as a .csv.
Choose “Comma Separated Value [CSV]”. I don’t need the metadata for the next part, so I unmarked it. I chose the “Geometry type” as “Polygon” and marked the “Extent” checkbox.
In the Layer Options, I selected “Geometry: AS_WKT”, and saved the file.
Open the csv in a text editor
Now, I will open the CSV file generated in a text editor. Opening it on Vim, I see this:
WKT,CD_UF,NM_UF,SIGLA_UF,NM_REGIAO "POLYGON ((-56.323271271 -28.924725248,-54.809787122 -27.530047424,-53.373410477 -27.091175734,-51.630409521 -27.489141496,-50.624951476 -28.392588311,-49.691351788 -28.620891398,-50.177509124 -29.248521292 [...] -55.577531011 -30.833411138,-56.011123407 -31.081577829,-56.808075013 -30.103240694,-57.649742824 -30.189320897,-56.323271271 -28.924725248))","43",Rio Grande do Sul,RS,Sul
Minimize this window to use it later.
Open the QGIS Print Layout
Open the Print Layout and Add a map on it. Then, add a Legend.
On the right panel, on Legend Items, uncheck “auto-update” and double-click any of the legend items.
In the section “Patch”, click the rectangle besides “Shape”
The shape will be filled with
Polygon ((0 5, 10 5, 10 0, 0 0, 0 5))
Add the coordinates of your vector shape to the Legend Patch Shape editor
Copy the coordinates from your CSV file and paste them inside the “(())”. Check the “Preserve Aspect Ratio” checkbox.
Zoom in the legend and check if your custom symbol looks like expected.
Save for future use
To use and re-use your geometry in future legends and symbology, save the Patch Shape you just created.
Enter the Patch Shape editor again
Scroll down and click “Save Legend Patch Shape”
Write some useful tags to your geometry and save it.
Now you will be able to use it in any QGIS project.
- How to georeference images using QGIS 3
- Splitting many polygons into (almost) equal parts using a simple script in PyQGIS, the Python Console of QGIS
- The wedge tool: drawing circular quadrants, rings, and related geometries in QGIS
- Saving temporary scratch layers using PyQGIS and visualizing them in your QGIS Project
- Solved: QGIS 3.20 Python Console shows an error when running Clip Vector by Extent tool