Project: QGIS

Changelog for version: 3.12

Release date: 21 February, 2020


If you are after new features and a ton of bug fixes, this release will have you smiling from ear to ear! QGIS 3.12 adds rich new capabilities to almost every part of QGIS. From label masks to a native PG Raster provider to incredible new mesh layer capabilities, and much, much more, this release has something for everyone. As always, we would like to remind you that QGIS is an open-source project and if you are able to, consider supporting our work through donations, sponsorship or contributions to the code documentation, web site and so on.

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 sponsors. 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 sponsor, please visit our sponsorship page for details. Sponsoring QGIS helps us to fund our six monthly 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.12


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 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

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

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

OSGeo:UK

OSGeo:UK

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)

Spatial Networks, Inc.

Spatial Networks, Inc.

Terraplan

Terraplan

WIGeoGIS

WIGeoGIS

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.

Agresta S. Coop.

Agresta S. Coop.

Alta ehf

Alta ehf

Asociación Geoinnova

Asociación Geoinnova

Asociación Geoinnova

Asociación Geoinnova

BGEO Open GIS, SL

BGEO Open GIS, SL

BGEO Open GIS, SL

BGEO Open GIS, SL

BNHR

BNHR

Bathurst Regional Council

Bathurst Regional Council

Bathurst Regional Council

Bathurst Regional Council

Baumsicht

Baumsicht

Baumsicht

Baumsicht

CADaGEO

CADaGEO

CHARTWELL Resource Group Ltd.

CHARTWELL Resource Group Ltd.

CHARTWELL Resource Group Ltd.

CHARTWELL Resource Group Ltd.

CartoData

CartoData

City of Canning

City of Canning

Datarock Pty Ltd.

Datarock Pty Ltd.

Datarock Pty Ltd.

Datarock Pty Ltd.

Dr. Kerth + Lampe Geo-Infometric GmbH

Dr. Kerth + Lampe Geo-Infometric GmbH

EFN eifel-net Internetprovider GmbH

EFN eifel-net Internetprovider 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.

GIS Support Sp. z o.o.

GIS Support Sp. z o.o.

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

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

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

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

Gaia3D, Inc.

Gaia3D, Inc.

Gaia3D, Inc.

Gaia3D, Inc.

Gispo Oy

Gispo Oy

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

Ingenieurbüro Reinhard Beck GmbH & Co. KG

Ingenieurbüro Reinhard Beck GmbH & Co. KG

Integrate Sustainability Pty Ltd

Integrate Sustainability Pty Ltd

K + D Landschaftsplanung AG

K + D Landschaftsplanung AG

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

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.

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

QTibia Engineering

QTibia Engineering

Raumplanung | Stadtplanung ZT OG

Raumplanung | Stadtplanung ZT OG

Region Midtjylland (Central Denmark Region)

Region Midtjylland (Central Denmark Region)

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)

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

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

Septima

Septima

Sherborn Forest Trails

Sherborn Forest Trails

Solargis s.r.o.

Solargis s.r.o.

Spacescape AB

Spacescape AB

Studio Bereikbaar

Studio Bereikbaar

Syddjurs Kommune

Syddjurs Kommune

Syddjurs Kommune

Syddjurs Kommune

TYC GIS

TYC GIS

Tasmanian Planning Commission

Tasmanian Planning Commission

TerreLogiche

TerreLogiche

TerreLogiche

TerreLogiche

Trage Wegen vzw

Trage Wegen vzw

Trage Wegen vzw

Trage Wegen vzw

Urbsol

Urbsol

Västra Götalandsregionen

Västra Götalandsregionen

WAGNER-IT

WAGNER-IT

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

map-site

map-site

thinkWhere

thinkWhere

tur gmbh

tur gmbh


Map Tools


Feature: QgsMapLayerAction: add legend context menu entry for action on selection

A new menu entry (Actions on selection) is added to the layer tree context menu. It is shown only when required (layer has selection and actions can be run on the given layer).

This feature was developed by Denis Rouzaud


Feature: Show distance from GPS lock position to current cursor

When a GPS device is connected, whenever the user moves the cursor over the canvas a live status bar message displays the distance and bearing from the cursor to the GPS fix position.

Project distance and bearing settings are respected in this display.

This feature was developed by Nyall Dawson


Feature: Add setting for format to show angular bearings to projects

The Settings - Options - Map Tools tab contains a new setting for controlling the default format to use for displaying angular bearings for newly created projects. Whenever a new project is created, it will inherit this default setting.

The Project Properties dialog also has a new setting for the project-specific bearing format.

The intention is that whenever angular bearings are shown in QGIS, they will be formatted using the current project's bearing format settings. In this PR I've done this for the status bar pan direction message. Also includes lots of nice API additions providing a stable, easy to discover place for setting and retrieving settings like the bearing format.

This feature was developed by Nyall Dawson


User Interface


Feature: Deselecting tables when adding PostgreSQL data after add button is clicked.

When adding PostgreSQL data in Data Source Manager after pressing the add button QGIS should deselect previously selected tables.

This feature was funded by Kartoza

This feature was developed by Samweli Mwakisambwe


Feature: Show the total pan distance and bearing in the status bar

We added the total pan distance and bearing in the status bar during canvas pan operations. Allows users to know exactly how far (and in what direction) they've dragged the map.

This feature was developed by Nyall Dawson (North Road)


Feature: New option to set the default project file format (qgs/qgz)

This adds a new global option to define the preferred project file format

This feature was funded by GEM foundation

This feature was developed by Denis Rouzaud


Feature: Fix invalid attributes dialog on copy to another layer

It's possible to copy features from one layer to another. If there are the same fields in the destination layer, then the attributes for them are taken from the original feature. If not, the default value is taken. Otherwise, the new attribute is null.

If the destination layer has constraints on the fields, these should be fulfilled now or disregarded on purpose. But not just copied invalid like it used to do.

That's why now the attributes are checked against the constraints. And for all the invalid features a dialog pops up.

And on pasting only one feature, the options are reduced:

This feature was developed by signedav


Feature: Allow dropping a map layer from the layer tree onto a projection selection widget

...to set the projection to match that layer. Just a little timesaving shortcut!

This feature was developed by Nyall Dawson


Feature: Processing raster calc: add missing btns and validate

Add missing buttons for ABS/MIN/MAX and validate expression.

This feature was developed by Alessandro Pasotti


Symbology


Feature: Vector Trace Animation and Streamlines for Mesh Layer

Mesh vector renderer now can visualize streamlines and particles on top of existing "arrow" mode.

This feature was funded by TUFLOW

This feature was developed by Vincent Cloarec (Lutra Consulting)


Feature: Selective masking

A new advanced rendering feature has been added: selective masking. It allows the definition of 'masks' areas around labels or point markers. These masks will "un-draw" only some symbol layers of other layers underneath, chosen by the user.

This feature was funded by QGIS.CH and others through a cofunding campaign

This feature was developed by Hugo Mercier (Oslandia)


Feature: When decimal degrees rotation fails to evaluate, fallback to static value

The legend finally also works nicely with data defined rotation. QGIS could already apply data defined rotation to symbols and individual symbol layers, but this resulted in a broken legend. The rotation of symbols (and symbol parts defined on symbol layers) on the legend can now be controlled by changing the default values next to the data defined properties.

The old behavior was to always fall back to 0 in case of a failing expression. Which made it hard to create a proper legend in some cases.

e.g. if you had two symbol layers with the following expressions for their rotation

"orientation"

And

90 + "orientation"

which would be two orthogonal symbol layers (e.g. denote a right angle), rotated by an orientation field.

Now in the legend (and symbol preview), both layers would be shown with a rotation of 0, because there is no associated feature with a field orientation.

The new behavior is to fall back to the static, configured values which makes it very intuitive to configure the legend for these cases.

Before

After

This feature was developed by Matthias Kuhn


Feature: Add density-based point count for the random marker fill

This feature adds a density-based point count method to the new random marker fill.

This feature was developed by Mathieu Pellerin


Feature: Random marker fill symbol layer type

This commit adds a new fill symbol layer type "Random marker fill". It allows polygon features to be rendered using a marker symbol placed at random locations within the polygon boundary.

Options include:

  • number of marker symbols to render for the polygon
  • whether markers rendered near the edges of polygons should be clipped to the polygon boundary or not
  • an optional random number seed, to give consistent placement of markers whenever maps are refreshed (also allows random placement to play nice with QGIS server and tile-based rendering)

This feature was funded by SLYR

This feature was developed by Nyall Dawson (North Road)


Feature: Add option to set color for rendering nodata pixels in raster layers

Allows raster nodata pixels to be colored in a specific (non-transparent) color. Designed to match the "Display background value" option from ArcMap.

This feature was funded by SLYR

This feature was developed by Nyall Dawson (North Road)


Labelling


Feature: Allow to delete custom label position

We added new possibility to delete custom label position by pressing DEL key when moving the label.

This feature was developed by Denis Rouzaud


Diagrams


Feature: Paint effect support for diagram renderer

this new feature allows for diagrams to use paint effects, including drop shadows, outer glows, etc...

This feature was funded by SLYR

This feature was developed by Nyall Dawson (North Road)


Feature: New diagram type "stacked bars"

With this new feature users will have possibility to create stacks bars of varying colors for each attribute on top of each other vertically or horizontally. Designed to match the "Stacked" chart renderer option available in ArcGIS.

This feature was funded by SLYR

This feature was developed by Nyall Dawson (North Road)


Feature: Spacing option for vector layer bar chart diagrams

Allows for user-controlled spacing between each bar in the chart.

This feature was funded by SLYR

This feature was developed by Nyall Dawson (North Road)


Feature: New option to control pie diagram angular direction

This feature allows to control whether the sections are rendered in a clockwise or counter-clockwise direction.

This feature was funded by SLYR

This feature was developed by Nyall Dawson (North Road)


Rendering


Feature: Play/Stop Buttons for Mesh Layer Playback

It is possible to switch the timeframes of mesh layer's datasets by play/stop button. The playback setting could be adjusted in the time setting dialog.

This feature was funded by Lutra Consulting

This feature was developed by Lutra Consulting


Feature: On the Fly Resampling of Data Defined on Faces to Vertices (Mesh Layer)

For datasets defined on faces, one can choose to interpolate data to vertices with neighbour average method. When no data interpolation method is chosen, each pixel on a single face has a single value/color. With data on vertices, the rendering for each pixel is interpolated from the values on the vertices, making smoother figures.

Use mesh contours styling panel to switch between the data interpolation methods.


Feature: Support for Mesh Reference Time

For various dataset type, for example GRIB and NetCDF, the reference time in QGIS time settings dialog is prepopulated from the raw data and does not need to be set manually. Also we fixed various bugs related to time parsing, so in QGIS 3.12 it should be possible to format and show your time in plots/animations in proper way.

If there is a valid time reference provided with dataset groups, this time reference is used to displaying time (using absolute time). If there is no reference time provided, the time is displayed using relative time, and a time reference can be set by the user to display absolute time. When no time reference is provided, the default one is the current date + time set with 00:00:00. A push-button is added to reload the reference time provided with dataset groups if needed.

It also adds a new feature to let the user set the time unit of the provider with a combo box if this time unit is different than hours.

This feature was funded by TUFLOW

This feature was developed by Vincent Cloarec (Lutra Consulting)


3D Features


Feature: 3D Mesh Layer Terrain Renderer

It is possible to render the mesh layer in the 3D view as terrain.

The user can choose those enable/disable smooth triangles and wireframe. It is possible to choose the line width and the line color of the wireframe, change the vertical scale and choose the style of the rendering (unique color or color ramp shading).

There are two entries to render the mesh layer in the 3D view : - choose the mesh as the terrain in the config widget - activate the 3D view in the layer properties.

The user can choose those settings - enable/disable smooth triangles - enable/disable wireframe - choose the line width and the line color of the wireframe - change the verticale scale - choose the style of the rendering : unique color or color ramp shading - settings the color ramp shading as for raster layer

For now, the mesh can be rendered as a TIN but rendering dataset is not supported. However, the infrastructure is adapted for a future round of work.

This feature was funded by TUFLOW

This feature was developed by Vincent Cloarec (Lutra Consulting)


Feature: Load 3D vector layer data in background + tiling

This adds support for background loading of data from vector layers into 3D map views. Until now, loading (and tessellation) would freeze the GUI completely - this could take many seconds depending on the complexity of input data.

The basic vector layer renderer and rule-based renderer were converted to use QgsChunkedEntity which is already used for terrain rendering. There are two more improvements in addition to unlocking of GUI: - loading process is multi-threaded instead of using just a single core - loading is done in tiles - so it is possible to see the tiles with 3D data appearing while other data are still being loaded

There is a new configuration option in 3D tab of vector layers - it determines how deep will be the quadtree. For example, one zoom level means there will be a single tile for the whole layer. Three zoom levels means there will be 16 tiles at the leaf level (every extra zoom level multiplies that by 4, so I have limited GUI to max. 8 levels which gives ~16K tiles which is already a lot).

How a vector layer's tiling quadtree gets populated: all internal tree nodes are empty and thus the 3D map scene tries to immediately replace them with their children - this goes until leaf nodes are reached. Only nodes at the leaf level currently hold any data. This may change in the feature when we introduce more elaborate strategies - for example, internal nodes may contain a small percentage of features of the child nodes (this would allow us to show something while zoomed out a lot, not requiring to load all data).

For debugging purposes, there is also a new configuration option "show bounding boxes". This allows you to see bounding box of each tile (especially useful if there are some issues with tiles not showing up when they should).

This feature was funded by QGIS.org grant.

This feature was developed by Martin Dobias


Print Layouts


Feature: Allow drag and drop of pictures onto map layouts

This new feature allows user e.g. drag an svg from a file explorer onto the layout to create a new picture item containing that svg image.

This feature was developed by Nyall Dawson (North Road)


Feature: New layout item type: manually created fixed tables

This new item type allows for the creation of tables with contents manually entered by users (i.e. spreadsheet-style) so that users can create completely custom tables. Supports control custom cell contents, foreground and background colors (and soon, preset row and column heights). A brand new table designer dialog has been added which allows for customization of these tables.

This feature was funded by City of Canning

This feature was developed by Nyall Dawson


Feature: Add user control over scalebar numeric formats

You now have the option for controlling the numeric format used by a layout scalebar.

You can manage all the formatting properties for the numbers in scale bars, including whether they want a thousand separator, decimal places, scientific notation, etc. Very useful in the case of making maps for audiences outside of the current QGIS locale, or when you'd just prefer to vary the style from the locale defaults (e.g. adding thousands separators when the locale default is to hide them).

This feature was developed by Nyall Dawson


Feature: Allow layout attribute tables to be styled using the foreground and background colors of matching conditional styles

When the new "Apply layer conditional styling colors" option is enabled in the layout attribute table settings, any conditional styling rules present in the layer will be applied inside the layout attribute table (foreground and background colors only, for now!).

This feature was funded by City of Canning

This feature was developed by Nyall Dawson


Feature: Add search box to layout manager

Allows filtering the list of layouts in a project by name, handy when a project has many layouts..!

This feature was developed by Nyall Dawson


Expressions


Feature: Search Tags for Functions

Tags on static expression functions to make them more retrievable. Functions like array_to_string are listed when the user enters "split" or "convert" or - like before - a part of the function name.

This feature was funded by SwissTierras-Colombia

This feature was developed by David Signer (OPENGIS.ch)


Feature: List Referenced Layer Values

When a field is a RelationReference, ValueRelation and ValueMap, there is the possibility not only to show the values of the current layer but also the possible values in the referenced layer / configured possibilities.

This feature was funded by SwissTierras-Colombia

This feature was developed by David Signer (OPENGIS.ch)


Feature: New expressions

  • is_empty(geom), check if a geometry is empty (geometry that contain no coordinates)
  • is_empty_or_null(geom), check if a geometry is empty or NULL (does not have geometry)
  • hash, cryptographic hashes functions using QCryptographicHash. Use case is the same as PgCrypto but in client side for all supported format.

This feature was developed by Loïc Bartoletti (Oslandia)


Feature: New algorithm "Rename table field"

Takes an input layer, existing field and a new name for the field, and outputs a new layer with the selected field renamed.

While this result could also be achieved with the Refactor Fields algorithm, Refactor Fields isn't particularly model friendly. It relies on a constant, fixed table structure, and can't adapt to input tables with different field structures.

In contrast, this simple Rename Field algorithm adapts nicely for model use, because it operates on a single field only and leaves all the other fields untouched.

This feature was developed by Nyall Dawson


Feature: Stored expressions

  • Store user expressions (with context/category, just like recent expressions)
  • Clear editor icon/action

See also QEP https://github.com/qgis/QGIS-Enhancement-Proposals/issues/135

This feature was funded by Salvatore Fiandaca

This feature was developed by Alessandro Pasotti


Feature: List referenced layer values in Expression Builder

When a field is a RelationReference, ValueRelation and ValueMap, there is the possibility not only to show the values of the current layer but also the possible values in the referenced layer / configured possibilities.

age is a ValueMap, species is a ValueRelation and island_id is a RelationReference

In the example we have the persons: George (in Cuba, in his twenties, human) Paul (in Vietnam, in his thirties, human) Ringo (in Venezuela, in his forties, cat) John (in Vietnam as well, in his forties, table) And the entries in the country layer are USSR, Cuba, Vietnam, Burma, Venezuela, North Korea

This feature was developed by signedav


Feature: Add expression functions for converting to/from wkb

  • geom_from_wkb( geom_to_wkb( make_point(4,5) ) ) → a point geometry object Returns a geometry created from a Well-Known Binary (WKB) representation.

  • geom_to_wkb( $geometry ) → binary blob containing a geometry object Returns the Well-Known Binary (WKB) representation of a geometry as a binary blob.

Adds geom_from_wkb and geom_to_wkb, which mirror the existing geom_from_wkt/geom_to_wkt functions but for WKB representations of geometries.

Since QGIS 3.6 we've had good support for binary blob values in expressions and field values, so adding these functions allows users to work with binary blob fields containing WKB representations of geometries (e.g. with a geometry generator showing the encoded geometries)

This feature was funded by SLYR

This feature was developed by Nyall Dawson (North Road)


Feature: is_valid expression

  • is_valid(geom_from_wkt('LINESTRING(0 0, 1 1, 2 2, 0 0)')) → true Returns true if a geometry is valid; if it is well-formed in 2D according to the OGC rules

Add an is_valid function to the expressions, which reuses GEOS is valid and returns true if a geometry is valid; if it is well-formed in 2D according to the OGC rules.

Based of @NathanW2 workshop at FOSS4g Oceania. I have tested the function manually and confirmed the tests pass, however I can't get my build to produce the help files to check if this or correct. I"m not sure if "Uses GEOS" is needed in the help file.

I'm a python dev not C++ so any help will definitely be appreciated Thanks

This feature was developed by Pete King


Feature: Add datetime_from_epoch (MSec from epoch) expression function

  • datetime_from_epoch(1483225200000) → 2017-01-01T00:00:00 Returns a datetime whose date and time are the number of milliseconds, msecs, that have passed since 1970-01-01T00:00:00.000, Coordinated Universal Time (Qt.UTC), and converted to Qt.LocalTime.

Adds a function to create a DateTime from a seconds since epoch timestamp, to be used in expresssions As there is an 'epoch' function working in MilliSeconds (and the original Qt function also does MilliSeconds, I create it to use mSecs).

This feature was developed by Richard Duivenvoorde


Feature: rotate() expression function

  • rotate($geometry, 45, make_point(4, 5)) → geometry rotated 45 degrees clockwise around the (4, 5) point Returns a rotated version of a geometry. Calculations are in the Spatial Reference System of this geometry.

This feature was developed by Raymond Nijssen, Nyall Dawson


Feature: allow to seed random functions

  • rand(10, 80, 1) → 30 Returns a random integer within the range specified by the minimum and maximum argument (inclusive). If a seed is provided, the returned will always be the same, depending on the seed.
  • randf(10, 80, 1) → 19.37136508087729 Returns a random float within the range specified by the minimum and maximum argument (inclusive). If a seed is provided, the returned will always be the same, depending on the seed.

This PR adds an optional seed parameter to rand() and randf() functions, as per issue #20630 This is very useful if you want the result to be deterministic, for instance to assign random but fixed colors to features. Using color_hsb(rand(0,360,$id),50,50) for instance yields always the same color for the same feature. By the way, the PR also improves the rand() function, which didn't work for high values (over 32000) by using Qt's QRandomGenerator instead of qrand (which it seems was deprecated in Qt 5.11).

This feature was developed by olivierdalang


Feature: Language support for format_date() and to_{date,datetime,time}()

  • format_date('2012-05-15','d MMMM yyyy','fr') → '15 mai 2012'
  • format_date('2012-05-15','d MMMM yyyy','it') → '15 maggio 2012'
  • format_date('2012-05-15','d MMMM yyyy','en') → '15 May 2012' Formats a date type or string into a custom string format. Uses Qt date/time format strings. See QDateTime::toString.

By default, those expression use the application's locale. The addition of an optional language parameter allows handling of dates that wouldn't match that default locale (say for e.g. an English system running QGIS trying to transform a French-formatted string into a date object).

This feature was developed by Mathieu Pellerin


Digitising


Feature: Edit Invalid Attributes on Copy/Paste to Another Layer

On copy-paste features from one layer to another, in case there are constraints (e.g. not null) on the destination layer, that cannot bee fulfilled automatically by default values, a dialog pops up to fix the invalid attributes or disregard the constraints on purpose.

This feature was funded by Amt für Wald und Wild Zug

This feature was developed by David Signer (OPENGIS.ch)


Feature: Snapping cache parallelization

In previous version of QGIS, the snapping index cache was built sequentially and you had to wait for all your layers to be indexed before starting edition. Thanks to the QGIS.org grant program, QGIS now builds the snapping index cache in parallel for each layer, so it speeds up the whole process. Snapping has also been relaxed, meaning that you don't have to wait for the cache to be complete, you can start editing and snapping information will appear as soon as they are ready.

This feature was funded by QGIS.org

This feature was developed by Julien Cabieces (Oslandia)


Data Management


Feature: DXF Export Improvements

We did a revamp of the DXF export process. This solidifies the export process and offers new features.

  • Styles of geometries are exported and blocks are used
  • The Z coordinate of 3D geometries are preserved
  • Labels are exported with their anchor points and horizonal and vertical alignment or quadrant settings respected

The whole DXF export process has also been made ready for running in a thread. With this in place, it's now only one step away from being sent to the background, allow cancellation of an ongoing export process or being exposed as a processing algorithm.

This feature was funded by Kanton Schaffhausen

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


Forms and Widgets


Feature: Create geometric feature from the relation editor

We added the ability to add a new feature and digitize its geometry directly from within the relation editor widget. It's now easier to add a geometric feature related to your currently displayed parent feature.

This feature was funded by QWAT user group

This feature was developed by Julien Cabieces (Oslandia)


Feature: Improve feature selection dialog

From the relation editor widget, you can link your currently displayed feature with existing features. The feature selection dialog allows you to choose these features. Thanks to the QWAT user group, feature selection is now shared with the canvas' one so it is easy to find out and pick the feature you want to link. We have also added the ability to filter displayed features (selected ones, visible on map, matching an expression...) reusing the same widgets already existing in attribute form.

This feature was funded by QWAT user group

This feature was developed by Julien Cabieces (Oslandia)


Feature: UX improvments in drag'n'drop form designer

The drag'n'drop form designer has received some nice UX improvements

  • The two lists (available fields and layout tree) are now synchronized: whenever you select an entry in a list, the matching item is selected in the other one.
  • Hidden config dialogs (under double-click) have been brought to the right panel

This feature was funded by QGIS.org bugfixing

This feature was developed by Denis Rouzaud, OPENGIS.ch


Layer Legend


Feature: Support for displaying WMTS legend graphics in layer tree

We added support for displaying WMTS legend graphics directly in the layer tree, as is already the case with WMS legend graphics.

Example:

Sample use case: https://wmts10.geo.admin.ch/EPSG/2056/1.0.0/WMTSCapabilities.xml

This feature was developed by Sandro Mani


Analysis Tools


Feature: Smooth Export of the Contours from Mesh Layer

A new algorithm in QGIS’s analysis library API to export directly contour lines and polygons is added. The method is not based on GDAL algorithms, but directly uses mesh layer triangular mesh interpolation methods. It is both fast and with smooth shapes, matching rendered images from QGIS. You can try the new processing algorithm in Crayfish processing toolbox.


Feature: Support of Datasets Defined on Faces in QGIS Mesh Calculator

You can use mesh calculator for all dataset types, both defined on faces and vertices. Additionally, it allows users to store the result of mesh calculator under different name or format. This allows for example to work with FLO-2D or HEC-RAS data in the QGIS mesh calculator


Processing


Feature: Package new layers to existing GeoPackage

We improved the existing package layers processing algorithm to be able to add new layers to existing GeoPackages. All you need to do to make use of this is disable the OVERWRITE parameter and specify an existing GeoPackage.

This feature was funded by BikePlan

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


Feature: Fuzzy Logic - Fuzzfiy Raster (linear membership)

The Fuzzify raster (linear membership) algorithm is a native implementation of a fuzzy logic algorithm. It transforms an input raster to a fuzzified raster and thereby assigns values between 0 and 1 following a linear fuzzy membership function. The value of 0 implies no membership with the defined fuzzy set, a value of 1 depicts full membership. In between, the degree of membership of raster values follows a linear membership function.

This feature was developed by Clemens Raffler


Feature: Fuzzy Logic - Fuzzfiy Raster (power membership)

The Fuzzify raster (power membership) algorithm is a native implementation of a fuzzy logic algorithm. It transforms an input raster to a fuzzified raster and thereby assigns values between 0 and 1 following a power fuzzy membership function. The value of 0 implies no membership with the defined fuzzy set, a value of 1 depicts full membership. In between, the degree of membership of raster values follows a power membership function.

This feature was developed by Clemens Raffler


Feature: Fuzzy Logic - Fuzzfiy Raster (small membership)

The Fuzzify raster (small membership) algorithm is a native implementation of a fuzzy logic algorithm. It transforms an input raster to a fuzzified raster and thereby assigns values between 0 and 1 following the 'small' fuzzy membership function. The value of 0 implies no membership with the defined fuzzy set, a value of 1 depicts full membership. In between, the degree of membership of raster values follows the 'small' membership function. The 'small' function is constructed using two user-defined input raster values which set the point of half membership (midpoint, results to 0.5) and a predefined function spread which controls the function uptake.

This feature was developed by Clemens Raffler


Feature: Fuzzy Logic - Fuzzfiy Raster (large membership)

The Fuzzify raster (large membership) algorithm is a native implementation of a fuzzy logic algorithm. It transforms an input raster to a fuzzified raster and thereby assigns values between 0 and 1 following the 'large' fuzzy membership function. The value of 0 implies no membership with the defined fuzzy set, a value of 1 depicts full membership. In between, the degree of membership of raster values follows the 'large' membership function.The 'large' function is constructed using two user-defined input raster values which set the point of half membership (midpoint, results to 0.5) and a predefined function spread which controls the function uptake.

This feature was developed by Clemens Raffler


Feature: Fuzzy Logic - Fuzzfiy Raster (gaussian membership)

The Fuzzify raster (gaussian membership) algorithm is a native implementation of a fuzzy logic algorithm. It transforms an input raster to a fuzzified raster and thereby assigns values between 0 and 1 following the 'gaussian' fuzzy membership function. The value of 0 implies no membership with the defined fuzzy set, a value of 1 depicts full membership. In between, the degree of membership of raster values follows the 'gaussian' membership function. The gaussian function is constructed using two user-defined input values which set the midpoint of the gaussian function (midpoint, results to 1) and a predefined function spread which controls the function spread.

This feature was developed by Clemens Raffler


Feature: Fuzzy Logic - Fuzzfiy Raster (near membership)

The Fuzzify raster (near membership) algorithm is a native implementation of a fuzzy logic algorithm. It transforms an input raster to a fuzzified raster and thereby assigns values between 0 and 1 following the 'near' fuzzy membership function. The value of 0 implies no membership with the defined fuzzy set, a value of 1 depicts full membership. In between, the degree of membership of raster values follows the 'near' membership function. The near function is constructed using two user-defined input values which set the midpoint of the near function (midpoint, results to 1) and a predefined function spread which controls the function spread.

This feature was developed by Clemens Raffler


Feature: Port Densify by count Algorithm to C++

We ported the Densify by count algorithm to C++ in order to enhance it's speed when compared to the previous Python implementation. The new algorithm also exposes the count parameter as dynamic parameter so that it can be controlled by expressions or field values.

This feature was developed by Clemens Raffler


Feature: Port Random points in extent algorithm to C++

We ported the Random points in extent algorithm to C++. This boosts it's speed when comparing it to the previous Python implementation. The new algorithm also exposes an advanced parameter of maximum numbers of retrys for the algorithm when searching for randomly placed points that respect a certain distance between all points.

This feature was developed by Clemens Raffler


Feature: Line density algorithm

In this version we added a native algorithm to calculate the raster based density of lines. This algorithm calculates the line density based on a search radius and weights of the lines inside the search radius. The algorithm was ported to provide more functionality form the ArcGIS Spatial Analyst extension in QGIS.

This feature was developed by Clemens Raffler


Feature: New algorithm "Repair Shapefile"

We added a new algorithm which uses GDAL to repair shapefiles which have a broken or missing .SHX file.

This feature was developed by Nyall Dawson (North Road)


Feature: Add new algorithm "Detect Dataset Changes"

This algorithm compares two vector layers, and determines which features are unchanged, added or deleted between the two. It is designed for comparing two different versions of the same dataset.

When comparing features, the original and revised feature geometries will be compared against each other. Depending on the Geometry Comparison Behavior setting, the comparison will either be made using an exact comparison (where geometries must be an exact match for each other, including the order and count of vertices) or a topological comparison only (where are geometries area considered equal if all of the their component edges overlap. E.g. lines with the same vertex locations but opposite direction will be considered equal by this method). If the topological comparison is selected then any z or m values present in the geometries will not be compared.

By default, the algorithm compares all attributes from the original and revised features. If the Attributes to Consider for Match parameter is changed, then only the selected attributes will be compared (e.g. allowing users to ignore a timestamp or ID field which is expected to change between the revisions).

If any features in the original or revised layers do not have an associated geometry, then care must be taken to ensure that these features have a unique set of attributes selected for comparison. If this condition is not met, warnings will be raised and the resultant outputs may be misleading.

The algorithm outputs three layers, one containing all features which are considered to be unchanged between the revisions, one containing features deleted from the original layer which are not present in the revised layer, and one containing features add to the revised layer which are not present in the original layer.

This feature was developed by Nyall Dawson


Feature: New mode to "Join Attributes by Location" to take attributes from matching feature with largest area of overlap only

This allows for easy polygon->polygon joins, where you expect there to be only a single matching feature and don't want to include features which are just touching or have just tiny sliver polygon overlaps.

This feature was funded by SMEC/SJ

This feature was developed by Nyall Dawson


Feature: Add native affine transform algorithm for vectors

Offers the following benefits over the GRASS/SAGA versions: - Full support for z/m values and handling curved geometries without loss of curves - Works with all native data types, no need for format transformation - Supports dynamic (data defined, per feature) translate/scale/rotate parameters - Allows transformation and scaling of both Z and M values (if present) - Supports in-place edit mode

Fixes #33550

This feature was developed by Nyall Dawson


Feature: add gdal_viewshed algorithm

Expose new gdal_viewshed tool via Processing toolbox. Note: this requires GDAL >= 3.1.

This feature was developed by Alexander Bruy


Browser


Feature: Customization of the items shown in browser

Add customization of the items shown in browser to the Interface Customization dialog. User can hide some of the root items in the browser panel (e.g. Favourites, PostGIS provider, MSSQL, Oracle, Volumes, ...)

This feature was funded by Limerick City and County Council

This feature was developed by Peter Petrik (Lutra Consulting)


Feature: Show html files in browser panel

this feature allows .htm(l) files to be shown and opened from the browser panel. These are often used to document data files or mapping projects.

This feature was developed by Nyall Dawson (North Road)


Feature: Show "Open Document..." action in browser

When right clicking certain files in the browser, allowing them to be opened with the default external application for that file type

E.g. PDFs will open with the default external PDF viewer.

Works with PDF, ODS, XLS(X), CSV, TXT, PNG, JPEG, TIFF, SVG (other types will likely need more work, since they aren't currently shown in the browser).

This feature was developed by Nyall Dawson (North Road)


Feature: Allow customization of the items shown in browser

You can now customize items shown in the browser. User can decide (in the Interface Customization dialog) to hide some of the root items in the browser panel (e.g. Favourites, or POSTGIS provider, ...)

This feature was funded by Limerick City and County Council

This feature was developed by Peter Petrik


Feature: Add Refresh action to OGC services

You can now refresh OGC services in the browser. Below is a screenshot showing an example of how this function works in WMS/WMTS connections:

This feature was developed by Samweli Mwakisambwe


Data Providers


Feature: Changed WMTS layer collection icon

This was a change of the icon used for WMTS layer collection item, a database schema was used instead of a WMTS related icon. A general WMS icon is now used.

This feature was funded by Kartoza

This feature was developed by Samweli Mwakisambwe


Feature: Added Metadata URL property in the layer metadata tab for WMS / WMTS and WCS services

This feature was funded by Kartoza

This feature was developed by Samweli Mwakisambwe


Feature: Fetch and show dimensions metadata for a WMS layer metadata

This feature was funded by Kartoza

This feature was developed by Samweli Mwakisambwe


Feature: Added refresh action to OGC services entries

This feature was funded by Kartoza

This feature was developed by Samweli Mwakisambwe


Feature: 3d Stacked Meshes

MDAL and QGIS now supports 3D Stacked Meshes, particularly for TUFLOW-FV format. For this release, you need to choose appropriate averaging method in the QGIS interface and you are able to browse the data similarly to any other 2D dataset.

This feature was funded by TUFLOW

This feature was developed by Peter Petrik (Lutra Consulting)


Feature: Fix numerous shapefile encoding issues

This fixes the (broken by design?) handling of Shapefile encoding, which has been an ongoing issue for years in QGIS.

See discussion at

  • #21264
  • http://osgeo-org.1560.x6.nabble.com/Shapefile-with-file-cpg-codepage-td5275106.html
  • http://osgeo-org.1560.x6.nabble.com/QGIS-ignore-the-cpg-files-when-loading-shapefiles-td5348021.html

(+ others!)

The situation was that we had two different code paths for handling GDAL side attribute decoding OR QGIS side decoding. Unfortunately, they are both incompatible with each other, and due to GDAL API for this, we can't unify the two approaches. (More technical detail in the commit log message!)

So, now we: - always do the decoding on QGIS' side. This allows users to manually override a shapefile's declared encoding because they are often incorrect! - use a port of GDAL's shapefile detection logic (it's not exposed in GDAL API, so I had to re-implement it here) so that we default to reading shapefiles by respecting the embedded encoding information (via CPG files or DBF LDID information) - Completely remove the confusing/broken "Ignore shapefile encoding declaration" option, as it's no longer required -- users are ALWAYS able to manually change the encoding of shapefiles layers if needed - Always show users the detected embedded encoding in the layer properties, instead of always showing "UTF-8" when the embedded encoding information is used

This should give the best of both worlds -- a nice default behavior resulting in shapefiles being read with the correct encoding, whilst still allowing users to override this on a layer-by-layer basis as needed.

This feature was developed by Nyall Dawson


Feature: Oracle curve type edition support

In earlier versions of QGIS, it was not possible to edit some geometry types coming from an Oracle database. We have then added edition support for the following geometry types: - CircularString(Z) - CompoundCurve(Z) - MultiCurve(Z) - CurvePolygon(Z) - MultiSurface(Z)

This feature was funded by Lille Metropole

This feature was developed by Julien Cabieces (Oslandia)


Feature: MBTiles raster support in WMS provider

This feature adds MBTiles tiled raster map support to WMS provider so that it uses the same code paths like WMTS or XYZ tiles.

Why move away from GDAL implementation? Here are the advantages of the approach through WMS provider: - correctly scaling tiles on high dpi display - better look when not zoomed to the native resolution of the tiles. WMS provider uses smooth scaling while GDAL uses nearest neighbor by default. - map tile showing up while rendering (with GDAL it's blank map until everything is loaded) - possible to use tile scale slider dock widget - faster - mainly a side effect of loading fewer tiles on high dpi display

This feature was developed by Martin Dobias


Feature: Native PostGIS raster data provider

This is an implementation of a PostGIS raster data provider in QGIS core. Tiles are cached in RAM memory.

This feature was funded by Christmas Holidays Inc.

This feature was developed by Alessandro Pasotti


Feature: Show dimensions metadata on WMS layer metadata

This feature was developed by Samweli Mwakisambwe


Feature: Other average methods 3d mesh

QGIS now includes numerous methods for averaging mesh layers (see related QEP, and for a description of the methods see TUFLOW documentation.

  • SingleLevelAverageMethod (top)
  • SingleLevelAverageMethod (bottom)
  • MultiLevelsFromTopAveragingMethod
  • MultiLevelsFromBottomAveragingMethod
  • SigmaAveragingMethod
  • DepthAveragingMethod
  • HeightAveragingMethod
  • ElevationAveragingMethod

This feature was developed by Peter Petrik


Feature: OGC API - Features provider

This new provider is a client-side implementation of the recently adopted OGC API - Features - Part 1: Core specification, previously known as WFS3. It is integrated within the graphical user interface of the WFS provider, and leverages its core mechanisms to offer background downloading of features, using paging, and a local cache of already downloaded features for a smoother interactive use of datasets.

This feature was funded by Planet

This feature was developed by Even Rouault (Spatialys)


QGIS Server


Feature: QGIS Development Server Application

QGIS Development HTTP Server

This is a small independent command-line application that implements a minimal HTTP development server for QGIS Server.

It can be useful when developing and testing QGIS Server projects, modules, and plugins without requiring a full webserver/FCGI stack.

The application is completely independent it does not introduce any change in the existing QGIS code, for this reason, I'd like to merge it for 3.12 even if we are in feature freeze.

```bash Usage: qgis_mapserver [options] [address:port] QGIS Development Server

Options: -h, --help Displays this help. -v, --version Displays version information. -l Sets log level (default: 0) 0: INFO 1: WARNING 2: CRITICAL -p Path to a QGIS project file (.qgs or .qgz), if specified it will override the query string MAP argument and the QGIS_PROJECT_FILE environment variable

Arguments: addressAndPort Listen to address and port (default: "localhost:8000") address and port can also be specified with the environment variables QGIS_SERVER_ADDRESS and QGIS_SERVER_PORT ```

Sample output: bash QGIS Development Server listening on http://localhost:8000 CTRL+C to exit 127.0.0.1 [lun gen 20 15:16:41 2020] 5140 103ms "GET /wfs3/?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test_project.qgs HTTP/1.1" 200 127.0.0.1 [lun gen 20 15:16:41 2020] 3298 2ms "GET /wfs3/static/jsonFormatter.min.js HTTP/1.1" 200 127.0.0.1 [lun gen 20 15:16:41 2020] 1678 3ms "GET /wfs3/static/jsonFormatter.min.css HTTP/1.1" 200 127.0.0.1 [lun gen 20 15:16:41 2020] 1310 5ms "GET /wfs3/static/style.css HTTP/1.1" 200 127.0.0.1 [lun gen 20 15:16:43 2020] 4285 13ms "GET /wfs3/collections?MAP=/home/ale/dev/QGIS/tests/testdata/qgis_server/test_project.qgs HTTP/1.1" 200

This feature was developed by Alessandro Pasotti


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: Add json support to WMS GetLegendGraphic

This PR adds support for GetLegendGraphic responses encoded as JSON. It builds on previous work by @pblottiere, who added QgsLegendRenderer::exportLegendToJson for that exact purpose.

For example a GetLegendGraphic request with FORMAT=image/png producing the image

will produce the following with FORMAT=application/json

The icon image is encoded in base64, and directly displayable in a web page.

This feature was developed by Éric Lemoine


Programmability


Feature: Exposes shape digitizing methods to QgisInterface

The actions to trigger the drawing tools were not exposed in the API, if you wanted to do an action for one of these tools, you had to recreate classes. So a call of the type qgis.utils.iface.actionCircleCenterPoint().trigger() simplifies programmability.

This feature was funded by QWAT/QGEP group

This feature was developed by Loïc Bartoletti (Oslandia)


Notable Fixes


Feature: Bug fixes by Stephen Knox

Bug Title | URL issues (if reported) | URL PR or commit -- | -- | -- Allow editing of postgres JSON fields from Text Edit Widget | #29361 | #30758

This feature was developed by Stephen Knox


Feature: Bug fixes by Alessandro Pasotti

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- "Recent" Group do not appear when opening the "Select by expression" dialog | #33791 | PR #33922 | PR #33922 QGISserver cannot find shp; tries to open absolute instead of relative path | #33200 | PR #33925 | risky unreported: wrong link in server WFS3 items page (too many slashes) | unreported | PR #33926 | risky Qgis scans raster tables on connection to postgis | #33885 | PR #33922 | PR #34288 Layer Properties Information tab - formatting problems | #33862 | PR #33955 | PR #34289 Can't set min/max values to decimal in raster symbology with QGis Linux versions | #33859 | works for me in current master | QgsVectorLayer readStyle does not read scale based visibility | #33840 | PR #33987 | PR #34289 Categorized symbolization does not work on bigint columns in QGIS | #33585 | PR #33992 | PR #34290 QGIS fails to apply style file to rasters | #29427 | no change required, but still investigating | copy / paste feature does not work correctly for MultilinestringZ | #33977 | works for me in current master | Edit Form shows and saves raw default-values from geopackage, spatialite or sqlite | #33383 | PR #34012 | PR #34298 Not possible to uncheck layers in Order Panel | #33854 | PR #34015 | PR #34288 PostgreSQL identity column not recognized properly | #29560 | PR #34017 | PR #34291 Spatialite provider does not recognize autoincrement PKs when table definition uses backticks | #34085 | PR #34012 | PR #34298 QGIS crash when I click on the button "Manage Map Themes" | #33295 | PR #34090 | PR #34098 QGIS Server - WMS Request GetPrint fails with ATLAS_PK | #30817 | works for me in current master | QGIS 3.10.2 replace 0 to NULL | #34118 | PR #34152 | PR #34292 Representation for NULL values inconsistent use/display | #28643 | PR #34157 | PR #34293 DB Manager in 3.11 Master can't connect to PostGIS Enabled database | #34132 | PR #34171 | N/A QGIS doesn't respect OGC guidelines for KVP parameters | #34148 | PR #34175 | PR #34294 QGIS 3.10 can't find pkey of postgres views | #34167 | PR #34179 | PR #34295 Duplicating a scratch layer ignores added fields | #34134 | PR #34199 | PR #34203 QGIS master project XML is invalid | #34218 | PR #34219 | PR #34297 Full row conditional formatting formats wrong full rows | #34122 | PR #34305 | PR #34315 filter expression error returns true | #34259 | PR #34309 | PR #34512 Fields are shifted when importing a layer with an FID attribute into GeoPackage | #32927 | PR #32934 | N/A "split features" of PostGIS layers become slow since 3.6 | #34326 | closed: cannot reproduce with any of the (several) provided datasets | Cannot add/save more than 1 record/feature in a Spatialite layer/table | #34379 | PR #34423 | PR #34513 QGIS crashes when changing "default value" in layer property on a point scratch layer, after editing feature | #34404 | PR #34428 | PR #34514 Raster calculator turns one row of pixels into nodata | #34435 | PR #34460 | PR #34511

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

This feature was developed by Alessandro Pasotti


Feature: Bug fixes by Sandro Santilli

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- repository files modified by 'make check' | #25830 | Runs of testsuite leaves hundreds of directories in ~/.local/share | #34185 | Commit 96a7fb8 | N/A Drop use of deprecated QgsCoordinateReferenceSystem constructor | PR #34186 | Commit b4fa419 | N/A Only look for pointcloud in its installed extension schema | #33509 | Commit 1f44b29 | N/A QGIS 3.10 unable to load PostGIS-table on MacOS Catalina | #32558 | Commit d15ce6b | Commit a06b164

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

This feature was developed by Sandro Santilli


Feature: Bug fixes by Even Rouault

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Crash when applying wrong filter to OAFeat layer | #33878 | PR #33927 | PR #33958 Oracle provider: fix compiler warnings | - | PR #33930 | - Cannot import 3D vector into Spatialite datasource (works for GPKG) | #33883 | PR #33938 | PR #33945 [Oracle] Fix MultiSurface with straight polygon | - | PR #33959 | not doable Geometries stored in Oracle table fail sdo_geom.validate_geometry_with_context(..) check | #29085 | PR #33959 | not doable QGIS WFS / OGC API – Features not showing list typed attributes correctly | #33758 | PR #33983 | N/A Legend causing a crash | #32913 | PR #34004 | PR #34063 Draw effects units setting doesn't persist | #34089 | PR #34135 | PR #34151 Bad georeferencing of OZI .map | #34299 | GDAL commit | -

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

This feature was developed by Even Rouault


Feature: Bug fixes by Alexander Bruy

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Remove verbose wording on layout toolbar buttons | #30161 | PR #33912 | Unable to paste a layer in an empty project | #26710 | PR #33961 | PR #33965 DB Manager: Create Layer dialog should be closed or cleared once the new layer is generated | #25535 | PR #33910 | Two different default shortcuts for the Layer styling panel (F7 vs Ctrl+3) | #26696 | PR #33984 |

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

This feature was developed by Alexander Bruy


Feature: Bug fixes by Paul Blottiere

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Fixes compilation on Archlinux | Unreported | PR #34110 | PR #34146 Move labels doesn't work with GPKG QGIS 3.4 | #30408 | Closed (works on master and 3.10) | - Auxiliary storage not usable in non editable layer | #30376 | Feedback (works on master and 3.10) | - Labels Buffer DD options do not have fields set and do not render in map canvas | #28544 | PR #34153 | risky QGIS does not load embedded layers when opening projects | #34060 | PR #34311 | PR #34706 Embedded layers are duplicated after opening | Unreported | PR #34311 | PR #34706 Raise log level of server exception | Discussed on qgis-developers list | PR #34256 | PR #34539

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

This feature was developed by Paul Blottiere


Feature: Bug fixes by Denis Rouzaud

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Crash with relations | #33120 | PR #34255 | - Crash with relations V2 | #33120 | PR #34403 | done Fix map layer actions rendering in attribute table | PR #34266 | done DnD improvements (sync selections) | #28570 | PR #34411 | TODO? DnD improvements (container config) | #29063 | PR #34433 | DnD improvements (do not hide behind double click) | #29063 | PR #34479 | disable browsing auto pan/scale in attribute table when showing visible features only | #34486 | PR #34493 |

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

This feature was developed by Denis Rouzaud


Feature: Bug fixes by Julien Cabieces

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Snapping and vertex tool not working with some layers if snapping was enabled when loaded | #33449 | PR #33757 | N/A Snapping not possible in new project with new layer | #32969 | Duplicate | - Vertex Tool cache not refreshing after changes to line features | #33947 | Won't fix | - "fill ring" do not trigger the correct computation of the area in the "default value" expression | #32377 | Closed (fixed in 3.10 and master) | - "view feature form" opens the wrong feature/record | #33880 | PR #34009 | TODO setFilterExpression and QGIS Filter output different results | #33454 | Closed (not a QGIS issue) | - Crash while using Oracle views with primary key defined as number without precision | #31626 | PR #34312 | TODO WCS client stopped working on a specific service from 2.18 to 3.x | #33339 | PR #34300 | TODO Crash in relation reference test | #34779 | PR #34822 | TODO

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) -- | -- | -- | -- Snapping and vertex tool not working with some layers if snapping was enabled when loaded | #33449 | PR #33757 | N/A Snapping not possible in new project with new layer | #32969 | Duplicate | - Vertex Tool cache not refreshing after changes to line features | #33947 | Won't fix | - "fill ring" do not trigger the correct computation of the area in the "default value" expression | #32377 | Closed (fixed in 3.10 and master) | - "view feature form" opens the wrong feature/record | #33880 | PR #34009 | TODO setFilterExpression and QGIS Filter output different results | #33454 | Closed (not a QGIS issue) | - Crash while using Oracle views with primary key defined as number without precision | #31626 | PR #34312 | TODO WCS client stopped working on a specific service from 2.18 to 3.x | #33339 | PR #34300 | TODO Crash in relation reference test | #34779 | PR #34822 | TODO

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

This feature was developed by Bertrand Rix


Feature: Bug fixes by Loïc Bartoletti

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Close vertex for line when editing | #32359 | PR #34217 | PR #34285 Fix Grass linking on FreeBSD | reported on FreeBSD ML | PR #34088 | PR #34238 [Regular Shape] Allow undo click when digitizing new features | #25597 | PR #34080 | PR #34302 Remove Added Vertex with Add Circular String | #29688 | PR #34058 | PR #34301 Rubberband not working correctly with "Shapes" digtizing in rotated map window | #33287 | Duplicate | Digitizing: LineStringZ does not inherit Z-coordinates from points if line starts by snapping to a point with no Z coordinate | #33201 | PR #33642 | PR #33951 Split feature makes QGIS 3.4.6 crash | #33408 | Already fixed | Fix oriented minimum bounding box algorithm | #33532 | PR #34334 | PR #34338 error with returned angle by orientedMinimumBoundingBox() | #31371 | Closed. Lacks of feedback | Fix build with txt2tags >= 3.5 | directly reported by FreeBSD qgis maintainer | PR #34377 | PR #34389 Fix identify menu when an expression is used as display name | unreported | PR #34361 | PR #34402

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

This feature was developed by Loïc Bartoletti


Feature: Bug fixes by Sebastien Peillet

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Extend line does not work in compoundCurvedZ layer | #32080 | PR #34055 | Feature attribute selection design bug | #29542 | PR #34359 | Unable to add a new feature when joining two PostGIS tables | #33148 | PR #34216 | Copy/Paste fails from one layer to another when layer has NOT NULL constraints and transaction groups are enabled | #29603 | Already fixed by PR #33688 | QGIS freezes when creating new shapefiles | #32069 | Already fixed | Oracle : tables are listed once for Polygons and once for MultiPolygons but both show all geometries | #32521 | PR #34358 | BUG: fix invalid layer result when Oracle version is under 12 | unreported | PR #34546 |

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

This feature was developed by Sebastien Peillet


Feature: Bug fixes by Nyall Dawson

Bug Title | URL issues.qgis.org (if reported) | URL Commit (Github) | 3.10 backport commit (GitHub) -- | -- | -- | -- Fix IN/NOT IN evaluation with very long number like strings | #34314 | Commit 167e0de | Commit aca059a [processing] Define Layer Projection tool should write .prj files using ESRI WKT1 format | #34007 | Commit f41dd11e | Submitted Show 'unknown CRS' in status bar instead of blank text when project is set to an unknown CRS | #33458 | Commit c6319b2 | Submitted Don't force users to make a choice in the datum transform dialog | #34234 | Commit 644a552 | Submitted Fix crash when changing raster data source | #34231 | Commit caf334e6 | Commit b4142c3 Handle unit type "m" in custom WKT strings on proj 6 builds | #34196 | Commit bb20cee | Commit 97c50f9 Show full CRS WKT for custom CRS in layer properties | #33862 | Commit 19d58bda | Commit 2908227 [processing] Fix modeler draws lines to wrong output when connecting green output boxes | Unreported | Commit 5ae9807 | Commit 528a45d [processing] Fix Points Along Geometry handling of multipart geometries | #34022 | Commit 3fb18a2 | Commit ac3b446 [processing] Fix QStringList values are not accepted as valid values for multi-field parameters | Unreported | Commit abcb8d2 | Commit d421313 [processing] Fix some field names are rejected in modeler for non-multi field parameters | Unreported | Commit 9bcd980 | N/A - 3.12 only Fix crash in server feature info | Unreported | Commit b3f37fde | Submitted Fix overflow by assigning double max to float, invalid min | Unreported | Commit 2b15e255 | N/A - 3.12 only Fix crash in QgsGeometryDuplicateCheck due to heap use after free | Unreported | Commit 195576e | Commit dc647bc Fix crash on destruction of QgsPointLocator, if object is destroyed while indexing is happening in the background | Unreported | Commit 08adb23 | N/A - 3.12 only Fix crashes when reading certain resampled raster files | #33711 | Commit b2c5a45 | Commit 388277e Fix use after free in 3d point symbol | Unreported | Commit df7979c | Commit 7204de2 Fix leaks in geometry generator symbol layer | Unreported | Commit 1610fb8 | Commit 3944db4 Fix crash in rendering on proj 6 builds | #33902 | Commit 8a71091 | Commit f41076d Don't try to label empty geometries | #33931 | Commit 1144974 | N/A - 3.12 only Fix crashes when attempting to export reprojected raster layers | #33801 | Commit bbd055c | Commit 2fff8e1 Fix shapefile encoding issues | #21264 | Submitted | Held off to 3.10.4

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

This feature was developed by Nyall Dawson