Project: QGIS

Changelog for version: 3.20


QGIS 3.20 Odense features a splash screen which displays a section of the earliest map of Denmark’s third largest city, Odense from 1593. The map was published by Georg Braun (1541-1622) in the work Civitates orbis terrarum (Cities of the World). Georg Braun’s maps are all beautiful and were, for the period, produced at a high cartographic level. Civitates orbis terrarum was long the main source of maps of the world’s cities, such as Paris, London, Mexico City and Aden.

The name Odense literally means “Odin’s temple”, and the place may have originally been a shrine to the pagan god Odin. At the bottom left of the map you see the ruins of one of the large Viking-Age ring-shaped fortress, which were constructed in Denmark by the Danish Viking king Harald Bluetooth (died c. 985/86). The ring fortress in Odense is called Nonnebakken.

This release introduces a host of subtle changes and stability updates, reinforcing the vast catalog of cutting-edge features introduced in recent QGIS releases. Included in this release are numerous data management improvements, with some advanced changes to the management and display of CRS systems and projection information. Amongst these improvements to CRS management are the basic support for coordinate epoch of dynamic CRS systems and advanced accuracy integrity warnings, placing QGIS 3.20 firmly at the leading edge of GIS and data management practices for high accuracy systems.

Additionally, users can expect improved metadata management and handling for certain data and metadata types. Another key highlight is the native integration of the nominatim geocoding service, which will allow users to search locations and addresses using data from the OpenStreetMap project directly from the QGIS locator bar.

The QGIS Community has also seen an uptick in activity in the QGIS HUB, as well as the Virtual QGIS Open Days, with the Cutting Edge Open Day showcasing a number of demonstrations which leverage rich QGIS functionality that was introduced in more recent releases.

We would also like to extend a big thank you to the developers, documenters, testers, and all the many folks out there who volunteer their time and effort (or fund people to do so) to make these releases possible. From the QGIS community, we hope you enjoy this release! If you wish to donate time, money, or otherwise get involved in making QGIS more awesome, please wander along to QGIS.ORG and lend a hand!

QGIS is supported by donors and sustaining members. A current list of donors who have made financial contributions large and small to the project can be seen on our donors list. If you would like to become an official project sustaining member, please visit our sustaining member page for details. Sponsoring QGIS helps us to fund our regular developer meetings, maintain project infrastructure, and fund bug fixing efforts. A complete list of current sponsors is provided below - our very great thank you to all of our sponsors!

QGIS is Free software and you are under no obligation to pay anything to use it - in fact, we want to encourage people far and wide to use it regardless of what your financial or social status is - we believe empowering people with spatial decision-making tools will result in a better society for all of humanity.


General


Feature: Additional options for opening attribute tables

The previously available shortcuts for opening attribute tables, using filters to display only the selected items or the items visible within the canvas, have been integrated into the Menu Toolbar to facilitate their ease of use and improve the user experience, especially when working with large datasets.

This feature was developed by Raymond Nijssen


Feature: Set size for all columns in attribute table

The existing ability to "Set Width" and "Autosize" for columns has been extended to apply the resizing of a field to all columns.

This includes the ability to set a fixed width or to "Autosize" all columns. These actions are available from the attribute table header context menu which is accessible by right-clicking a field header.

This feature was developed by Ben Wirf


Feature: Export/import of authentication configurations made easy

Starting with QGIS 3.20, users can now easily export and import authentication configurations via a pair of actions in QGIS settings' authentication panel. Exported configurations can be password-protected to avoid sensitive information leakage.

This greatly eases sharing of various authentication configurations across multiple QGIS users, especially when it comes to more complex configuration methods such as oauth2.

This feature was funded by Ville d'Yverdon-les-Bains

This feature was developed by Mathieu Pellerin


Feature: QGIS 3.20 highlights (changelog)


Temporal


Feature: Temporal navigation steps

A temporal navigation step option for "source timestamps" has been added to the temporal controller. When selected, this causes the temporal navigation to step between all available time ranges from layers in the project. It's useful when a project contains layers with non-contiguous available times, such as a WMS-T service which provides images that are available at irregular dates. This option will allow users to only step between time ranges where the next available image is shown.

This feature was funded by Natural resources Canada Contract: 3000720707

This feature was developed by Nyall Dawson


Feature: Improved WMS-T settings

WMS-T settings were simplified and controls were introduced to make it easier to select the desired time for some providers.

Changes were made in order to achieve the following outcomes:

  • Make it clearer exactly what each of the settings controls
  • Make the interplay and relationships between the various settings clearer
  • Make it obvious which settings apply, regardless of whether the layer is controlled by the temporal controller or whether the settings relate only to static WMS-T layers
  • For servers that expose a non-contiguous set of date-time instances, instead of a range of dates, a combo box is provided removing the need to manually enter valid dates

Example of settings with a server exposing a range of available dates:

Example of settings with a server exposing a list of available datetime instances only:

This feature was funded by Natural resources Canada Contract: 3000720707

This feature was developed by Nyall Dawson


Feature: Horizontal mouse wheel temporal navigation

Horizontal scrolling using the mouse wheel (where supported) with the cursor on the map canvas will allow users to navigate, or "scrub", the temporal navigation slider backwards and forwards

This feature was developed by Nyall Dawson


Map Tools


Feature: Nominatim Geocoder Integration

The Nominatim Geocoder is now natively integrated into QGIS out of the box! QGIS provides a Nominatim locator filter, as well as the "Batch Nominatim Geocoder" processing tool for batch geocoding locations.

Nominatim locator filter

The QGIS locator bar widget (by default, a search bar in the bottom left corner CTRL+K) now supports Nominatim geocode searches by using the prefix '>'.

Users may now search for locations using the format > search string in the locator and will be provided with a selection of results. Selecting a search result will reposition the canvas extent on that location.

Batch Nominatim Geocoder

In addition, a new "Batch Nominatim Geocoder" algorithm has been added to the QGIS processing toolbox under Vector tools, allowing users to geocode multiple locations at once.

Nominatim is a geocoding service that utilizes data from the OpenStreetMap project. Usage limitations and rate limits - 1 query per second - do apply in line with the OpenStreetMap Foundation (OSMF) usage policies, and the data is provided under the terms of the ODbl license. Additionally, queries to the Nominatim service may include telemetry information.

Shipping this great geocoder service by default would not have been possible without the generosity and participation of the OSMF.

This feature was developed by Mathieu Pellerin


User Interface


Feature: Processing history dialog improvements

The processing's history dialog has had a series of user interface improvements, including regrouping of algorithms in meaningful folder structures and making use of individual algorithm icons. Searching for that algorithm you ran last week has never been as easy!

This feature was developed by Mathieu Pellerin


Feature: Map layer icons in the expression builder dialog

The expression builder dialog now displays map layer icons next to the list of layers under the 'Map Layers' parent group. This speeds up skipping through the list and provides additional context.

This feature was developed by Mathieu Pellerin


Feature: SVG browser filtering

The SVG browser interface now supports simple text-based filtering, allowing users to filter the available SVG images based on a given search string.

This feature was developed by Denis Rouzaud


Symbology


Feature: Interpolated line symbol layer type for vector layers

QGIS provides a new "Interpolated Line" symbol layer type, which results in the rendering of a color and/ or width varying line.

This symbol is highly configurable and allows users to associate attributes or expressions to each line extremity or curve, amongst other configuration options. Values are interpolated along the line string between extremities. Color is configured with a color ramp shader widget.

This feature was funded by Lutra Consulting

This feature was developed by Vincent Cloarec


Feature: Trim the simple line symbol

An option to trim the start and end of simple line symbols was added, allowing for the line rendering to trim off the first and last sections of a line at a user configured distance. It is useful for creating complex symbols where a line layer should not overlap marker symbol layers placed at the start or end positions of a line feature, such as with transport routes. The trim distance supports a range of units, including a percentage of the overall line length, and can also be configured as a data-defined property.

A sample gallery of this functionality in use:

This feature was developed by Nyall Dawson


Feature: New "Embedded styling" renderer with OGR feature styles support

A new "Embedded styling" renderer has been added which exposes OGR feature styles, allowing QGIS to automatically symbolize data from certain datatypes which have integrated style information, such as KML or TAB files.

This feature implements QEP-209

Support should extend automatically to all GDAL drivers which implement the OGR feature style API.

Currently only supports line symbol conversion, but point and polygon symbol support is under development.

This functionality also supports the direct conversion of embedded symbol renderers into categorized or rule-based renderers. This enables QGIS to automatically create categories or rules which define symbology based on the relevant feature IDs:

This feature was funded by QGIS Denmark user-group

This feature was developed by Nyall Dawson


Feature: New shapes and cap styles for ellipse markers

Several new shapes - semi arc and arrow signs - were added to the ellipse marker symbol layer, as well as a setting to modify the cap style for stroke-only ellipse shapes.

This feature was developed by Mathieu Pellerin


Feature: Set cap styles for simple markers

QGIS now allows for the pen cap (or line ending) style to be set for simple marker symbol layers, which is useful for the stroke-only symbols like cross and arrowhead markers, where it's beneficial to allow the use of round caps instead of square caps.

This feature was developed by Nyall Dawson


Feature: Allow pen cap style to be set for ellipse marker symbol layers

Ellipse markers now also include support for modifying the pen cap (line ending) styles

This feature was developed by Mathieu Pellerin


Feature: Polygon rings @geometry_ring_num variable

A new variable, @geometry_ring_num, has been added for data-defined styling when rendering polygon rings. The variable is available whenever a polygon outline is being rendered, such as a simple line or marker line. This data-defined property will be set to 0 for the exterior ring, and increment accordingly (1, 2, 3... etc) for successive interior rings.

This feature was developed by Nyall Dawson


Labelling


Feature: Fill symbols for label background shields

Label shields can now use fill symbols for the rectangle, square, circle, and ellipse shapes.

This extends beyond the previously available ability for these shields to utilize simple fill and stroke and grants the ability to leverage the complete symbology capabilities of QGIS for shield rendering, including the utilization of "saved styles".

This feature was developed by Mathieu Pellerin


Feature: Blending mode settings for label callouts

Label callouts can now leverage the advanced blending modes from QGIS

This feature was developed by Mathieu Pellerin


Feature: Anchor line labels by entire line

In previous versions, when an anchor position for a line label was calculated, QGIS would only consider the visible extent of the feature. This affected the expected label position in some cases, and a new "Use Entire Line" setting allows users to configure the behavior according to their needs, so that the entire feature may be considered before label placement rather than just the portion of a feature that is currently visible.

This feature was funded by Stadt Zürich

This feature was developed by Nyall Dawson


Feature: Balloon callout corner radius

Balloon callout styles now support rounded corners by introducing a "corner radius" option, resulting in the ability to easily produce visually pleasing designs.

This feature was developed by Nyall Dawson


Feature: Balloon (speech bubble) callouts

A new "balloon", or speech bubble, callout style is provided for labels.

This feature was funded by SLYR

This feature was developed by Nyall Dawson


Feature: Curved line callout style

A new "Curved Line" callout style has been provided for creating cartographically pleasing curved line callouts between the labels and features

Options include:

  • Selecting a specific curve orientation (clockwise or counterclockwise)
  • Automatic orientation option which determines optimal orientation for each individual label
  • Control over the amount of curvature applied to the callout lines.

This feature was developed by Nyall Dawson


Feature: Highlight pinned callout start or end points

When the "show pinned labels" option is enabled, QGIS will now also highlight any pinned callout start or end points. This allows users to immediately see which callouts points have been manually placed in relation to those that are automatically placed.

This feature was developed by Nyall Dawson


Feature: Auto-creation of callout auxiliary fields

QGIS now automatically manages the creation of callout auxiliary fields when attempting to move a callout start or end point interactively, making the user experience for moving a callout follow the exact same behavior as that of moving a label, preventing the system from forcing users to create auxillary fields in advance.

This feature was developed by Nyall Dawson


Feature: Callout snapping

When interactively moving a callout line, holding the shift button will now cause the callout to snap angles at increments of 15 degrees

This feature was developed by Nyall Dawson


Feature: Toggle label layers shortcut

A shortcut action to toggle labeling has been added to the context menu of vector layers in the layer panel. This allows for labels to be quickly switched on or off, without losing the label configuration. If a layer has never had labeling configured and the action is checked, then QGIS will attempt to apply a simple labeling configuration to the layer using default parameters.

This feature was funded by Natural resources Canada Contract: 3000720707

This feature was developed by Nyall Dawson


Feature: Data defined callout start and end points

Label callout lines can now have data-defined starting and ending points, useful for manual control of the exact placement for individual callout lines.

This feature was developed by Nyall Dawson


Feature: Allow callouts to be interactively moved using the Move Label tool

This change allows the interactive "Move labels" tool to also move callout endpoints, whenever the callout has data-defined origin or destination fields set.

This feature was developed by Nyall Dawson


Point Clouds


Feature: Support for remote datasets (EPT)

Point cloud datasets that have been processed to EPT format can be loaded from remote HTTP(S) servers, similar to how raster/vector tiles work. This way, it is possible to access large point cloud datasets without first having to download them as LAS/LAZ files. The EPT format is optimized for tiling and streaming, so QGIS only downloads small amounts of data necessary for display of the current view and resolution. This works in both 2D and 3D view.

If you have point cloud datasets in LAS/LAZ format, these can be converted to EPT using Entwine or Untwine (shipped also with QGIS).

How to use: in Data Source Manager > Point Cloud tab > select "Protocol" as the source type and enter URL of the dataset (normally ending with "ept.json").

You can test with USGS LiDAR data - just use the link from "EPT" column from one of the datasets. Some example endpoints include:

By the way, every point cloud dataset that QGIS loads is first processed to EPT (look for "ept_XXX" sub-folder where your original data is located), so it is possible to just copy that "ept_XXX" folder to a HTTP(S) server and you are ready to use this feature.

This feature was funded by Hobu

This feature was developed by Belgacem Nedjima (Lutra Consulting)


Print Layouts


Feature: "Convert to Static Text" option

When using dynamic, or expression-based labels, users may now select the "Convert to Static Text" option which has been added to the dropdown menu next to "Insert/Edit Expression…", in the layout label properties widget.

This option will evaluate and replace any dynamic parts of a label's contents with their current values.

This provides an easy way to convert dynamic labels to static ones, so that users can manually tweak the results when needed.

This feature was developed by Nyall Dawson


Feature: Improvement to XYZ layers previewed in map items

Handling of XYZ layers previewed in layout map items has been improved to ensure that their tile zoom levels match those of the exported layout while zooming in and out in the layout designer dialog. Users can now more easily refine the placement of their items (labels, legend, images, etc.) against a map preview that better matches the targeted output.

This feature was funded by Kanton Zug - Amt für Raum und Verkehr (ARV)

This feature was developed by Mathieu Pellerin


Expressions


Feature: length3D Function

A "length3D" function has been added for returning the 3D length of a LineGeometry type geometry. This calculates the cartesian 3D length of a geometry line object. If the geometry is not a 3D line object, it returns its 2D length.

This feature was developed by Nyall Dawson


Feature: Extended array expression functions

The following array expressions were added:

  • array_count
  • array_prioritize
  • array_replace

This feature was funded by Canton of Luzern

This feature was developed by Damiano Lombardi


Feature: MIME Type expression function

The new mime_type( bytes ) expression function returns the MIME Type, or Media type, of an input bytes object

This feature was developed by Alessandro Pasotti


Digitising


Feature: Select attributes from the largest geometry when merging

A button to select attributes from the largest geometry has been added to the confirmation dialogue when using the merge features editing tools for polygon and line layers.

This feature was developed by Stefanos Natsis


Feature: Streaming digitizing mode

When streaming digitizing mode is active, points are automatically added following the mouse cursor movement, providing a "freehand drawing" type experience.

Using the "R" key during digitizing operations will toggle streaming digitizing and normal (or circular string) digitizing.

Works with multiple map tools, including creating new line or polygon features, add ring, add part, reshape, split features, split parts, and more.

This feature was funded by Natural resources Canada Contract: 3000720707

This feature was developed by Nyall Dawson


Feature: New "Line Endpoints" snapping option

When enabled, this snapping mode snaps to the beginning or end vertex of lines only. When snapping to a polygon layer, only the first vertex in rings will be snapped to.

This feature was funded by Natural resources Canada Contract: 3000720707

This feature was developed by Nyall Dawson


Feature: Select vertices by polygon

Users can now use the ALT button to select vertices by polygon whilst digitizing.

This should improve the user experience for selecting specific vertices using the vertex tool, reducing the need for multiple passes using The SHIFT or CTRL functions to add and remove vertices from the current selection.

This also reduces the need to creatively rotate the map canvas in order to align vertices for selection, and provides an enhanced editing process such as for selecting the vertices of a curved road along a single side only.

This function supports the following usage operations:

  • Alt+click using the vertex tool to start digitizing a polygon.
  • Each subsequent click adds a new vertex to the rubberband polygon.
  • Backspace/ delete removes last added rubberband vertex.
  • Esc cancels the polygon selection mode, as does backspace/ deleting all of the rubberband's vertices.
  • Right-click finalizes the polygon digitizing and selects all vertices within the rubberband polygon.

This feature was developed by Stefanos Natsis


Data Management


Feature: Layer tree warning icon for layers with CRS inaccuracies

A new "Show CRS accuracy warnings for layers in project legend" is provided which, when checked, will display a new warning icon identifying any layers with a CRS which is identified as having accuracy issues.

Examples of low-accuracy layers might include those with a dynamic CRS with no coordinate epoch available, or a CRS based on a datum ensemble with accuracy that is found to exceed the user-set limit.

This option is disabled by default, and designed for use in engineering, BIM, and other industries where inaccuracies of meter/submeter level are very dangerous.

This feature was developed by Nyall Dawson


Feature: Basic support for dynamic CRS coordinate epoch

Basic support for the coordinate epoch of dynamic (not plate fixed) CRS has been added in line with relevant updates to GDAL.

QGIS has added support for respecting the source or destination coordinate epoch when transforming to or from a dynamic CRS.

If a dynamic CRS to dynamic CRS transformation at different epochs is attempted, which is not currently supported by PROJ, a user-facing warning message will be shown advising them that the results may be misleading and should not be used for high accuracy work.

This feature was developed by Nyall Dawson


Feature: Projection information improvements

Various improvements have been made to the handling and representation of projection information in QGIS, including:

  • The addition of an API to retrieve PROJ operation details for CRSes
  • The ability to show extended information about a layer's CRS in the layer properties info tab, including accuracy warnings
  • The addition of a @map_crs_projection variable, for retrieving a friendly name of a map's projection (e.g. "Albers Equal Area")

This feature was developed by Nyall Dawson


Feature: Datum ensemble CRS warnings

QGIS now shows a warning in the projection selection widget when a CRS based on a datum ensemble is selected, warning the user that there's an inherent lack of accuracy in the selected CRS.

This feature was developed by Nyall Dawson


Feature: Persist layer metadata in vector file exports

A "persist layer metadata" checkbox has been added to the export vector file dialog. When checked, any layer metadata present in the source layer will be copied and stored in the destination file.

This functionality is enabled by default and ensures that metadata is properly transferred over to newly created items, which is especially effective when utilizing the GPKG format.

This feature was developed by Nyall Dawson


Feature: Layer notes

QGIS now supports "layer notes", which can be created via the "Add Layer Notes" action in the layer context menu.

These notes are saved per layer, per project. They can be used as a place to store important messages for project users, such as to-do lists, processing or management instructions, or any other arbitrary text-based metadata.

A notepad indicator icon in the layers panel identifies layers that have notes attached. Clicking the notes indicator icon will open the note for editing.

This feature was discussed in QEP-206

These notes may be copied and pasted using the traditional copy/ paste methodology for transferring styles between layers in QGIS.

Layer notes are also supported by and stored within QML (QGIS Style) and QLR (QGIS Later Definition) files.

This feature was funded by Alta Ehf

This feature was developed by Nyall Dawson


Feature: Automatically load .shp.xml metadata

QGIS will now automatically load and convert ESRI metadata stored using a .shp.xml sidecar file. Where shapefile data is loaded and these metadata files are present they will be loaded automatically, with available layer metadata populated accordingly.

This feature was developed by Nyall Dawson


Feature: Automatically translate layer data from ESRI Filegeodatabases to QGIS layer metadata

When loading data from a .gdb file, QGIS will automatically attempt to translate as much as possible of the original ESRI metadata across to the QGIS metadata, so that it's immediately available for use.

This feature was funded by North Road / SLYR

This feature was developed by Nyall Dawson


Feature: Read field domains from datasets

For formats that support the embedded definition of field domains (currently GPKG and GDB), QGIS automatically converts the embedded field domain over to the equivalent QGIS editor configuration for the field.

This means that GPKG/GDB with coded field domains will automatically load into QGIS with their correct Value Map widget configuration intact, so that users see descriptions for field values instead of raw codes. Fields with a range (min/max) type domain will be translated to the range widget for the field as well.

This feature was funded by North Road

This feature was developed by Nyall Dawson


Feature: Allow loading GPKG layers with GEOMETRY type

GeoPackage supports layers with a generic "geometry" type, with the QGIS release 3.20 it is now possible to load them and specify the requested geometry type on load, just like with PostGIS.

This feature was developed by Marco Bernasocchi (OPENGIS.ch)


Feature: Offline editing support for string list and number list field types

PostGIS users rejoice: offline editing got a bit smarter and can now handle string list and number list field types.

This feature was developed by Mathieu Pellerin


Forms and Widgets


Feature: Per-field usage of last values for newly created features

Extended control has been provided for whether the last entered field values should be reused when creating new features, as this functionality may now be controlled independently for each individual attribute field for each layer.

Historically this functionality was configured using a global option that causes ALL field values for ALL layers to be remembered and reused during a QGIS session when creating new features.

This allows for finer control over form behavior, where some values may be desirable to reuse but others should be cleared or set to a default value based on an expression.

This feature was developed by Nyall Dawson


Feature: JSON View widget

New view widget to display JSON data in a user friendly way. Data can be displayed as syntax highlighted text or as a tree.

This feature was funded by Canton of Solothurn

This feature was developed by Damiano Lombardi


Layer Legend


Feature: Vector "label" legend entries

QGIS now supports adding legend entries for layer labels, which will display the font style and labeling classes for vector features.

This provides a legend entry that allows users to explicitly identify features by label style, even when no feature symbology is used.

Control of this behavior is made accessible by adding a "show label legend" option to the legend tab of the vector layer properties.

This feature was funded by Canton of Glarus

This feature was developed by mhugent


Processing


Feature: Add option to save layer metadata to Package Layers algorithm

This additional option enriches the Package Layers algorithm and will copy the source layer metadata into the geopackage, so that it will be used as the default metadata for the layer.

This feature was developed by Nyall Dawson


Feature: Raster Layer Properties Algorithm

This algorithm retrieves basic raster layer properties such as the size in pixels, pixel dimensions (map units per pixel), number of bands, and no data value.

It is intended for use as a means of extracting these useful properties to use as the input values to other algorithms in a model, such as passing an existing raster's pixel sizes over to a GDAL raster algorithm.

This feature was developed by Nyall Dawson


Feature: Improved rasterize operation with 3D support

The rasterize (vector to raster) GDAL process now supports 3D data, in that it now includes the possibility to use the Z value (elevation) of a feature to extract burn values.

The use of this option indicates that a burn value should be extracted from the “Z” values of the feature. Works with points and lines (linear interpolation along each segment). For polygons, it only works properly if the features are flat (i.e. contain the same Z value for all vertices)

This feature was developed by talledodiego


Feature: Save selected option for Package Layers Algorithm

The Package Layers Algorithm was modified to support saving only selected features

This feature was developed by Stefan Conrads


Feature: Log levels for processing context

A new log level property has been added to QgsProcessingContext

This allows algorithms to tune their output based on the logging level.

The qgis_process command line operation has been granted a --verbose switch to enable verbose log output.

This feature was funded by Natural resources Canada Contract: 3000720411

This feature was developed by Nyall Dawson


Feature: Geometry snapper rework offers major speed boost

This development cycle saw a rework of the inner workings of QGIS' geometry snapper algorithm, which has led to a significant speed boost. Datasets which could take over 10 minutes to process now take less than 10 seconds.

This feature was funded by SwissTierras Colombia

This feature was developed by Mathieu Pellerin


Feature: Add a last_value function to the aggregate algorithm

The aggregate processing tool now includes a last_value aggregation function, which is especially useful when working with input data that has meaningful ordering.

This feature was developed by Mathieu Pellerin


Application and Project Options


Feature: Add global option to disable monitoring of directories

Allows users to manually opt-out of monitoring directories in the browser by default, and also provides a mechanism for enterprise installs to disable this potentially unwanted behavior.

This feature was developed by Nyall Dawson


Feature: APIs for export and import of XML authentication configurations

QGIS now provides export and import functions to the QGIS authentication manager. This functionality has not yet been exposed through the User Interface. Complex authentication configurations with numerous, such as OAuth2, can optionally be encrypted or stored in plain text to enhance authentication management workflows.

This feature was developed by Mathieu Pellerin


Browser


Feature: Custom icon colors for folders in browser

QGIS now allows users to set a custom icon color for different folders in the browser. This effectively allows users to "tag" folders, which aids in the rapid navigation of complex folder structures in the browser.

This feature was developed by Nyall Dawson


Feature: OWS Group removed from the QGIS Browser

The non-functional and redundant "OWS" Group has been removed from the QGIS Browser panel.

This feature was developed by Loïc Bartoletti


Data Providers


Feature: Add support for integer, real and integer64 list data types in OGR

Additional list field types have been added to the OGR driver for supported data types, such as Geojson.

This feature was developed by Nyall Dawson


Feature: Extend vector layer read capabilities to other layer types

Whilst the ability for QGIS to access a layer's metadata information, such as reading the extent of a layer from the metadata, was previously restricted to vector layers, this functionality has now been extended to include various other layer types including raster, point cloud, and others.

This feature was funded by Ifremer

This feature was developed by rldhont


QGIS Server


Feature: External layer opacity

Opacity control support for external/ remote layers served by QGIS Server

This feature was developed by mhugent


Feature: Configurable Service URL

Additional options have been added to QGIS Server to improve the results of the GetCapabilities response, especially without the need to complete various fields within the QGIS Project configuration. These updates also enable many options to be set by an environment variable, or by providing headers from a proxy.

The following options have been added and will be resolved by the server in the following order:

  • Value defined in the project per service.
  • The <service>_SERVICE_URL environment variable.
  • The SERVICE_URL environment variable.
  • The custom X-Qgis-<service>-Service-Url header.
  • The custom X-Qgis-Service-Url header.
  • Build form the standard Forwarded header.
  • Build form the pseudo standard X-Forwarded-Host and X-Forwarded-Proto headers.
  • Build form the standard Host header and the server protocol.
  • Build form the server name and the server protocol.

This feature was developed by Stéphane Brunner


Notable Fixes


Feature: Bug fixes by Even Rouault

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.16 backport commit (GitHub) -- | -- | -- | -- compiler warning in QgsMeshDatasetGroupStore::readXml() | unreported | PR #43304 | N/A QGIS Crashes with GDAL 3.3 | #43224 | PR #43306 | PR #43323 Data corrupted when deleting field in a (specific) geopackage layer | #42768 | PR #43309 | PR #43322 PyQGIS: WMS-T layer uri without timeDimensionExtent in it crashes QGIS | #43158 | PR #43310 | PR #43324 Data Corruption: Failed GPKG OID/FID Over-write causes value to spill into next attribute column | #42274 | PR #43311 | PR #43360 "Split features" causes data loss | #41283 | PR #43328 | PR #43340 Foreign key constraints checks are ignored on GPKG | #34728 | PR #43330 | Not appropriate Strange error message from SQL Query Composer in WFS client | #42985 | PR #43334 | PR #43341 WFS 1.1.0 ExceptionReport response handling : QGIS looks for 'exceptionCode' but in specifications it's 'code' attribute | #42196 | PR #43335 | PR #43342 Export selection from a large WFS layer fails | #42049 | PR #43336 | PR #43343 Long (?) WKT makes delimited text layer fail on 3.16 and 3.18 | #43256 | PR #43337 | PR #43339 Wrong SRS when reading a Postgis layer | unreported | PR #43338 | Not appropriate Mesh data in GRIB format from ERA5 | #41809 | GDAL PR 3875 | GDAL PR 3877 Two OGR provider filtered layers with same source dataset don't restore proper feature count / extent on project reload | #43361 | PR #43372 | PR #43394

This feature was funded by QGIS.ORG (through donations and sustaining memberships)

This feature was developed by Even Rouault


Feature: Bug fixes by Alessandro Pasotti

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.16 backport commit (GitHub) -- | -- | -- | -- Data Source Manager fails to derive exact 3D geometry type for GeometryZ PostGIS tables | #43268 | PR #43326 | Attribute table conditional formatting doesn't work when using $geometry is NULL | #43252 | Works for me | QgsZonalStatistics.calculateStatistics() incomplete outputs | #43245 | PR #43332 | PR #43378 Bad Request on feed.qgis.org | #43232 | PR #43333 | Not relevant Server: WFS3/API Features - overlapping columns/content on data items as HTML pages | #42269 | PR #43363 | PR #43380 Datum transformation using custom gsb grid for WMS Layer in QGIS Server does not work | #43072 | PR #43365 | Not relevant Server: fix unreported QGIS_OPTIONS_PATH not really working for proj | unreported | PR #43366 | Not appropriate WFS cascade getfeatureinfo fails | #42062 | Works for me | Server standalone: fix unreported project storage not supported with -p | unreported | PR #43381 | PR #43464 QGIS Server GetPrint: HIGHLIGHT_GEOM is not printed if map layers are configured to follow a map theme | #34178 | PR #43391 | Risky Feature count is wrong when adding features from a table with features of mixed geometries | #43199 | Works for me | Not all geometry types are found in PostGIS table with Spatial Type of Geometry | #43186 | PR #43419 | Risky Icon not updated when saving a scratch layer | unreported | PR #43431 | PR #43463 Fix list of protocols in ssh custom configuration | unreported | PR #43432 | Not appropriate Crash with table set to Show Visible, joins, and left open as QGIS is quit | #43287 | PR #43434 | Not appropriate "show label" is disabled in widget designer but label keeps displaying in attribute form if you use tabs in the Drag and-Drop Designer and the field widget was placed in any tab | #43103 | PR #43435 | TODO Browser adds layers to projects with a leading space | #43129 | PR #43436 | Not appropriate saveStyleToDatabase() bug when saving more than one layer to a GPKG | #42988 | Works for me | Widget parameters not persistent for relations in D&D designer | #43123 | PR #43468 | Not appropriate Rule-based rendering sometimes doesn't show all results | #43181 | PR #43502 | Risky Fix unreported missing raster band stats in info panel | unreported | PR #43507 | Raster calculator does not create/store statistics for output rasters | #42835 | PR #43512 | Not a priority Attribute Form Value Relation Doesn't Respect Column Default | #41951 | Works for me | Attribute table in form view can display "ghost" attributes | #43477 | PR #43533 | Not a priority PG identity default clause issue | https://lists.osgeo.org/pipermail/qgis-user/2021-June/048983.html | PR #43529 | Not appropriate Pyqgis 3.18.3 error when adding wms layer | #43580 | PR #43581 | TODO "Reuse last entered attribute values" slows creation of new features on large vector | #42909 | PR #43584 | TODO Deleting "all other values" breaks date based categorise symbology | #43651 | GDAL PR 3978 | Fix documentation doctest builds | https://github.com/qgis/QGIS-Documentation/pull/6747 | https://github.com/qgis/QGIS-Documentation/pull/6747 | Not relevant

This feature was funded by QGIS.ORG (through donations and sustaining memberships)

This feature was developed by Alessandro Pasotti


Feature: Bug fixes by Paul Blottiere

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.16 backport commit (GitHub) -- | -- | -- | -- VERSION is now mandatory in WMS 1.3.0 for getmap requests | unreported | PR #43459 | PR #43467 WMTS GetCapabilities and axis order | #34826 | PR #43280 | PR #43772 Use the lowest version in wms negotiation | #41051 | PR #41376 | Risky QGIS crashes adding a record to a memory ("scratch") layer table in some circumstances | #42578 | Works for me | QGIS fails silently when an auxiliary layer cannot be created | unreported | PR #43543 | PR #43773 Unable to save auxiliary storage | #26365 | PR #43560 | Risky WMS GetFeatureInfo on time enabled layer does not pass TIME parameter | #42141 | PR #43599 | PR #43774

This feature was funded by QGIS.ORG (through donations and sustaining memberships)

This feature was developed by Paul Blottiere


Feature: Bug fixes by Denis Rouzaud

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.16 backport commit (GitHub) -- | -- | -- | -- Widget parameters not persistent for relations in D&D designer | #43123 | PR #43479 | not relevant Use a read-only line edit instead of combobox in relation reference doesn't allow to add a child from the parent | #42813 | PR #43509 | too risky / not worth it no open-form in all layers feature locator filter (active filter has) + show form instead of error for geometry-less layers | unreported | PR #43462 | ? Cannot add a polymorphic relations | #41959 | PR #43488 | not relevant Filter expression from relation reference widget on attributes form, not working properly | #42803 | PR #43523 | yes fix Picture layout element does not handle properly a non-existing filepath when provided with an expression | #42280 | PR #43119 | relations bug: zoom to child button disappears | #34477 | Works for me | Value Relation and Relation reference widget: Entries are sorted although the option "Order by value" is NOT checked | #26468 | not sure how to fix this for now | Errors while adding a feature with a polymorphic relation | #41962 | fixed |

This feature was funded by QGIS.ORG (through donations and sustaining memberships)

This feature was developed by Denis Rouzaud


Feature: Bug fixes by Loïc Bartoletti

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.16 backport commit (GitHub) -- | -- | -- | -- QgsProjectionSelectionWidget::selectCrs() cannot be overwritten in Python | #43019 | Works for me. | A bug? in FindPyQt5.py | #41913 | #41913 | not relevant Missing incon of Geometry Checker core plugin | #42708 | PR #43536 | PR #43549 Please reomve the not functional OWS group from the QGIS browser | #24841 | PR #43559 | Not appropriate Build fails with external qwtpolar | #41910 | PR #43551 | PR #43583 Check geometries tool does not save default action changes | #42489 | PR #43550 | PR #43568 Wrong error output location when using Check validity on data with certain type of 3D error | #43582 | PR #43588 |

This feature was funded by QGIS.ORG (through donations and sustaining memberships)

This feature was developed by Loïc Bartoletti


Feature: Bug fixes by Julien Cabieces

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.16 backport commit (GitHub) -- | -- | -- | -- Postgresql tables with intarray fields as primary key causes problems in python scripts | #42778 | PR #43493 | PR #43510 Cannot instantiate QgsFeatureFilterModel using PyQGIS | #42488 | PR #43494 | PR #43516 QGIS crashes by loading ui file | #42379 | Working | QvariantList Field , nothing in attribute table when a single value is in the list | #33108 | PR #43508 | PR #43530 Copy CRS to clipboard when copying selected features | #40117 | PR #43527 | PR #43532 Open Running (connection) Task makes it impossible to Quit QGIS | #40001 | PR #43587 | Plugin manager doesn't work with proxy | #43284 | Feedback | Form fails to initialize $geometry | #34791 | PR #43617 |

This feature was funded by QGIS.ORG (through donations and sustaining memberships)

This feature was developed by Julien Cabieces


Feature: Bug fixes by Peter Petrik

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.16 backport commit (GitHub) -- | -- | -- | -- Passwords cannot be saved into keychain on macOS with QGIS 3.16 | #40541 | feedback | buggy profile results in two instances starting | #29379 | not an issue anymore | GRASS plugin init error on macOS | #41782 | Works for me. | Data Source Manager incorrectly identifies PostGIS raster extent on macOS | #43042 | investigation | Crash with point clouds when zooming into 3D viewer [Mac] | #41903 | PR #43743 | not relevant Crash when chcking the "Show bounding boxes" option in 3D view settings | #40766 | PR #43755 | backport_bot

This feature was funded by QGIS.ORG (through donations and sustaining memberships)

This feature was developed by Peter Petrik


Feature: Bug fixes by Nyall Dawson

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.16 backport commit (GitHub) -- | -- | -- | -- Fix browser panel scanning on remote locations can hang QGIS | many PRs | [3d] Fix rendering of curved lines using simple line renderer | unreported | Commit 700390a | Fix layer preview through browser panel | #43303 | Commit 7bf85a0 | [expressions] Fix evaluation of round(...) where input value is a string containing a decimal number | #36467 | Commit 42c2061 | Fix label masking settings get dropped for layers with "," or ";" characters in the text | #37473 | Commit 3d4e2f4 | Fix orphaned symbol masking can force maps to be rasterized | unreported | Commit ffc500d | Fix selection of features which use variables in filter rules | #42006 | Commit d41c234 | PR #43235 [labeling] Default to "from symbol bounds" for cartographic point label placement | #25866 | Commit 4ad5d36 | Fix PyQGIS QgsLineString constructor only accepts lists of QgsPoint, not QgsPointXY as indicated by the documentation | #43200 | Commit 2b6c3c1 | Fix crash when changing symbol levels through style dock | #42671 | Commit f3f4c17 | PR #43235 Allow clearing data defined buttons which are set to non-existing fields | unreported | Commit ee03ad5 | [processing] Python entry in history dialog should be processing.run line, not processing.execAlgorithmDialog | unreported | Commit 61ac64c | Don't try to render font marker symbols in massive font sizes, avoid crash | #42270 | Commit 12d1078 | PR #43235 Fix Qgis::MessageLevel::None is not available in PyQGIS | #42996 | Commit 02266ef | Fix marker symbol bounds incorrectly include bounds of disabled symbol layers | unreported | Commit ca54e8f | PR #43235 Fix hang in rendering joined layers | #38551 | Commit ca00377 | Commit cdbf722 [temporal] Fix broken animations when a non-integer interval value is used (e.g. 1.5 hours) | unreported | Commit 81ec79c | Fix allowing attribute selection for DXF layer name | #42575 | Commit 66c6ef9 | Fix papercut in rule based labeling widget where it's possible to uncheck BOTH the filter and else radio buttons | unreported | Commit 1fcb9752 | PR #43235 Fix it's impossible to change a rule based labeling "else" rule back to a normal rule | unreported | Commit de92ca0 | PR #43235 Fix data defined properties which bind to a field can have incorrect values when the linked field has a null value | unreported | Commit 4e25c6b | Commit 2a3bcc3 Fix broken coordinate transform when exporting features to DXF | #43449 | Commit 65c02e0 | Commit 044f6a1 [processing] Don't show model child algorithm outputs as choices for multi-layer input parameters when running a model | #41210 | Commit f4477b2 | Expand on QgsPoint/QgsPointXY documentation to clarify when each class should be used | #43598 | Commit ae83444 | Fix crash when canceling union tool | #43553 | Commit b1f50bb | Commit 1f25ba5 Fix "force layer to render as raster" setting wasn't correctly copied | #43535 | Commit 1313786 | Commit dcd016b Fix massive performance regression in attribute table | unreported | Commit 5fdb88b | Commit 4970c3a Fix performance issue when using attribute table with "edited or new features" filter in place | unreported | Commit af021f1 | Fix invalid error message when creating expression for layout text item | #42884 | Commit db74013 | Clarify labels in temporal controller | unreported | Commit ed346d8 | Correctly redraw canvas when applying project properties changes | unreported | Commit 41f9842 | Commit 607b44b Make interactive labeling tools correctly work with data defined properties which aren't bound to fields | unreported | Commit c6bd366 | Fix crash in labeling if label has data defined x/y set and projection error occurs transforming these coordinates | unreported | Commit 8943ac7 | Commit 2fe68cc [temporal] Fix filter generation for vector temporal layers | #38468 | Commit 544708f | Fix formatting of exception blocks in PyQGIS docs | unreported | Commit 8359281 | PR #43235 Fix zonal statistics does not correctly handle coordinate transforms | #26858 | Commit e70cf8d | Commit c82678d Don't assume that owslib >= 0.20 is available | #38074 | Commit 3cf9083 | Commit eb1a55a Fix crash in geometry checker when empty geometries are found | #38983 | Commit 73a4948 | Commit 6938593 [temporal] Fix incorrect frame duration in last frame in animation mode | #40777 | Commit f76747b | Default to a time range of the last 24 hours, in 1 hour increments, instead of a confusing "zero length" range | #40868 | Commit 5f5a3a7 | Fix temporal fields reset if previously set to no value | #43643 | Commit 9de5d25 | PR #43235 [processing] Fix broken execution of models via browser/drag and drop | #43698 | Commit cbe2678 | Commit 9e0cdcb Fix QgsDistanceArea.bearing() | unreported | Commit 0b499d3 | Don't restrict adding crs selections to list of recent CRSes to only a few select dialogs | unreported | Commit 870945c | [processing] Fix use of data defined parameter values when editing features in place | #43758 | Commit 3ae9625 | [layouts] Fix bounding rectangle for shapes doesn't include stroke width after loading from xml | #43748 | Commit fad1800 |

This feature was funded by QGIS.ORG (through donations and sustaining memberships)

This feature was developed by Nyall Dawson