Project: QGIS

Changelog for version: 3.14

Release date: 17 June, 2020


Another awesome release in the trail of great QGIS releases we have made across 18 years of development. This release is so jam-packed with new features and improvements big and small, it is hard to know where to start. Some of the marquee features include vector tile support, huge advances in mdal / mesh support, native support for temporal data in WMS-T, PG Raster, vector providers, and mesh layers. Users focussed on cartography and digitising haven't been left out either, with many new options for you!

Thanks

We would like to thank the developers, documenters, testers, and all the many folks out there who volunteer their time and effort (or fund people to do so). 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.

Sustaining members for QGIS version 3.14


Large : 9000 EUR

Nordhessischer VerkehrsVerbund

Nordhessischer VerkehrsVerbund

OSGeo

OSGeo

QGIS user group Denmark

QGIS user group Denmark

QGIS user group Germany

QGIS user group Germany

QGIS user group Sweden

QGIS user group Sweden

QGIS user group Switzerland

QGIS user group Switzerland

QGIS user group Switzerland

QGIS user group Switzerland


Medium : 3000 EUR

AERO ASAHI Corporation

AERO ASAHI Corporation

ARTOGIS a/s

ARTOGIS a/s

BBOÖ Breitband Oberösterreich GmbH

BBOÖ Breitband Oberösterreich GmbH

GAIA mbH

GAIA mbH

GIAP Sp. z o.o.

GIAP Sp. z o.o.

Gis3W

Gis3W

Giswater Association

Giswater Association

Land Vorarlberg

Land Vorarlberg

Lutra Consulting Limited

Lutra Consulting Limited

MIERUNE INC.

MIERUNE INC.

McKenzie Intelligence Services Ltd.

McKenzie Intelligence Services Ltd.

OPENGIS.ch GmbH

OPENGIS.ch GmbH

Office of Public Works, Flood Risk Management and Data Management Section

Office of Public Works, Flood Risk Management and Data Management Section

QGIS España Association (QGIS user group Spain)

QGIS España Association (QGIS user group Spain)

Terraplan

Terraplan

WIGeoGIS

WIGeoGIS

WhereGroup GmbH

WhereGroup GmbH

WhereGroup GmbH

WhereGroup GmbH


Small : 500 EUR

AMS (Archaeological Management Solutions)

AMS (Archaeological Management Solutions)

Agresta S. Coop.

Agresta S. Coop.

Alta ehf

Alta ehf

Asociación Geoinnova

Asociación Geoinnova

BGEO Open GIS, SL

BGEO Open GIS, SL

BNHR

BNHR

Bathurst Regional Council

Bathurst Regional Council

Baumsicht

Baumsicht

CHARTWELL Resource Group Ltd.

CHARTWELL Resource Group Ltd.

CartoData

CartoData

City of Canning

City of Canning

Datarock Pty Ltd.

Datarock Pty Ltd.

Dr. Kerth + Lampe Geo-Infometric GmbH

Dr. Kerth + Lampe Geo-Infometric GmbH

EPrime Formacion Ltda

EPrime Formacion Ltda

FORNAT AG

FORNAT AG

Forest Design SRL

Forest Design SRL

GEO KT d.o.o.

GEO KT d.o.o.

GIS Mexico - Soluciones Geográficas de México SC

GIS Mexico - Soluciones Geográficas de México SC

GIS Support Sp. z o.o.

GIS Support Sp. z o.o.

GKG Kassel, (Dr.-Ing. Claas Leiner)

GKG Kassel, (Dr.-Ing. Claas Leiner)

Gaia3D, Inc.

Gaia3D, Inc.

Hazardhub

Hazardhub

HermeSys, Inc.

HermeSys, Inc.

HermeSys, Inc.

HermeSys, Inc.

IDGeo  - Agricultural intelligence

IDGeo - Agricultural intelligence

InfraGIS GmbH

InfraGIS GmbH

Infraplan Engineering Services Pvt. Ltd.

Infraplan Engineering Services Pvt. Ltd.

Ingenieurbüro Kauppert

Ingenieurbüro Kauppert

Integrate Sustainability Pty Ltd

Integrate Sustainability Pty Ltd

Kaplan Open Source Consulting Ltd

Kaplan Open Source Consulting Ltd

Le Groupe SYGIF inc.

Le Groupe SYGIF inc.

Liverpool School of Tropical Medicine

Liverpool School of Tropical Medicine

MHTC Ltd

MHTC Ltd

MappingGIS S.L.U.

MappingGIS S.L.U.

Natural GIS LDA

Natural GIS LDA

OPGK Kraków

OPGK Kraków

OSGeo.JP

OSGeo.JP

Oester Messtechnik GmbH

Oester Messtechnik GmbH

Omkeere B.V.

Omkeere B.V.

Open Geo Groep

Open Geo Groep

Orbitalnet Inc.

Orbitalnet Inc.

Orbitalnet Inc.

Orbitalnet Inc.

Pixalytics

Pixalytics

QGIS user group Colombia

QGIS user group Colombia

QGIS user group México

QGIS user group México

QTibia Engineering

QTibia Engineering

Raumplanung | Stadtplanung ZT OG

Raumplanung | Stadtplanung ZT OG

Riedell Exploration Ltd.

Riedell Exploration Ltd.

SC Micro Mapper SRL

SC Micro Mapper SRL

SIGMOÉ

SIGMOÉ

SOLTIG (Soluciones en Tecnologías de Información Geográfica)

SOLTIG (Soluciones en Tecnologías de Información Geográfica)

Septima

Septima

Solargis s.r.o.

Solargis s.r.o.

Spacescape AB

Spacescape AB

Studio Bereikbaar

Studio Bereikbaar

Syddjurs Kommune

Syddjurs Kommune

TYC GIS

TYC GIS

Tasmanian Planning Commission

Tasmanian Planning Commission

TerreLogiche

TerreLogiche

Trage Wegen vzw

Trage Wegen vzw

Urbsol

Urbsol

WAGNER-IT

WAGNER-IT

arx iT

arx iT

con.sens verkehrsplanung zt gmbh

con.sens verkehrsplanung zt gmbh

con.sens verkehrsplanung zt gmbh

con.sens verkehrsplanung zt gmbh

correlate analytics gmbh

correlate analytics gmbh

gfoss.it - Associazione Italiana per l'Informazione Geografica Libera

gfoss.it - Associazione Italiana per l'Informazione Geografica Libera

tur gmbh

tur gmbh


General


Feature: New grid decoration annotations font settings

Annotations for the map canvas' grid decoration are now fully customizable including font color, buffer, etc.

This feature was funded by iMHere Asia

This feature was developed by Mathieu Pellerin


Feature: QGIS 3.14 Highlights (changelog)


Temporal


Feature: Cumulative temporal range setting in temporal controller

Adds a setting in the temporal controller to set the animation temporal range to cumulative. This means that all animation frames will have the same start date-time but different end dates and times.

This is useful is you wish to accumulate data in your temporal visualisation instead of showing a 'moving time window' across your data.

This feature was funded by Meteorological Service of Canada

This feature was developed by Kartoza / Samweli Mwakisambwe


Feature: Add a new "Redraw Layer Only" mode for temporal vector layers

When set to this mode, the layer will automatically be redrawn whenever the temporal range is changed, but no time based filtering will be applied to the features.

This configuration is useful when the layer has symbology settings which vary based on the temporal range. For instance, when a layer is using time-dependent rule-based renderer expressions or data-defined symbology expressions.

This feature was developed by Nyall Dawson


Feature: Add basic temporal handling support for vector layers

This exposes some basic native temporal capabilities for vector layers:

  • Static time range for layer (to match raster layer possibilities), this sets a single static time range that applies to the whole layer. All features from the layer will be shown whenever the canvas time overlaps the layer time range
  • "Single field with DateTime": Allows selection of a single Date or DateTime field from the layer. Features will be shown whenever this field value is within the canvas time range
  • "Separate Fields for Start and End Date/Time": Allows selection of start and end Date/DateTime fields from the layer. Features will be shown whenever the time interval calculated from these fields overlaps the canvas time range

We should consider extending this in future, e.g. to add modes like "start time + fixed duration", "start time + duration from field", "start and end time via expressions", etc.

Some known limitations/inefficiencies:

  • Currently only Date/DateTime fields can be used. This was done to simplify the format handling and avoid the need to worry about string fields with different DateTime formats. In future, we should allow selection of string fields and allow users to enter a custom DateTime format string
  • Unlike the Time Manager plugin approach, the approach taken here is to rely completely on QGIS expressions and feature requests to do the filtering (Time Manager uses layer filter strings and attempts to set a native SQL filter syntax so that filtering is done on the backend). This is intentional because it provides a unified filter approach regardless of the provider used (i.e. we don't need to worry about the different SQL syntaxes used natively by the different providers). The beauty of feature request expression compilation should mean that the QGIS expressions are magically turned into native backend queries, BUUUUUUUUUUUT... because we lack QGIS expression support for DateTime literals, we currently rely on the "to_datetime" expression function and coerce everything through strings. None of the expression compilers handle this function, so currently *all* filtering is done on the QGIS side. We need to add functions for optimised DateTime literal creation and then ensure that the different compilers correctly map these literals across to the backend filter syntax to allow all the filtering work to be done on the database side...

So, currently, performance is much worse with large layers compared to Time Manager (and the exposed feature set is smaller, e.g. no interpolation handling) but the advantage is that we can use the native temporal framework and have vector layers animated alongside mesh and raster layers!

This feature was developed by Nyall Dawson


Feature: Postgres raster temporal API support

Added temporal capabilities integration for Postgres rasters.

This feature was funded by ARPA Piemonte

This feature was developed by Alessandro Pasotti


Feature: QGIS Project temporal settings

This feature adds project time settings functionality.

You will be able to set the project temporal range either by using manual input or by calculating it from the current project's temporal layers. The latter can be done by clicking the provided "Calculate from Layers" button.

This implementation sets the stage for adding an animation feature for temporal layers in QGIS.

Here's an example of setting the project temporal range.

Prior discussions about QGIS temporal support can be found here and here.

This feature was funded by Meteorological Service of Canada

This feature was developed by Kartoza / Samweli Mwakisambwe


Feature: WMS-T layers temporal constraints support

This feature adds the ability to constrain WMS Temporal (WMS-T) layers inside QGIS. You will be able to constrain the DateTime range for any temporal layer from WMS-T providers.

This implementation lets the user specify the required DateTime range on the layer from the source tab on the layer properties dialog.

Below is an example of the workflow.

Note: For instant point in time requests, specifying a range with equal begin and end DateTime will result into using the specified DateTime instant and not a range.

This feature was funded by Meteorological Service of Canada

This feature was developed by Kartoza / Samweli Mwakisambwe


Feature: Temporal API

This feature provides an API implementation for temporal support in QGIS.

You can find the API for Python by searching for 'Temporal' in the python docs (link).

This feature was funded by Meteorological Service of Canada

This feature was developed by Kartoza / Samweli Mwakisambwe


Map Tools


Feature: Identify Tool Support for QGIS vector tile layers.

The identify map tool is now able to inspect attributes of features in vector tiles.

This feature was funded by Many funders

This feature was developed by Lutra Consulting (Martin Dobias)


Feature: Show a menu next to scale widget buttons, to allow setting the widget directly to a scale from a print layout map

A screencast says a thousand words:

This feature was developed by Nyall Dawson


Feature: Add tool button to "Deselect Features from the Current Active layer"

This feature was developed by Ivan Ivanov


User Interface


Feature: Allow the drag and drop of a layer across several QGIS instances

This feature was funded by QGIS Swiss user group

This feature was developed by Denis Rouzaud


Feature: Open attribute tables as tabs

If the option "Open new attribute tables as dock windows" is active, new attribute tables will be opened as tabs on top of existing attribute tables.

This feature was developed by Germán Carrillo


Symbology


Feature: Raster Layer Contour Renderer

This new renderer draws contour lines that are calculated on the fly from the source raster band. It is possible to set the interval of the contour lines and the symbol used for drawing.

In addition there is support for "index contours" - contour lines with higher intervals, typically drawn with a wider line symbol.

If we generate contour lines on input raster blocks with the same size as our output raster block, the generated lines would contain too much detail. This detail can be reduced by the "downscale" factor - this will request lower resolution of the source raster.

This feature was developed by Martin Dobias


Feature: Add percentage size unit for Raster Image Marker and Raster fill layers symbology.

According to the Feature Request this patch adds a new percentage (of original image size) value for size units of Raster Image Marker and Raster fill (by nirvn suggestion) layers.

For example a layer contains raster images of various sizes and aspect ratios:

If we use an existing Raster image marker size unit values the layer will look like this (with a normal croc, but huge giraffe):

or like this (with a normal giraffe but tiny croc):

The new percentage value of size units is intended to fix this issue.


Both unit tests "qgis_rasterfilltest" and "qgis_rastermarkertest" were rewritten with a set of new control images for testing the proposed percentage value of size units.

This feature was developed by beketata


Feature: Add data-defined property to font family/style for font markers

Data-defined properties were added for the font markers' font family and the brand new font style properties. This can come in handy for a number of scenarios, including multilingual context where a data-defined property can avoid duplicating datasets.

This feature was funded by iMHere Asia

This feature was developed by Mathieu Pellerin


Feature: New font style setting for font markers

With this brand new font style setting, users can pick non-default style of font families previously not available.

This feature was funded by iMHere Asia

This feature was developed by Mathieu Pellerin


Labelling


Feature: Respect HTML colors in labels

When enabled, this option will treat label contents as HTML, and any FOREGROUND COLOR RELATED html formatting options will be respected in the rendered label.

Note: ONLY HTML COLOR TAGS ARE RESPECTED. This is NOT a bug, rather this feature has been designed as a "test of the waters" with HTML formatting in labels, and accordingly only formatting options which do not alter the font shape were considered.

On the plus side, it works correctly with ALL other label settings, including shadows, buffers, curved labels, etc!

Now some pretty pictures:

This feature was funded by geoProRegio AG

This feature was developed by Nyall Dawson


Feature: Automatic placement of labels outside polygons

This feature adds the ability to automatically place labels outside of polygon features.

This is exposed in a number of ways:

  1. A new placement mode which always places polygon labels for the layer outside the features:
  2. When using other polygon placement modes, a new checkbox "Allow placing labels outside of polygons" can be checked to allow labels to be placed outside when it isn't possible to place them inside the polygon:

The "allow placing labels outside" checkbox can be data defined, allowing users to either allow outside labels, prevent outside labels, or force outside labels on a feature-by-feature basis.

The placement algorithm is based on a modification of Rylov & Reimer (2016) "A practical algorithm for the external annotation of area features". While Rylov & Reimer propose a horizontal sweep-line based approach for selection of candidate label points, in practice I found that this delivered inferior results (and was slower) then just traversing the exterior ring of the polygon and generating candidate point at regular intervals (especially for narrow, nearly horizontal polygons).

As shown in the islands screenshot above, the outside placement mode works as expected with the "Follow label placement" multiline alignment mode.

This feature was funded by Swiss QGIS user group

This feature was developed by Nyall Dawson


Feature: Vector tile layer - part 4 (labeling)

Continued work on vector tile layer implementation.

This adds labeling support for vector tile layers. So far this is just working on qgis_core... GUI support will come next. Labeling uses the same concepts as the rendering of vector tiles: we have a list of labeling styles, each one is defined by sub-layer name, geometry type, filter expression, zoom range and of course label style configuration (QgsPalLayerSettings).

Note there is a "chicken-and-egg problem" with labeling: For vector tiles, we create QgsFields for a sub-layer based on fields that renderer and labeling request, but with labeling it was impossible to get required fields if they were not already available in the expression context (hence some small additions to QgsProperty, QgsPropertyCollection, QgsPalLayerSettings to be able to get required field names by not preparing internal expressions at the same time).

An example how to set the above labeling in Python console: s = QgsVectorTileBasicLabelingStyle() s.setLayerName("place") s.setGeometryType(QgsWkbTypes.PointGeometry) s.setFilterExpression("rank = 1 AND class = 'country'") ls=QgsPalLayerSettings() ls.drawLabels=True ls.fieldName="name" ls.placement = QgsPalLayerSettings.OverPoint s.setLabelSettings(ls) labeling = QgsVectorTileBasicLabeling() labeling.setStyles([s]) iface.activeLayer().setLabeling(labeling)

This feature was funded by Many funders

This feature was developed by Lutra Consulting (Martin Dobias)


Feature: Add control over anchor point for callout on label

This gives users control over where a callout should join to the label text (previously, you only had control over where the callout would join to the corresponding feature geometry).

Choices include:

  • Closest point (previous behavior)
  • Label Centroid
  • Fixed corners: Top left/top right/bottom left/bottom right/etc

Data defined control over the label anchor is also possible.

Helps fix some callout ugliness!

Previous result (closest point mode):

With new "centroid" placement:

This feature was developed by Nyall Dawson


Mesh


Feature: Use only specified dataset group

This feature allows the user to choose the dataset groups that are used. This can be done in the mesh layer properties dialog in the source tab.

A new tree view displays all the available dataset groups from the data provider. The dataset groups can be checked/unchecked and renamed.

This widget also provides buttons to load extra dataset groups from files, to expand/collapse the tree, to check/uncheck all items and to reset the defaults from the provider (for now, only the original name).

Only the checked dataset group will be displayed in the active dataset widget in renderer settings.

This feature was funded by Deltares

This feature was developed by Lutra Consulting (Vincent Cloarec)


Feature: Scalar color settings depending on classification

With this feature, MDAL reads classified scalar values in the dataset. When values are classified, the default scalar rendering settings has the color ramp shader and labels set according to the classified values.

This feature was funded by Deltares

This feature was developed by Lutra Consulting (Vincent Cloarec)


Feature: Snap on mesh elements

Adds a method to the API to snap on mesh elements.

The method returns the position of the snapped point on the closest mesh element :

  • For a vertex, the snapped position is the vertex position
  • For an edge, the snapped position is the projected point on the edge, or the extremity of edge if outside the edge
  • For a face, the snapped position is the centroid of the face

The returned position is in map coordinates.

This feature was funded by Deltares

This feature was developed by Lutra Consulting (Vincent Cloarec)


Feature: 1D mesh width/color varying

This feature provides a new way to render a 1D mesh with edge widths that can vary depending on value. So now, width and color vary depending on the value on the edges or on vertices.

The user can define min/max value and min/max width to set the rendering.

For color, the user can define a color ramp shader (as for 2D mesh and raster).

For this new rendering, new generic classes are introduced that could be used outside the mesh framework.

This feature was funded by Deltares

This feature was developed by Lutra Consulting (Vincent Cloarec)


Feature: Support for multiple mesh (since MDAL 0.5.91)

In addition to updating to MDAL 0.5.91, this feature allows several meshes to be loaded from one file.

The file is parsed and a sub layer dialog is launched using the same logic as for vector or raster layers.

This feature was funded by Deltares

This feature was developed by Lutra Consulting (Vincent Cloarec)


Feature: Plug mesh layer to QGIS temporal framework

Time handling in mesh layer

The time in a mesh layer is defined by :

  • A reference time provided by the data, the project or the user
  • Each dataset is associated with relative times
  • Time extent is defined by the first time and the last time of all datasets

Reference time : AT Dataset 1 time o-----RT------RT-----RT-----------RT Dataset 2 time o---------RT------RT--------RT Dataset 3 time o------------------------------RT-------RT----------RT Time extent of layer o-----<--------------------------------------------->

  • AT : absolute time (QDateTime)
  • RT : relative time (qint64)

The class QgsMeshDataprovidertemporalCapabilities stores the reference time provided by the data and all the relative times of the dataset. This class has the ability to return dataset index from a dataset group index and a relative time since the reference time. The reference time (which can be different than the provider reference time) and the absolute time extent are stored in the class QgsMeshTemporalProperties

The temporal settings in the properties widget are only the reference time and the provider time unit:

The default reference time of the layer is set by (sorted by priority):

  • From the data provider if defined in data
  • From the project if defined
  • From current date with time 00h00

The user can change it if he wants.

Rendering principle

The 2D and 3D renderers access the active dataset index from the layer with the time range stored in the QgsContextRenderer and in the Qgs3DMapSettings : Relative time is calculated as the difference between the time range of QgsContextRenderer and the reference time stored by QgsMeshTemporalProperties. The dataset index comes from the QgsMeshDataproviderTemporalCapabilities that maps the relative time with dataset index.

The data is brought from the provider with the dataset index.

Static dataset

There is also the option to set a static dataset, that is to choose a dataset that will be rendered independently of the QGIS time controller. To do that the user can check the check box at the bottom of the temporal page of the properties widget: For now, as it was simpler to implement and allows the required dataset to be chosen directly, the user can independently choose scalar dataset and vector dataset from combo boxes with the time associated for each dataset (relative time for data without reference time). If required, a unique time could be implemented but that could lead to inconsistent results with non synchronous datasets. The static dataset settings are in the temporal page but can be easily put in the source page if wanted.

This feature was funded by Lutra Consulting

This feature was developed by Lutra Consulting (Vincent Cloarec)


Feature: Resampling from vertex values to face values

Resampling is available for datasets defined on faces, e.g. the value on vertices is calculated from values on faces.

This feature implements resampling from values on vertices to values on faces using the neighbor average method.

The default method is set to "none" for resampling from vertices to faces and to "neighbor average" for resampling from faces to vertices. Then the default rendering is always smooth.

This feature was developed by Lutra Consulting (Vincent Cloarec)


Feature: Coloring mesh vector dataset with color ramp shader

This feature allows the user to color the mesh layer vector dataset (arrow, stream lines, traces) with the color ramp shader depending on the magnitude of the vector.

This feature was funded by Deltares

This feature was developed by Lutra Consulting (Vincent Cloarec)


Feature: Save style for mesh layer

This feature adds the option for saving a mesh layer style in a qml file, as utilised for vector and raster layers.

The feature also refactors the raster and vector layer properties menu style.

This feature was funded by Artelia Group

This feature was developed by Lutra Consulting (Vincent Cloarec)


Feature: Mesh 1D Renderer

Update to MDAL 0.5.90

Initial implementation of Support of 1D elements in Mesh Layers

1D Meshes consist of vertices and edges. An edge connects two vertices and can have assigned data (scalars or vectors) on it. The 1D mesh network can, for example, be used for modelling an urban drainage system.

There are new options to display 1D mesh (edges) in the mesh frame tab

Also for data on 1D mesh (edges or vertices) there are new options in the contours tab

Note that not all functionality available for 2D meshes is available, notably

  • Support for Mesh Calculator for 1D meshes
  • 3D rendering of 1D meshes
  • Identify and Plots in Crayfish (will be added later in the following PR)

Some functions are not necessary for 1D meshes, especially

  • Export of mesh contours

This feature was developed by Peter Petrik


Feature: Mesh simplification

As a mesh layer could have millions of triangles, rendering can be very slow, especially as all the triangles are displayed in the view even when triangles are too small to be seen.

For those situations, this feature provides an option to simplify the mesh. Simplification leads to one or more simplified meshes that represent levels of detail. When rendering the mesh, the appropriate level of detail is chosen to provide an adequate rendering depending on the view.

A new tab in the mesh layer properties widget allows the user to change the settings :

  • The reduction factor is used to simplify a mesh; the number of triangles for each level of detail is approximately equal to the number of triangles of the previous level of detail, divided by the reduction factor
  • Maximum mesh resolution: this is the average size (in pixels) of the triangles that are allowed to be displayed; if the average size of the mesh is lower than this value, a mesh with a lower level of detail is displayed, i.e. a mesh with an average size just greater than the maximum mesh resolution.

This feature allows the speeding up of rendering as shown in these tables (result in milliseconds) :

Demo GIF Before:

After:

This feature was funded by BMT

This feature was developed by Lutra Consulting (Vincent Cloarec)


3D Features


Feature: Arrows for 3D mesh layer dataset rendering

This feature adds an option for displaying arrows on a mesh layer dataset 3D entity, depending on vector dataset.

The dataset used to render arrows is the one chosen for rendering vectors on 2D rendering.

In the same way, the color of arrows are defined in the 2D rendering settings for vector dataset.

In 3D settings, the user can define the spacing of arrows and if size is fixed or scaled on magnitude.

This spacing setting also defines the maximum size of arrows because arrows can't overlap.

This feature was developed by Lutra Consulting (Vincent Cloarec)


Print Layouts


Feature: Temporal settings for layout map items

This feature adds a collapsible section to the layout map item widget that allows users to enable and set a temporal range to be used when rendering map content.

The start and end datetime value can be data-defined, which comes in handy when used alongside atlas features.

This feature was funded by iMHere Asia

This feature was developed by Mathieu Pellerin


Feature: Allow sorting attribute table by field not listed in the table

Instead of using the same data model for the displayed and the sorting columns, two data models are now used. They use the same API / base class as they are very similar.

This feature was developed by Denis Rouzaud


Feature: Expose control over layer legend splitting behavior on a layer-by-layer basis

This allows users to manually override the legend's default setting for "split layers" on a layer-by-layer basis, by double clicking a layer in the layout legend panel and choosing whether that layer:

  • Follows the default legend setting for splitting
  • Can ALWAYS be split over multiple columns (regardless of the legend's setting)

or

  • Can NEVER be split over multiple columns (regardless of the legend's setting)

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Allow customisation of division and subdivision symbols as distinct from scalebar tick horizontal symbol

Allows for styling division and subdivision symbols in a different way compared with the horizontal line symbol in a tick scalebar

Sponsored by SLYR

Builds off the hard work done by @agiudiceandrea!

This feature was developed by Nyall Dawson


Feature: Allow overriding the default symbol for a legend node

This allows users to (optionally) customise the symbol appearance for a legend node, e.g. to tweak the colors or symbol sizes to better provide a "representative" patch symbol compared with how those corresponding features actually appear on the map.

It's useful for exaggerating symbol widths, or for manually tweaking the colors of semi-transparent symbols so that the colors represent the actual appearance of the symbols when rendered on top of the map content. Or to tweak the marker interval/offset in marker lines so that the markers are nicely spaced in the legend patch.

This feature was developed by Nyall Dawson


Feature: Allow placing manual column breaks in legends

Adds the option when configuring a legend item to place a column break before the item, causing it to be placed into a new column.

This allows user control over the column content, for cases when the automatic column generation doesn't result in the desired results.

This feature was developed by Nyall Dawson


Feature: Add subdivisions in ticks scalebar right segments

Adds the ability to create subdivisions for segments included in the right part of the ticks scalebar.

Line Ticks Up

Line Ticks Middle

Line Ticks Down

Scalebar item properties - Segments groupbox

The behaviour related to the segments on the left side of the scalebar is unchanged.

This feature was developed by Andrea Giudiceandrea


Feature: Allow overriding the legend patch size on a per-item basis

Allows users to override the symbol patch size for individual legend nodes, by double clicking the node

Width and height can be individually overridden, with the node falling back to the default width or height when the override isn't set.

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Allow control over the horizontal spacing before legend group/subgroup/symbols

Gives flexibility to allow "nesting" legend groups/subgroups/symbols and much greater control over legend item placement.

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Manage legend patch shapes through style manager

This update finalises the recent legend patch shape customisation work, by adding in support for custom legend patch shapes to style manager!

Now we just need a really nice set of default patch shapes to ship!!

This feature was developed by Nyall Dawson


Feature: Allow configuring legend patch shapes by double-clicking on legend items

Allows users to set custom legend patch shapes for items by entering a WKT string representing the patch geometry.

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Support pasting pictures directly into layouts

Embeds the pasted picture into the layout.

This feature was developed by Nyall Dawson


Feature: Allow marker items to sync rotation with maps

This allows creation of north arrows from marker symbols, exposing the same options as exist for picture items acting as north arrows.

When a marker acts as a north arrow, the map rotation is ADDED to any existing marker symbol rotation (e.g. if you have to rotate the triangle marker 90% to get it pointing straight up, it will still work nicely in north arrow mode!)

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: New item type for marker symbols

Allows marker symbols to be placed directly on layouts, e.g. for manually placing markers over a map item or for creation of advanced custom legends.

Previously you had to hack support for these, e.g. by drawing rectangles using centroid fill symbols. Much nicer to have a dedicated item type for it, allowing more specific customisation options (coming soon!)

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Add import content from clipboard for fixed table items

A new import content from clipboard feature has been added to QGIS' table editor to enable quicker layout fixed table item editing and creation.

This feature was funded by iMHere Asia

This feature was developed by Mathieu Pellerin


Feature: Add numeric formatter "fraction" style

This style represents decimal numbers as vulgar fractions, e.g. "3/4" instead of 0.75.

Options include using Unicode superscript and subscript characters for nicer typography, e.g. ¹⁷/₂₃ (this is the default mode, disabling this option uses the "17/23" format). An option also exists for using dedicated unicode characters for specific fractions (where a unicode character exists), e.g. ½ or ¾.

Ultimately this allows for creation of scalebars with fractional representations of distances, e.g. 0 ----- ½ ----- 1 km (instead of 0 ------ 0.5 ------ 1km)

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Add "stepped line" and "hollow" scalebar styles

Adds two new scalebar styles (which are available in ArcMap, but previously impossible to reproduce in QGIS)

Stepped line style:

Hollow (aka "South African") style:

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Allow scalebar line style to be set using standard QGIS line symbols

Instead of the previous settings of scalebar line color/width/cap styles, we now expose the option as a full line symbol for more advanced styling.

Also some code cleanups.

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Rework picture item UI and behavior

Adds an explicit choice between SVG or raster image sources, which allows us to clean up the configuration panel for layout pictures by hiding options which don't apply to a certain picture source. Also permits us to:

  • Reuse the standard SVG selector tree widget, which loads images in a background thread
  • Uses the standard SVG and image selector line edit, which permits drag and drop of images and exposes options to embed images and link to online sources

Ultimately this is motivated by a desire to allow users to embed images in layouts and layout templates

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Make CRS controlable by a variable

This makes the Map CRS controllable by a variable.

Related to #34547

This feature was developed by Alex


Expressions


Feature: New expressions

  • ascii
  • make_interval Allows direct construction of interval values from years/months/weeks/days/hours/minutes/second values, without having to construct a string representation of the interval first
  • maptip
  • layer_property('distance_units')
  • display_expression
  • eval_template
  • make_date
  • make_time
  • make_datetime
  • close_line
  • is_multipart
  • geometry Z and M minimum and maximum
  • @frame_number
  • @frame_rate
  • @frame_duration
  • @map_start_time Start of the map's temporal time range (as a datetime value)
  • @map_end_time End of the map's temporal time range (as a datetime value)
  • @map_interval: Duration of the map's temporal time range (as an interval value)
  • @animation_start_time
  • @animation_end_time

This feature was developed by Etienne Trimaille, Jan Caha, Julien Monticolo, Nyall Dawson


Feature: Feature browser for preview in expression builder

This adds a feature browser to the expression builder so one can browse features to see the result of the expression

A new widget is added: QgsFeaturePickerWidget. For the moment, it's a simple combobox (but inherits widget so we can add a map picker button later on). It behaves the same way than the one in the relation reference widget (an editable combobox).

It relies on the same base model (QgsFeatureFilterModel). A new abstract class QgsFeaturePickerModelBase regroups the logic of the, and the new model is called QgsFeaturePickerModel. Basically the QgsFeaturePickerModel used the feature id to identify the features while QgsFeatureFilterModel use a list of attributes (the foreign keys of a relation). It declutters a bit the former model which was quite...cluttered.

As a side note, I tried to use templates for QgsFeaturePickerModelBase, but since templates cannot be mixed with Q_OBJECT, the alternatives sounded like the code would be less readable.

Tests have been added.

Sponsored by the QGIS Swiss User Group!

This feature was developed by Denis Rouzaud


Feature: Ability to remove custom functions

Adds a remove button to the Functions Editor tab in the Expression builder dialog to allow the removal of user functions from QGIS without needing to navigate to the user profile directory.

This feature was developed by Alexander Bruy


Feature: Add ability to edit, import and export user expressions

A new button is added that allows editing of saved expressions. It is only active when a user expression is selected in the expressions tree. When pressed, it opens a window that allows the currently selected user expression to be edited. Changing the label of the expression makes a copy of the currently existing one. Demo

Import/Export

A new button with a menu is added, that allows the import/export of user expressions to/from a JSON file. Clicking on either of the menu entries opens a file selector dialog for the expressions JSON file source/destination. In the case of label conflicts, an additional dialog asks how to proceed - either to overwrite or to skip the current expression. Import/Export Demo

This feature was developed by Ivan Ivanov


Digitising


Feature: Dedicated avoid geometry intersection/overlap mode

This version of QGIS comes with a new dedicated avoid geometry intersection/overlap mode setting when digitizing features.

The three available modes are:

  • Allow intersections/overlaps
  • Avoid intersections/overlaps on active layer
  • Avoid intersections/overlaps on user-defined layers list.
    • The third mode's layers list is setup by the user via the advanced snapping configuration widgets.

This feature was funded by OpenGIS.ch

This feature was developed by Mathieu Pellerin


Feature: New snapping modes: Centroid and middle of a segment (midpoint)

This feature is aimed at improving snapping modes in QGIS by getting closer to the experience of CAD tools.

It adds two new modes. Snapping on the center of a geometry (centroid) and the middle of a segment.

To allow the selection of these new modes, several snapping modes can be selected at the same time.

The order of preference for snapping is as follows: - Vertex, Intersection - Middle - Centroid - Edge - Area

Sponsored by: Qwat group / Ville de Lausanne ( @ponceta @dsavary ) / Oslandia and some spare time

This feature was developed by lbartoletti


Feature: Snapping to the currently digitized feature

Snapping can now also supports snapping to the feature currently being digitised. This option is enabled/disabled a new button in the snapping toolbar.

This enables some really nice CAD-like editing abilities, such as closing features at a 90° angle or precisely aligning segments inside a feature. It's very efficient once one is accustomed to using the alt+a shortcut to lock the angle.

This feature was funded by Kanton Solothurn and Land Vorarlberg

This feature was developed by Olivier Dalang


Feature: Tracing now supports curved geometries

The tracing tool now creates curved geometries when working on a layer that supports curved geometries.

The support is still experimental, so this feature must be enabled in the digitizing options.

This feature was funded by ecoptima and Planteam

This feature was developed by Olivier Dalang (OPENGIS.ch)


Forms and Widgets


Feature: Allow editing of links in file widget

In a form, links can now be edited in the file widget (when the widget is not readonly).

Sponsored by the QGIS Swiss user group

This feature was developed by Denis Rouzaud


Feature: Expression controlled labels (aliases)

This new feature allows form labels (aliases) to be evaluated in the form context.

This feature was funded by ARPA Piemonte

This feature was developed by Alessandro Pasotti


Feature: Add description to value relation widget

Adds an option for adding a description to each value in a value relation widget. The description will show up as tooltip

Please excuse the different languages in the demo video.

This feature was developed by Matthias Kuhn


Feature: New database table name widget

A new widget was added to QGIS to select a new table from an existing DB connection:

This feature was developed by Alessandro Pasotti


Feature: Get current parent form values in child forms

This feature adds the option of using current values from the "parent" form in filter expressions (for now only in value-relation widgets: to be used in drill-down filters).

A new "parentForm" scope was added as well as a new set of functions and variables to access the parent from within an embedded child form. The new functions and variables were modelled on the existing "current_value", "current_feature" etc.

The new functions and variables are also available when the parent form is opened from a new (unsaved, unbuffered) feature, making it easier to create drill-down filters based on the parent's values when adding children from an unsaved parent form.

Example

New functions and variables

Funded by: ARPA Piemonte

This feature was funded by ARPA Piemonte

This feature was developed by Alessandro Pasotti


Feature: Relation widget: add checkbox to hide save child edits button

This is very useful for embedded forms.

Funded by: ARPA Piemonte

This feature was funded by ARPA Piemonte

This feature was developed by Alessandro Pasotti


Feature: Relation widget force suppress popup

Adds an option to the relation widget configuration to suppress form popup open when new features are added in an embedded form context.

This option overrides the form-level option (that might still be the desired behavior when the form is used as a standalone form).

Note: the final label is Force hide form on add feature

This feature was funded by ARPA Piemonte

This feature was developed by Alessandro Pasotti


Layer Legend


Feature: Added move to bottom in layertreeview context menu

Moving around layers on big projects was made easier with Move to top but one still had to manually move basemaps to the bottom of the layer list, a cumbersome task in big layer trees. This feature adds a Move to bottom option to the layer tree context menu that works in the same way as Move to top.

This feature was developed by uclaros


Feature: Make Add Group button act as Group Selected if selected layers >= 2

When there is more than one layer selected and the user presses the Add Group button, create a new group and put the selected layers in it too!

This feature was developed by uclaros


Feature: Allow renaming of the current map theme

This adds the option of renaming a map theme from the map theme drop-down menu.

This feature was developed by Harrissou Sant-anna


Feature: Turn on/off ALL selected layers with "Space" button

Toggles the visibility of the currently selected layers or groups using the space button:

This feature was developed by Ivan Ivanov


Analysis Tools


Feature: Network logger - more functionality

Adds some more useful tools to the network logger:

  • Copy URL
  • Copy request as JSON
  • Save log to file (after a big warning to users that the log may contain sensitive information and should be treated as confidential)

This feature was developed by Nyall Dawson


Feature: Inbuilt network logging tool

This tool, which is available from the new F12 "dev tools" panel, is a native port of @rduivenvoorde's network logger plugin.

It shows a list of ongoing and completed network requests, along with a whole load of useful detail like request and reply status, headers, errors, SSL configuration errors, timeouts, cache status, etc.

Also has loads of polish and useful capabilities, such as the ability to filter requests by URL substrings and status, and you can right-click requests to open the URL in a browser or copy them as a cURL command.

Why do we want this as a native tool instead of a plugin? Well:

  • It's extremely useful, so is nice to have available out-of-the-box
  • By moving it to c++, we can startup the logging process much earlier than a plugin gets the opportunity to. This allows the log to include additional information, such as requests fired off by other plugins which occur before the network logger plugin has been loaded (also other in-built requests, e.g. news feed)
  • Performance has been an ongoing struggle with the Python plugin. While this is about as close as a 1:1 port as you can get, the performance issues have all been magically solved. The classes have some very intensive list operations, which is likely the cause of the poor performance under Python.

This feature was funded by Meteorological Service of Canada

This feature was developed by Nyall Dawson (for Kartoza)


Processing


Feature: Collection of random raster generation algorithms

With this feature we added a large collection of random number raster generation algorithms. The algorithms are capable of outputting random rasters following specific random number distributions. The following distributions are available:

  1. Create random raster layer (binomial distribution)
  2. Create random raster layer (exponential distribution)
  3. Create random raster layer (gamma distribution)
  4. Create random raster layer (negative binomial distribution)
  5. Create random raster layer (normal distribution)
  6. Create random raster layer (poisson distribution)
  7. Create random raster layer (uniform distribution)

This feature was developed by Clemens Raffler


Feature: Vector tile layer - part 8 (writer in Processing)

This feature adds Processing integration for vector tile writing. It is just a wrapper around the existing QgsVectorTileWriter class.

New algorithms in the Processing toolbox:

Algorithm's parameters for XYZ:

Algorithm's parameters for MBTiles:

List of input layers:

Input layer details:

This feature was funded by QGIS Community

This feature was developed by Lutra Consulting (Martin Dobias)


Feature: New modeler algorithm for creating conditional branches

This algorithm allows users to setup multiple conditions (via qgis expressions), which cause their corresponding branch of the model to be run or skipped depending on the result of the expression evaluation.

This feature was funded by Andreas Neumann

This feature was developed by Nyall Dawson


Feature: Allow reordering model inputs

Instead of forcing a quasi-random ordering of inputs for models, this feature exposes a new "Reorder Model Inputs" option in the model designer which allows users control over the exact order of inputs to show users for their model.

No more illogical ordering like showing a field choice before the layer choice it's based on!

Sponsored by NaturalGIS

This feature was developed by Nyall Dawson


Feature: Defer model validation

Instead of forcing all child algorithms to be immediately valid and have all parameters correctly filled, this feature defers model validation until run time or when a new "Validate model" action is triggered.

A common frustration with the QGIS model designer is that it constantly forces models to be valid, even work-in-progress models. This means it’s impossible to add a component to a model and only partially populate its settings — you have to fill in everything upfront. If you realise mid way through this that you need to make a change somewhere else in your model, it’s impossible to do without canceling and losing all the settings you’ve already configured.

This change sees the model validation deferred until run time. Models can be temporarily invalid (e.g. having algorithm components which are only partially configured). The missing required values can now be filled at a later stage, without losing any existing settings. If a non-valid model is run, the user gets a descriptive warning informing them of the changes they need to make in order to finish configuration of the model.

This feature was developed by Nyall Dawson


Feature: Added support for different raster data types in Create constant raster layer algorithm

With this feature we added a new advanced OUTPUT_TYPE parameter for the Create constant raster layer algorithm. Via this parameter, you can now specify an output data type for your constant raster layers.

  • Byte
  • Integer16
  • Unsigned Integer16
  • Integer32
  • Unsigned Integer32
  • Float32
  • Float64

This feature was developed by Clemens Raffler


Feature: Added Round raster algorithm

With this new processing algorithm we enable QGIS to round Raster values.

The main functionality of the algorithm is either standard up/nearest/down-rounding of floating point cell values or rounding to powers of a user specified base n. The algorithm can be used with rasters of all types (even byte/integer rasters when rounding to powers of n) and outputs the same raster data type. A standard floating point rounding of an integer raster will copy it and raise a warning.

The example shows an output raster rounded to multiples of 10

This feature was developed by Clemens Raffler


Feature: Allow copying/cut/paste of model components

This feature allows users to copy and paste model components, both within the same model and between different models

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Allow appending processing results to existing layers

When appending results, users are given a field mapping panel choice to allow them to manually set how fields are mapped to the destination layer's fields:

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Allow creation of group boxes in models

Adds the following functions to the model designer:

  • The ability to customise the color of individual comments in a model
  • Allow creation of "Group Boxes" in models, which are a visual indicator of logically linked model components (e.g. 'Data Preparation Steps', 'NDVI Calculation Steps', ... etc). Users can customise the color and title for group boxes.
  • Allow navigation direct to group boxes from the View menu, aiding navigation of complex models.

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Processing: show input and output values for children after running model through designer

A picture explains this best! After running the algorithm through the designer, you now see the values calculated for the inputs and outputs for each child algorithm:

This is very useful for debugging models -- you can see a much clearer visual picture of the flow of values through the model.

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Add "Save Log to File" algorithm for models

This algorithm saves the contents of the execution log (right up to the point in the model at which the 'save log' algorithm executes) to a file.

It can be used to automatically store the debugging log when running models for later reference and transparency.

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Allow running algorithms directly on database (and other non-disk) sources without loading into projects first

This change allows users to directly browse to non disk-based layer sources for any processing feature source inputs. It allows these inputs to be taken direct from postgres, sql server, oracle, wfs, afs, etc layers directly without having to first load them into a project!

We take full advantage of the QGIS browser to enable this:

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Expose per-feature-source advanced options for processing inputs

This feature exposes per-feature-source advanced options, such as:

  • The ability to limit the number of features read from the source. (Useful in model development, you can easily test run models using a small subset of an input layer)
  • The ability to override on a per-input basis the global processing option for how to handle invalid geometries. Now you can safely leave the default processing setting at the conservative "Stop algorithm execution when a geometry is invalid" setting while easily temporarily overriding this for one particular input!

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Enable snapping to grid for models in designer

This update implements two "snapping" features in the Processing model designer:

  1. Users can enable a new "Enable Snapping" option from the view menu, which will cause all component moving or resizing operations to automatically snap to grids

  2. After selecting some components, users can select Edit -> Snap Selected Components to Grid to manually snap just those selected components.

Additionally, I've added a helpful "select all" action for quickly selecting all components in a model.

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Add "filter by geometry type" and "filter by layer type" algorithms to processing

This update adds two new algorithms to processing:

  • "Filter by geometry type": This algorithm filters features by their geometry type. Incoming features will be directed to different outputs based on whether they have a point, line or polygon geometry. It allows for model creation which responds to different input layer geometry types by applying different logic depending on the input geometry type.

  • "Filter by layer type": This algorithm allows conditional model branching based on an input layer type. For instance, it allows a model to adapt to the actual layer type of a generic "map layer" parameter input, and decide which branch of the model to run as a result.

It also adds in the required API to allow algorithms to "prune" model branches based on their calculated results. For example, a model which returns the new FlagPruneModelBranchesBasedOnAlgorithmResults flag will cause any remaining parts of the model which are dependent on the outputs of that algorithm to be entirely skipped IF the algorithm does not return that particular output. (This is a prerequisite component for a future generic "conditional branching by expression" algorithm, and also used by "filter by layer type" to control the model flow based on the input layer type)

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: "Remove Null Geometries" algorithm can also remove EMPTY geometries

Empty geometries do not contain coordinates. Thus, like null geometries, empty geometries are not spatial data in a strict sense. To make it easier for users to clean a vector layer, the Remove Null Gometries algorithm now has an "Also remove empty geometries" option.

This feature was funded by SwissTierras Colombia

This feature was developed by Germán Carrillo


Feature: Add multi-selection handling to model designer, interactive resizing

Adds:

  • The ability to select multiple items at once in the model designer
  • The ability to resize individual or multiple items
  • The ability to delete multiple selected items
  • Improved model designer "tool" interaction, following the layout designer approach (e.g. alt + space = zoom drag mode, and selection tools follow their counterparts in layouts so shift+selection adds to selection, ctrl+selection removes, etc)
  • Selected items can be moved by the cursor keys

Refs NRCan Contract#3000707093

Here's how it looks in action (with a particular ugly looking test model I use!)

This feature was developed by Nyall Dawson


Feature: Add undo/redo support to model designer

Makes QGIS more forgiving for users!

Refs NRCan Contract#3000707093

Works just like you'd expect:

Note that we save the whole model definition in the undo stack, not just the affected component changes.

This feature was developed by Nyall Dawson


Feature: Remember parameter values between model designer runs

When designing a model, users typically will need to run the model many times as they tweak its structure.

This change causes the parameters used when running the model from the designer to be remembered and saved into the model, so that each time you run the model from the designer you don't have to re-set all the input parameter values to the desired test ones.

Makes iterative model design SO much easier!

Sponsored by Alta Ehf

Also includes a partial port of the model designer dialog from Python to c++, because c++ >> Python.

This feature was developed by Nyall Dawson


Feature: Comments in Processing Models

This allows users to create comments attached to model components (inputs, algorithms or outputs). Comments are shown linked to the associated component, and can be freely moved around the model.

Funded by Fisel + König

This feature was developed by Nyall Dawson


Feature: New standalone console tool for running processing algorithms

This new qgis_process tool allows users to run processing algorithms (both built-in, and those provided by plugins) directly from the console.

Running:

  • qgis_process list will output a complete list of all available algorithms, grouped by provider.
  • qgis_process plugins lists available and activated plugins which advertise the hasProcessingProvider metadata option (only these plugins are loaded by the tool)
  • qgis_process help algid outputs the help and input descriptions for the specified algorithm, e.g. qgis_process help native:centroids

qgis_process run: runs an algorithm. Parameters are specified by a --param=value syntax. E.g.

qgis_process run native:centroids --INPUT="my_shapefile.shp" --OUTPUT="centroids.kml"

or

qgis_process run native:buffer --INPUT=/home/me/my.shp --DISTANCE=20 --OUTPUT=/home/me/buffered.shp

While running an algorithm a text-based feedback bar is shown, and the operation can be cancelled via CTRL+C

Sponsored by the Swedish User Group

This feature was developed by Nyall Dawson


Feature: New parameter type for datetime (or date, or time) values

Adds a new parameter type QgsProcessingParameterDateTime for handling date/datetime/time values.

This feature was developed by Nyall Dawson


Feature: Add algorithms for raising warnings and exceptions from models

These algorithms raise either a custom warning in the processing log OR raise an exception which causes the model execution to terminate.

An optional condition expression can be specified to control whether or not the warning/exception is raised, allowing logic like "if the output layer from another algorithm contains more than 10 features, then abort the model execution".

Sponsored by Fisel + König

This feature was developed by Nyall Dawson


Feature: Add Fill NoData cells algorithm

In the new QGIS version we introduce a new processing algorithm for filling NoData cells in a raster dataset with a constant numerical input.

The algorithm scans an input raster dataset for NoData cells and fills them with the user defined fill value. Doing so, the algorithm respects the data type of the input raster so that e.g. floating point numbers will be dealt with appropriately for an integer raster. The resulting dataset will not contain any NoData cells.

This feature was developed by Clemens Raffler


Feature: Various fixes for Processing

  • Finalize work on range parameters support in GRASS algorithms;
  • Fix broken r.series algorithm
  • Minor fixes to r.rescale and r.rescale.eq
  • Fix for rasterize tool
  • GRASS GIS tests cleanup

This feature was developed by Alexander Bruy


Feature: Show "template layer" field constraints in the "Refactor Fields" algorithm interface

When you are migrating data, it is important to be aware of constraints on target (a.k.a. template) layers.

The "Refactor Fields" algorithm now highlights constraints, and even lets you know more about them via tool-tips.

This feature was funded by SwissTierras Colombia

This feature was developed by Germán Carrillo


Feature: New convert to curves algorithm

We added a new algorithm to convert segmentized geometries to curved geometries.

The algorithm considers successive points to represent a curve if they are evenly spaced and within a tolerance.

This feature was developed by Nyall Dawson


Application and Project Options


Feature: Add @layers, @layer_ids project scope variables

Add @layers, @layer_ids project scope variables which contain lists of map layers and map layers ids for all layers from the current project

This mimics the existing @map_layers, @map_layer_ids, but unlike the @map variants these return ALL project layers, not just those associated with the current context's map settings.

Sponsored by SLYR

This feature was developed by Nyall Dawson


Data Providers


Feature: Allow adding attributes in the New Scratch Layer dialog

Allows the user to add attributes directly in the New Scratch Layer dialog making it more consistent with other dialogs like New Shapefile/Geopackage.

It is still possible to create a scratch layer without any attributes by not adding any fields to the list.

This feature was developed by Alexander Bruy


Feature: Allow creating geometryless DBF tables from the New Shapefile dialog

Allow creating "plain" DBF files without associated geometries from the New Shapefile dialog.

Creating DBF tables can be useful in some cases and having to use third-party tools for this instead of doing it from within QGIS is inconvenient. This also makes the New Shapefile dialog more consistent with the New Geopackage dialog, which already allows "geometryless" tables to be created.

This feature was developed by Alexander Bruy


Feature: Allow filtering WM(T)S list in source dialog

Add ability to filter between lists of WMS or WMTS from the source dialog

WMS

WMTS

Sponsored by the QGIS Swiss user group

This feature was developed by Denis Rouzaud


Feature: Add vector tiles to Datasource manager dialog and Layers menu

Adds a new tab to the Datasource Manager dialog allowing the user to manage/add vector tile connections, including import/export. Also adds a corresponding entry to Layers menu.

This feature was developed by Alexander Bruy


Feature: Import/export for ArcGIS Map and FeatureServer connections

Add missed import/export functionality for ArcGIS MapServer and FeatureServer connections.

This feature was developed by Alexander Bruy


Feature: Add XYZ tiles to Datasource manager dialog and Layers menu

Adds new tab to Datasource Manager dialog allowing to manage/add XYZ connections. Also add corresponding entry to Layers menu.

This feature was developed by Alexander Bruy


Feature: Spatialite transaction group

Transactions implementation for the native SpatiaLite provider.

This feature was funded by ARPA Piemonte

This feature was developed by Alessandro Pasotti


Feature: Allowing saving outputs direct to more database formats (and other nice stuff)

This update allows users to save processing vector outputs directly to more database formats.

Previously outputs could only be written directly to postgres databases. With this change, this functionality has been made more flexible and now supports direct writing to any database provider which implements the connections API (currently postgres, geopackage, spatialite and sql server)

Ultimately this exposes the new ability to directly save outputs to SQL Server or Spatialite databases (alongside the previous GPKG+Postgres options which already existed)

(As soon as oracle, db2, ... have the connections API implemented we'll instantly gain direct write support for those too!)

We do this via a nice inline version of the new "new database table name" widget.

Other nice stuff includes:

  • You can now drag and drop file or folders from explorer or the qgis browser to output parameters in order to easily overwrite these files (or save to the folder), matching the behavior possible with inputs
  • You can actually write scripts which output direct to ANY qgis data provider (including oracle and db2)... it's just that these don't get exposed in the UI because they don't yet support the connections API

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Add dedicated parameter type for database connections

Allows selection from the registered database connections for a specific database provider type (the provider must implement the connections API).

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: PG: expose foreign tables

Expose foreign tables to the browser and data source select dialog.

This feature was developed by Alessandro Pasotti


Feature: PG raster expose set filter to app

This should be the final change to the PG raster data provider and exposes the set filter options:

  • Filter can be set in the data source dialog (as for vector layers)
  • Filter can be set from the legend tree's context menu (as for vector layers)
  • The renderer, the extent and the min/max stats are also updated when the filter changes
  • New tests for the new behavior

This feature was funded by ARPA Piemonte

This feature was developed by Alessandro Pasotti


Feature: Postgres: save features into tables with generated fields

Allow updating/inserting features in PostgreSQL tables with generated fields. GENERATED columns is a feature introduced by PostgreSQL 12, which allows column values to be generated from other columns in the same table; this replaces the creation of triggers to, for instance, automatically populate and keep up-to-date a column of centroids or areas for the polygons in the main geometry column.

This feature was developed by José de Paula Rodrigues N. Assis


Feature: Date and DateTime field types support added to Spatialite and Delimited Text providers

The Spatialite and Delimited Text providers now support Date and DateTime field types.

This feature was developed by Mathieu Pellerin


QGIS Server


Feature: Add QGIS_SERVER_IGNORE_BAD_LAYERS config option

Allows the overriding of the default behavior in the case of bad layers (which is to invalidate the whole project).

When set to TRUE, bad layers are skipped and the remainder of the project becomes available.

This feature was funded by Geoinformatikbüro Dassau GmbH

This feature was developed by Alessandro Pasotti


Feature: Server project settings, add 'expanded' attribute

In addition to the 'visible' and 'mutuallyExclusive' attribute, this update adds 'expanded' to the GetProjectSettings response of the server. The update allows a web client to see which layer tree elements are expanded / collapsed and to then present them the same way in the web map layer list.

This feature was developed by mhugent


Feature: Add DXF server export params NO_MTEXT and FORCE_2D

QGIS server now supports the new parameters NO_MTEXT and FORCE_2D to control text and line symbology for generated DXF files.

Adds missing parameters to GetDxf request.

This feature was developed by Matthias Kuhn


Feature: WMS project validator

The QGIS Server validator has been reviewed. This tool is useful when you want to publish a QGIS project using the WMS protocol.

For programmers, the validator is also now callable from PyQGIS, so plugins can now use it too.

This feature was funded by 3Liz

This feature was developed by Etienne Trimaille


Feature: Webp

WebP is a modern image format that provides superior lossless and lossy compression for images on the web. WebP creates smaller, richer images that make the web faster.

WebP lossless images are 26% smaller in size compared to PNGs. WebP lossy images are 25-34% smaller than comparable JPEG images at equivalent SSIM quality index.

Source: https://developers.google.com/speed/webp

With webp QGIS server now supports a format that provides smaller file sizes for the same quality and even provides transparency.

This feature was funded by OPENGIS.ch

This feature was developed by Matthias Kuhn (OPENGIS.ch)


Plugins


Feature: Allow plugins to register custom "Project Open" handlers

These allow plugins to extend the "Open Project" dialog by adding in support for new file filters, which appear in the formats drop down list alongside the existing "QGS Projects" entry.

Custom project open handlers then get first chance at loading project files.

This allows plugins to extend QGIS support by adding integrated support for opening projects from non QGS/QGZ formats, e.g. allowing users to open ArcGIS MXD documents or MapInfo WOR Workspaces direct from the project open dialog.

These non-native projects are also added to the recent projects list and welcome screen, giving them a truly first-class experience within QGIS.

Sponsored by SLYR

This feature was developed by Nyall Dawson


Feature: Allow users to install stable or experimental plugins

This update improves the plugin manager by allowing users to choose between installing the stable or the experimental version of a plugin.

This makes it possible to have pre-releases of plugins in the repository for power-users to test, while still allowing them to switch back easily to stable versions, without having to untick the global enable experimental option.

This change makes no difference for users who haven't checked the enable experimental option.

This feature was funded by Swiss QGIS User Group

This feature was developed by Olivier Dalang


Programmability


Feature: Support for adding dock widgets as tabs: addTabifyDockWidget()

Dock widgets are great for displaying complex interfaces that extend QGIS functionality.

Now, both core and plugin devs have the option to tabify their dock widgets on top of existing ones. They can even choose on top of which dock widget they want their own dock widget appear.

This feature was funded by SwissTierras Colombia

This feature was developed by Germán Carrillo


Feature: Port output parameter wrappers to new API

Ports the output parameter wrappers (sinks, vector, raster, file and folder destinations) to the new c++ API for dialog and modeler.

This allows a range of new possibilities, including:

  • Models with static outputs for child algorithms, e.g. always saving a child algorithm's output to a geopackage or postgres layer
  • Models with expression based output values for child algorithms, e.g. generating an automatic file name based on today's date and saving outputs to that file

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Port last remaining input parameters to new API

This update ports the Raster Band input parameter and Multi Layer input parameter to the new C++ API.

Benefits include:

  • Expression based band/layer lists in models
  • Inline (non-blocking) lists for multi selection parameters (fields, bands, layer lists, enums)
  • Rearrangement of inputs for multi-layer parameters in models, to set specific layer orders

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Port Feature Source, Raster, Vector and Mesh Layer parameters to new API

It's now possible to use expression-based layer sources in processing models.

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Vector tile layer - part 1

This is the initial work on vector tile layer support.

(The red lines are not rendering artifacts, they are drawn intentionally to show tile borders.)

Summary

So far this only includes changes to the qgis_core library.

Main additions to the public API:

  • QgsVectorTileLayer - the main map layer class
  • QgsVectorTileRenderer - base class for renderer class implementations for vector tiles
  • QgsVectorTileBasicRenderer - default renderer implementation

New private classes (may be added to public API if needed):

  • QgsVectorTileLoader - handles fetching of tiles from network / mbtiles
  • QgsVectorTileMVTDecoder - handles decoding of raw tile data to features
  • QgsVectorTileLayerRenderer - takes care of overall rendering (fetch + decode + draw)
  • QgsVectorTileUtils - various useful functions

Some new classes that may be shared by vector and raster tiles:

  • QgsTileXYZ - position of a tile in tile matrix set (zoom level, column, row)
  • QgsTileRange - rectangular selection in a tile matrix (start/end column and row)
  • QgsTileMatrix - description of a tile matrix (map extent, zoom level, scale, number of rows/columns)

(also QgsTileMatrixSet to be added later when we support other tile matrix sets than just GoogleCRS84Quad)

Testing

You can load a vector tile layer from Python console, e.g.: ds = QgsDataSourceUri() ds.setParam("type","xyz") ds.setParam("url", "https://api.maptiler.com/tiles/v3/{z}/{x}/{y}.pbf?key=YOUR_FREE_API_KEY") uri = bytes(ds.encodedUri()).decode('utf-8') vtl = QgsVectorTileLayer(uri, "Vector Tiles Test") QgsProject.instance().addMapLayer(vtl)

It is also possible to load vector tiles from a local MBTiles file - for "type" use "mbtiles" and for "url" use a local path (e.g. "/home/martin/x.mbtiles").

There is currently no support for labeling.

Thanks

Huge thanks to all funders who have contributed to the crowdfunding and made this possible - https://www.lutraconsulting.co.uk/blog/2020/04/02/vectortiles-donors

This feature was funded by QGIS Community

This feature was developed by Lutra Consulting (Martin Dobias)


Feature: Port processing extent parameter to new api, many other improvements

This update ultimately ports the extent parameter to the new c++ api, but along the way it:

  • Refactors the existing gui widget "QgsExtentGroupBox" to move the guts out to "QgsExtentWidget" (allowing it to be used in places where a group box is inappropriate/looks bad). It also adds a new "condensed" mode for the widget, because the default appearance is very space heavy.
  • The new parameter widget utilises this common QgsExtentWidget, so that we remove all the duplicate code which was previously used by the old python wrapper
  • Allows drag and drop of project map layers from the layer tree to a QgsExtentWidget to auto-set the extent to match
  • Allows QgsExtentWidget to be optionally nullable
  • Allows QgsGeometry values to be set for extent parameter values. This is done to aid use of extent parameters with the "precalculated value" mode in models -- you can now use all the expression geometry functions to calculate a geometry and the bounding box of this is used for the parameter value in the child algorithm

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Feature: Interface and API for unified development/debugging tools

Adds interface hooks to allow plugins (and c++) to register "development/debugging" tools

These tools appear in a new Development/Debugging Tools dock, and provide a unified handling and place for these tools in the UI.

The intention here is that specialised development/debugging tools will be moved to this common interface, e.g.

  • Network logger
  • First aid style Python local variables inspector
  • Startup time debugging tools
  • Layer load and rendering time debugging tools ... ?

Here's an example demo showing a "Python locals" dev tool:

This feature was developed by Nyall Dawson


Feature: Data type support for QgsProcessingParameterMapLayer

Allow the definition of accepted layer types for QgsProcessingParameterMapLayer. This is useful when an algorithm can work with different layer types (for example, points and rasters) and avoids duplication of the same algorithm with different inputs.

This is an API improvement and is not visible for the vast majority of users.

This feature was developed by Alexander Bruy


Feature: Add processing parameter types for database schema and table name

Replaces the previous ad-hoc Python postgis widget wrappers with proper first class c++ dedicated parameters for schemas and tables, with wrappers built off the core connections api.

Refs NRCan Contract#3000707093

This feature was developed by Nyall Dawson


Notable Fixes


Feature: Bug fixes by Alessandro Pasotti

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Getfeatureinfo does not show relation reference items for QGIS Server | #36549 | Turned out to be a feature request | N/A OGR provider QgsOgrProvider::changeAttributeValues returns true on errors | #36583 | PR #36620 | N/A GPKG transaction groups are stored with empty second pair of the key | #36525 | PR #36660 | PR #37157 Symbology using relations does not propagate in QGIS Server | #36614 | cannot reproduce | N/A "Loading PostGIS raster with QGIS 3.12.3 crashes" | #36689 | PR #36702 | not relevant GetFeatureInfo Fid value is different between application/json and application/vnd.ogc.gml | #36262 | PR #36733 | PR #37158 GPKG (and spatialite) DB-level unique constraints are not supported by OGR (and spatialite) provider | #36468 | PR #36802 | N/A no value in the attribute form if value missing in the value map | #32756 | PR #36804 | N/A DB Manager does not show anymore query results | #36205 | PR #36823 | N/A DB Manager does not show anymore query results | #36205 | PR #36831 | N/A GPKG browser drag&drop not working | unreported | PR #36972 | PR #37159 it is not possible to save a project in the geopackage | #36832 | PR #36980 | N/A It is possible to store text into a numeric field, while it shouldn't be, using the Date/Time edit widget | #36715 | #36715 | N/A Feature creation very slow when using joins | #36167 | PR #36866, PR #36963 | N/A QGIS Server: WFS Request does not use SrsName on the geometry | #36398 | PR #36926, PR #37071 | not critical Unable to delete a stored geopackage connection from browser | #36930 | PR #36937 | PR #37166 Constraints: unique constraint not correctly evaluated when 0 | #36962 | PR #36967 | N/A PyQgis: OriginJoin fields arte not present into QgsLayerVector QgsFields container for GeoPackage layers | #36977 | not reproducible | N/A Joined tables cannot be edited even if the "editable join layer" option is checked | #36934 | not reproducible/in progress | N/A Removal of unused 'allowMethod' from qgisservice/qgisserverapi | #36163 | PR #36997 | N/A Omogenize window title | #35761 | PR #36998 | N/A Labeling: data-defined alignment grey-out activation issue | #37003 | PR #37006 | PR #37167 QGIS reports "no layers" in GeoPackage when geopackage directory is write protected | #36574 | PR #37018 | not critical (UX only) Joined tables cannot be edited even if the "editable join layer" option is checked | #36934 | won't fix | N/A Postgis Timestamps from query in DB Manager displayed as `PyQT5.QTCore.QDateTime(2020, 3, 17 | #35140 | PR #37042 | N/A Wrong image preview and image preview size in form | #33682 | PR #37093 | PR #37168 can't change value in vertex editor if "locale" settings use commas as decimal separator | #29682 | PR #37135 | PR #37169 Identifying a WMS layer with format "feature" crashes QGIS | #29443 | PR #37171 | PR #37210 Attempting to create a new feature in Spatialite with transaction group and NOT NULL constraint fails | #37236 | won't fix | N/A Using "Add feature" to create feature and child feature with transaction group causes foreign key error | #37222 | PR #37249 | not critical Vectorlayer from spatialite missing features and inconsistent feature count | #29264 | PR #37277 | TODO

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

This feature was developed by Alessandro Pasotti


Feature: Bug fixes by Loïc Bartoletti

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Fix error when vector layer has Z | #32016 | PR #36553 | PR #36595 Fix rectangle from 3 points | #35043, #35671 | PR #36523 | PR #36560 Allow to search qmlplugindump in different paths | N/A | PR #36513 | N/A Fix the absence of words in the advanced configuration widget | PR #35643#issuecomment-610215386 | PR #36511 | N/A Fix interpolation on split geometry | PR #36514 | #33489 | N/A

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

This feature was developed by Loïc Bartoletti


Feature: Bug fixes by Even Rouault

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Wrong interpretation of EPSG code from a PRJ file in QGIS-dev (proj v7.1.0) | #36111 | PROJ PR 2240 | N/A: PROJ issue QGIS crashes when adding file to geopackage -> layer -> field(BLOB) | #30210 | PR #36722 | PR #36737 Bad error message on WFS connection fail | #29866 | PR #36717 | PR #36735 QGIS crashes during map re-rendering after CRS switch | #29672 | cannot reproduce | N/A QGIS crashes when "open directory" is selected from the recent projects contextual menu | #31630 | PR #36738 | PR #36755 Problem reprojecting rasters in 54019 and 54042 CRSs | #35512 | PROJ PR 2243 | N/A: PROJ issue WFS Provider WARNING - Cannot create temporary SpatiaLite cache when using flatpak install | #36545 | PR #36745 | N/A WFS Transaction operation using GetCapabilities URI | #34307 | PR #36746 | N/A QGis 3.10.2 crashes when displaying two PostGIS raster layers | #34456 | - | N/A QGIS 3.4.10 crashes - Python | #31304 | already fixed in master | PR #36751 WMS provider expects SERVICE=WMTS keyword in uppercase to detect WMTS | #36659 | PR #36752 | PR #36766 WCS DescribeCoverage response origin always empty | #36504 | PR #36754 | PR #36781 Extent wrong if layer contains point at 0,0 | #33823 | Not a QGIS bug. Fixed in GDAL 3.1 | N/A Projection not recognised from Mapinfo converstion | #34471 | PR #36758 | PR #36783 QGIS crashes/freezes when adding a large CSV file as delimited text layer | #36392 | PR #36778 | PR #36810 QGIS 3.12 unknown CRS or Select Transformation | #36837 | GDAL Commit 68133b8 | GDAL Commit 6ae7f60 BIGTIFF error is not obvious in processing log | #36867 | GDAL Commit cfc8e61 | GDAL Commit fb88e3c

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

This feature was developed by Even Rouault


Feature: Bug fixes by Paul Blottiere

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Fix segfault when adding a layer | Mailing list | PR #36910 | N/A Fix signal connection | Unreported issue | PR #35836 | N/A Update the API to export a legend in JSON | Unreported binding issue | PR #36370 | N/A Core dump if vector tile layer (file) becomes unavailable | #36821 | cannot reproduce | N/A Crash on project open when mapcanvas extents = nan | #35899 | cannot reproduce | N/A Using some functions in raster calulator crashes QGIS | #35583 | PR #37273 | N/A Auxiliary storage not usable in non editable layer | #30376 | Already fixed. Closed. | N/A Fix compilation with GCC 10, Qt/PyQt 5.15.0 and SIP 4.19.23 | #37072 | PR #37116 | PR #37250

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

This feature was developed by Paul Blottiere


Feature: Bug fixes by Julien Cabieces

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Reproducible crash using QgsMapCanvas.items() with Oracle layers | #33791 | PR #36240 | PR #36246 Line breaks are ignored in the user expression help panel | #36191 | PR #36249 | PR #36387 "Edit user expression" does not allow to rename the user expression | #36192 | PR #36349 | N/A Cannot change labels of raster symbology classes | #36172 | PR #36376 | PR #36533 Crash when layer not available | #33300 | Cannot reproduce | N/A Select by expression returns erroneous results with integer field division for shapefiles | #35449 | PR #2531 | N/A Using concat(field1, field2) concatenates 0 instead of empty string ('') if any of the fields is NULL | #36112 | PR #36521 | PR #36529 Stuck at Recent Project window when opening blank file in 3.10.3 | #34809 | Cannot reproduce | N/A QGIS crashes on getting items of mapCanvas scene if features are identified | #34457 | PR #36439 | PR #36450 sorting on a column that has a value relation is inconsistent | #36114 | PR #36776 | PR #36887 Missing points (depending on canvas scale) in virtual layer based on sqlite file | #36054 | PR #36792 | PR #36718 Project is modified as soon as you move cursor on canvas | #36796 | PR #36797 | PR #36718 Set filter applied to wrong "version" of table when multiple geometry types | #34982 | PR #36801PR #36718 |

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

This feature was developed by Julien Cabieces


Feature: Bug fixes by Bertrand Rix

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Vertex tool override global snapping parameters | #36229 | PR #36231 | N/A QGIS crashes with QgsGeometry method on empty collection | #36142 | PR #36351 | N/A Selective masking: phantom lines on dark background | #34650 | PR #36697 | N/A Selective masking: issue with mask opacity | #34947 | PR #36697 | N/A

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

This feature was developed by Bertrand Rix


Feature: Bug fixes by Sebastien Peillet

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- [Oracle]Error on save geometries because wrong default values #34482 | #34482 | PR #36769 | N/A Invalid query for default value of date column of an oracle layer | #32401 | PR #36769 | N/A Fields missing in Visibility by expression for a group in drag/drop form | #35196 | PR #36824 | N/A Project custom scales are displayed with scientific notation | #36859 | PR #36860 | N/A Oracle : tables are listed once for Polygons and once for MultiPolygons but both show all geometries | #32521 | PR #34358 | N/A Can't set min/max values to decimal in raster symbology with QGis Linux versions | #33859 | PR #37136 | N/A

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

This feature was developed by Sebastien Peillet


Feature: Bug fixes by Alexander Bruy

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Copy of truncated variable copies truncated text, not original | #30641 | PR #36554 | PR #36576 Turning Multi edit mode off does not go back to table view | #25099 | PR #36541 | PR #36630 GRASS processing: missing parameter name | #36520 | PR #36644 | PR #36690 Fix redirection of the stdout results to temporary files in GRASS Processing algorithms | unreported | PR #36618 | PR #36684 Fix GRASS r.tileset algorithm | unreported | PR #36645 | PR #36695 QgsRasterTerrainAnalysisPlugin: check QgsRelief::processRaster() returned value | #17452 | PR #36731 | PR #36740 Histogram for graduated style in layer properties disappears when the layer properties window is too small | #25197 | PR #36732 | PR #36749 Exporting image with atlas option "Save World file" lead to incorrect world file naming (text after dot is missing) | #34523 | PR #36742 | PR #36748 "Reloading QGIS" from the crash report dialog fails to reopen the project | #25532 | PR #36736 | PR #36750 Exporting raster style to SLD only works when output file has .sld suffix | #35944 | PR #36774 | PR #36795 [Style Manager] Missing Favorites category in the "select by group" dialog from "Export symbols" | #27315 | PR #36793 | not critical TIN Interpolation - output raster format and size issues | #31970 | PR #36822 | PR #36844 Layer panel: "Edit Symbol" does nothing if no symbol defined for a rule (in rule-based rendering) | #23048 | PR #36954 | not critical Attributes shift in the Service area algorithm results | unreported | PR #37074, PR #37097 | N/A Processing testing framework does not apply rounding to values casted to numbers | unreported | PR #37234 | N/A

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

This feature was developed by Alexander Bruy


Feature: Bug fixes by Nyall Dawson

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Fix leak in mesh 3d renderer| unreported| Commit 4b5a63d| N/A Fix hang when rendering symbol previews using Meters in Map Unit sizes| #28690| Commit 7c6286f| No -- too intrusive Fix font in CSS code editor| unreported| Commit 63cb42c| not critical Fix rendering of geometry generator expressions which return geometry collection results| #35356| Commit be281c49| No -- too intrusive [processing] Correctly expose date time inputs (and a bunch of others) as inputs for in-model expressions| #37219| Commit 281356a| N/A Fix all Qt 5.14 deprecation warnings| unreported| Commit 3717adc| No -- too intrusive [symbology] When rendering a multipart geometry, ensure that geometry generator symbol is only rendered once, instead of once per part| #23730| Commit d98fe9f| No -- too intrusive [layout] Make "show feature count" button apply to all selected indexes| #37194| Commit 671cebc| No -- too intrusive Fix for container "show as group box" setting is lost when closing layer properties dialog| #37205| Commit 803f507| N/A Use even more forceful language to dissuade users from creating custom projections using Proj strings| #37204| Commit 7ec4968| No -- string change Use "markers" terminology consistently in centroid fill widget| #37106| Commit 2596b6b| No -- string change Fixes to numbered list handling in dox/PyQGIS API| unreported| Commit 74400c7| No Fix cross references in PyQGIS docs| unreported| Commit 81a9db9| No [layouts] Fix attribute table sort order combined with feature filter results in empty tables| #36341| Commit 24897ab| N/A Fix callout rendering to rotated labels| #36681| Commit 2bb4aad| N/A Fix grass output handling in Processing models| #36379| Commit ef19911| Fix vector datasets incorrectly simplify to rectangles in some CRS views| #36898| Commit 47fba10| No -- too intrusive Fix list item formatting in PyQGIS docs| unreported| Commit 84ec481| N/A [processing] Fix manual entry of extent values in widget| #36787| Commit ccc34c7| N/A [decorations] Use a proper ellipsoidal length calculation when calculating the size of the scalebar decoration| #28407| Commit af19cea| PR 36718 Commit a91309d Fix collecting Triangle geometry types after tesselation| #36638| Commit df46fba| No -- too intrusive Fix writing triangle geometry type via QgsVectorFileWriter fails| #36638| Commit e0c03f9| No -- too intrusive Fix degradation in Tesselation results| #37077| Commit 61e7a5f| N/A Fix layer subset string is ignored when OGR refuses to accept a compiled feature request expression| #37073| Commit b5b4221| PR 36718 Commit f486cf6 [legends] Fix corrupted data defined legend rendering in layout designer| #36765| Commit 8d00ae8| No -- too intrusive Avoid some QGIS startup warnings| unreported| Commit 013f682| N/A Place 3d tab in vector properties at the correct position| #35010| Commit ce9f5194| N/A Fix 3d tab is not activated when reopening vector layer properties| #35011| Commit 3c0ecbf| N/A [labeling] Fix incorrect label placement after moving an 'unplaced' label| unreported| Commit cbfb7f4| PR 36718 Commit 9189dec Don't block creation of new geopackages in vector save as dialog| unreported| Commit 8ccd127| N/A [browser] Refine refreshConnections method to avoid triggering a full refresh of ALL browser content| #37007| Commit a9d6b04| No -- too intrusive [3d] When showing edges, data defined polygon height was not accounted for| unreported| Commit e516231| N/A Fixes for "Show all" labeling mode| unreported| Commit 2b91bd0| N/A [3d] Fix reprojection of features shows no features| #34824| Commit 62bd026| N/A [processing] Add metadata setting for file destination parameters to avoid file overwrite confirmation prompt| #37011| Commit e81af2c| N/A Avoid incorrectly antialiasing rendering of certain objects (such as map labels) when not wanted| #36964| Commit bab83844| No -- too intrusive Ensure that fields required by marker symbol backgrounds for labels are fetched when rendering| #36944| Commit 8fb8e45| No -- too intrusive "Fix ""zoom"" and ""flash"" features buttons have no effect when opening filter mode in attribute form"| #34506| Commit 6b2795| N/A Avoid corrupted project thumbnail images in some circumstances| unreported| Commit f404e6e| N/A Auto focus search box when opening "add layer to legend" dialog| #36905| Commit 019e494| not critical [processing] Set correct output layer type for Point to Layer algorithm| #36941| Commit 7ee85cd| N/A "Limit scope of Ctrl+C shortcut for copy features to canvas and for python console to console widget"| #27035 (many others too)| Commit 873716c| No -- too intrusive Remember layout designer window positions| #36907| Commit 97d31d0| not critical Fix crash when zooming in too far to labels| #36346| Commit 3aa5e56| Commit a22635b [processing] Allow parent layer to be specified for field mapping inputs in models| #26493| Commit b8d4a39| No -- too intrusive Fix placement of message bar 'clear all' menu arrow on hidpi screens| unreported| Commit 8a9975b| not critical Always refresh plugin repositories when manually triggered by user| #34351| Commit 98603b7| PR 36718 Commit 0fcf6dc [3d] Expose 3d algorithms provider to Python| #36661| Commit 1f835df| No -- too intrusive [symbology] Don't force rasterized output when exporting point pattern fills| #16100| Commit 23396b7c| No -- too intrusive [layouts] Don't refresh the map canvas multiple times during atlas exports| #30144| Commit 57519e9| not critical [processing] Fix double-evaluation of warp output parameter| #30095| Commit adeca2f| Fix incorrect warning message when turning off atlas preview| unreported| Commit 3b0af960| N/A Speed up message bar operations when many messages are shown| #29698| Commit 5dd29f0| No -- too intrusive Fix oriented minimum bounding box calculation is wrong in some cases| #36632| Commit 97d0988| PR 36718 Commit 68c6a0e Ensure symbol opacity is always ignored for selections| #27859| Commit 4de6a53| PR 36718 Commit 99eb710 Fix random sort order of symbols in Symbol Export dialog| #20572| Commit 987310f| PR 36718 Commit bfa6058 Allow clearing heatmap weighting field| #20256| Commit 3961fa2| PR 36718 Commit d2600d6 Flag SAGA 'Merge Layers' algorithm as having known issues| #36375| Commit f676c821| N/A Workaround odd upstream Qt issue where a painter with a semi-transparent brush with no solid pattern incorrectly applies the brush opacity to the pen when exporting to printer devices| #36580| Commit 38c8218| PR 36718 Commit a562b67 Improve plugin watchdog message and UX| unreported| Commit 150b373| No -- too intrusive "[layouts] Warn when previewing an atlas and a feature with no geometry is encountered, when one or more maps are set to be driven by atlas feature"| #36556| Commit 6ce84d2| No -- too intrusive Avoid proj 'object is not a concatenated operation' warnings| unreported| Commit 6baa209| "Fix memory layers lose CRS definition if it does not have an authority associated with it"| #36241| Commit e23a49a| PR 36718 Commit c9350eb Implement spatial index detection for OGR provider| #30530| Commit f20801a| PR 36718 Commit 536906e Fix incorrect dialog title for raster layer properties| #35510| Commit 2099261| PR 36718 Commit e809f48 Don't try to identify CRSes created just for ellipsoid definitions| unreported| Commit 15b318b| No -- too intrusive

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

This feature was developed by Nyall Dawson


Feature: Bug fixes by Denis Rouzaud

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- allow sorting attribute table by field not listed in the table | #25671 | PR #36236 | N/A fix layer tree dependencies (showinf symbols and main layer) | unreported | PR #37000 | N/A fix Expression editor: syntax check fails if table is empty | #37100 | PR #37137 | N/A fix setting of feature in expression preview widget | #37214 | PR #37221 | N/A Freeze when showing attribute table of WFS layer | #37224 | not yet fixed | N/A Lookups in tables with more than 100 entries show wrong value in Relation Reference form parts | #37266 | PR #37280 | PR #37286

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

This feature was developed by Denis Rouzaud