Changelog for QGIS 3.44

The QGIS Project proudly announces the release of QGIS 3.44, a momentous release that marks the culmination of the QGIS 3 series. This release arrives within a vibrant and ever-expanding ecosystem of free and open-source geospatial tools, libraries, and community support that empowers users worldwide. Building upon the solid foundations of previous releases, QGIS 3.44 provides a stable and refined experience for all users as the project transitions to the modern Qt6 framework with the upcoming release of QGIS 4.0 in October 2025.

As the final feature release of the QGIS 3.x branch, this version ensures a reliable environment for existing workflows, and plugin developers can anticipate a smooth transition between releases, as QGIS 4.0 will retain deprecated APIs to minimize compatibility efforts and allow the ecosystem to evolve alongside the core application.

While focused on stability and refinement, the release still includes a range of notable enhancements that refine workflows and empower users in their geospatial endeavors. Such enhancements include refinements to database management and connectivity, improved data provider flexibility, and new project settings. Old favourites such as the Processing toolbox and QGIS Expressions also see their fair share of improvements, and cartographic capabilities get a boost with new labelling and layout updates.

For a whirlwind tour of all the new functionalities introduced, you can view the highlight reel video on YouTube.

QGIS is a community effort, and we would like to extend a big thank you to the developers, documenters, testers, and the many folks out there who volunteer their time and effort (or fund people to do so) to make these releases possible. From the QGIS community, we hope you enjoy this release! If you wish to donate time, money, or otherwise contribute towards 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 or small to the project can be seen on our list of donors. If you would like to become an official project sustaining member, please visit our sustaining member page for more 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 big 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 their financial or social status - we believe that empowering people with spatial decision-making tools will result in a better society for all of humanity.


General


Feature: Attributes form: Switch to model-based tree views in Vector Layer Properties

Initial work packages of the QEP Overview of widget types while configuring forms. This PR will pave the road for subsequent features.

We preserved the look and feel as well as the prior behavior, while doing small refactorings and improving minor UI/UX issues.

Based on the new model/view approach, this PR introduces a new feature:

[FEATURE] Allow users to switch between field names and field aliases in both the Available Widgets and the Form Layout panels.

https://github.com/user-attachments/assets/a81a3928-8c55-4f8e-98b8-57a1505437f2


Other enhancements:

  • Orphan fields in the Form Layout stand out (red color), just like broken relations did.
  • Improvements in broken relations representation. See before/after:

BEFORE
Screenshot from 2025-04-21 17-35-21

AFTER
vokoscreenNG-2025-04-25_08-56-47 723

Description of the before/after scenario above:

  • Fields couldn't be loaded from the project info (e.g., broken paths), so we make them stand out (in red).
  • There are 2 broken relations, one is still in the relation manager (but its layers are not loaded, so it's invalid) and the other one is not.
    • For the relation that is still in the relation manager, we show its name in Available Widgets panel and its label/alias (if show aliases is active and if the relation has a custom label) in the Form Layout panel.

Includes unit tests.


Fix #37038
Fix #49502
Fix #61608

This feature was funded by the [QGIS user group Switzerland](.)

This feature was developed by Germap


Feature: Port SQL Query History to Browser

Shows the database query history panel in the Execute SQL dialog, and adds a top level action to open the query history window.

Implements https://github.com/qgis/QGIS-Enhancement-Proposals/blob/master/qep-332-sql-query-history.md

https://github.com/user-attachments/assets/fe919f6e-e256-4254-a2ae-8f4ea49e6a42

https://github.com/user-attachments/assets/27bb6ff5-f365-4d75-835e-f47ad582f9bf

This feature was funded by QGIS grant program 2025

This feature was developed by Nyall Dawson


Feature: [WFS Provider] Add a UI and URI parameter featureMode=default/SimpleFeatures/ComplexFeatures

Fixes #61476 / #61493

The analysis of DescribeFeatureType response with the GMLAS driver makes appear fields that are not supported by the
addFeatures()/changeAttributeValues() method. So if transaction support is detected and featureMode=default, use QGIS built-in analyser to get SimpleFeatures only. Otherwise try the GMLAS method.

This feature was developed by Even Rouault


Feature: Add settings for controlling margin around labels, and preventing duplicate labels

This PR adds two new settings for vector layer labels:

  1. A 'margin around labels' setting. This allows setting a margin around a layer's labels, which prevents all other labels from being placed closer than this margin distance to the layer's labels:

image

  1. Prevent duplicate labels. This improves the appearance of labels in situations like road networks, where things like dual carriageways, service roads, etc can result in many labels of the exact same text appearing close to each other. When active, removes any labels with the exact same text (case sensitive!) which are closer then this minimum distance. The setting applies across layers, so duplicate text from ANY layer will be considered:

image
image

Note that both settings require a build based on GEOS 3.10 or later.

Fixes #23154

This feature was developed by Nyall Dawson


Feature: [WMS][Time dimension] Allow group node to expose time dimension

Allow layer tree group node to expose time dimension

A new checkbox allows to enable or disable the computation of this time dimension. If enabled, it would recursively generate the time dimension based upon its children time dimension. A group which time dimension computation is disabled would not propage the time dimension of its children to its parent.

computetime

Add also support of date range in time dimension with respect to the OGC WMS and ISO8601 standard.

This feature was funded by Ifremer**

This feature was developed by Julien Cabieces


Feature: [postgres] Add connection setting for restricting schema

Like the equivalent Oracle provider setting, this allows users to specify a single schema to limit a Postgres connection to.

When set, only tables from the matching schema will be included in the browser panel and data source select for the connection.

This can be used to limit the database work required to populate tables for a connection pointing to a large database store.

image

This feature was funded by Regiodata

This feature was developed by Nyall Dawson


Feature: Add auto-wrap after setting for layout legends

Allows legend text to be automatically wrapped after a set line length (in millimeters).

This can prevent very wide auto-generated legends.

https://github.com/user-attachments/assets/48b00615-3e26-49be-9361-0645195be364

This feature was funded by North Road, thanks to SLYR

This feature was developed by Nyall Dawson


Feature: [expressions] Add repeat function, reverse variant for strings

  • Adds a new 'repeat' function, which repeats a string a specified number of times
  • Adds string variant for 'reverse' to allow reversing strings

This feature was developed by Nyall Dawson


Feature: Allow configuring the server project cache size

The server QgsConfigCache currently uses default-constructed QCaches which default to cost=100, i.e. 100 entries. This PR adds the QGIS_SERVER_PROJECT_CACHE_SIZE Env-Var to make this configurable.

This feature was developed by Sandro Mani


Feature: Add creation options UI to raster calculator

Description

Expose raster creation options in the raster calculator UI (both native dialog and Processing algorithm).

Raster calculator
calc
Processing algorithm
processing-alg

Follow-up #61175, fixes #39082.

This feature was developed by Alexander Bruy


Feature: [Server] Add server properties on layer tree group

Allow user to edit server properties on layer tree group and return them on GetCapabilities request. So far, only short name, title and abstract were available. There are now:
- keywords,
- data URL (with format)
- Attribution title and URL
- Metadata URLs
- Legend URL (and format), with a default generated one in case there is none defined

Widget

groupwmsdata

GetCapabilities response

<Name>MyShortName</Name>
<Title>This is the title</Title>
<Abstract>
  This is a more descriptive text aboout the WMS data.
</Abstract>
<KeywordList>
  <Keyword>keyword1</Keyword>
  <Keyword>keyword2</Keyword>
</KeywordList>
<CRS>CRS:84</CRS>
<CRS>EPSG:4326</CRS>
<CRS>EPSG:3943</CRS>
<CRS>EPSG:3857</CRS>
<EX_GeographicBoundingBox>
  <westBoundLongitude>-180</westBoundLongitude>
  <eastBoundLongitude>180</eastBoundLongitude>
  <southBoundLatitude>-85.051129</southBoundLatitude>
  <northBoundLatitude>85.051129</northBoundLatitude>
</EX_GeographicBoundingBox>
<BoundingBox CRS="EPSG:3857" minx="-20037508.343" miny="-20037508.343" maxx="20037508.343" maxy="20037508.343"/>
<BoundingBox CRS="EPSG:3943" minx="-100494907.822" miny="-93107605.747" maxx="103803487.301" maxy="61264912.326"/>
<BoundingBox CRS="EPSG:4326" minx="-85.051129" miny="-180" maxx="85.051129" maxy="180"/>
<DataURL>
  <Format>text/plain</Format>
  <OnlineResource xlink:type="simple" xlink:href="http://mydataurl.com"/>
</DataURL>
<Attribution>
  <Title>Attribution title</Title>
  <OnlineResource xlink:type="simple" xlink:href="http://myattributionurl.com"/>
</Attribution>
<MetadataURL type="FGDC:1998">
  <Format>text/xml</Format>
  <OnlineResource xlink:type="simple" xlink:href="http://mymetadata.com/data1"/>
</MetadataURL>
<MetadataURL type="ISO19115:2003">
  <Format>text/plain</Format>
  <OnlineResource xlink:type="simple" xlink:href="http://mymetadata.com/data2"/>
</MetadataURL>
<Style>
  <Name>default</Name>
  <Title>default</Title>
  <LegendURL>
    <Format>image/png</Format>
    <OnlineResource xlink:type="simple" xlink:href="http://findthelegendhere.com"/>
  </LegendURL>
</Style>

This feature was funded by Ifremer**

This feature was developed by Julien Cabieces


Feature: Add input parameters to the toolbox in the modeler

Description

This PR create a single "Toolbox" panel for both the Inputs and Algorithms panel under a single panel.

The "Algorithms" panel is turned into a "Toolbox" panel and is embellished with a new sub categories "Input parameters" that is now searchable along side other model component. The parameter inside the toolbox behave as you would expect with double click and drag and drop to add it to the model

This feature avoid the annoyance to switch between the two panels back and forth. Additionally the model parameters are now searchable as well !

To note: The "Inputs" panel is still available on his own

Thanks to the Hauts-de-France region for sponsorising this work and Camptocamp for their collaboration

Before the PR:
image

After the PR:

Screencast From 2025-03-25 17-15-06.webm

This feature was developed by Valentin Buira


Feature: Add project setting for scale calculation method, new method for "scale at equator"

This PR adds a new project-level setting for the scale calculation method, with choices for "at top of map", "at bottom of map", "at middle of map" and "horizontal average".

Changing the scale method has the following impact:

  • New layout scale bars will default to the project's scale calculation method
  • The scale calculations for the status bar widget and map renders will be changed (including flow on impacts like the value of @map_scale, scale based visibility of layers and symbols) -- NOTE that symbology sizes in map units are NOT affected by this setting
  • This also affects QGIS server map rendering
  • Processing algorithms which render maps will respect the project's scale calculation method

There's also a new scale calculation method introduced for "scale at equator". This method always calculates the scale at the equator, regardless of the actual visible map extent. It can be used to provide a consistent, static scale for maps in geographic reference systems, regardless of the latitudes actually visible in the map (permitting consistent appearance of these maps when rendering relies on scale based visibility or calculations). Otherwise a project in eg EPSG:4326 which uses scale based visibility of layers and symbols will see layers and features "randomly" disappear as the map is panned, even though the user has not zoomed in or out of the map.

This method is only applicable when calculating scales with a degree based reference system.

(It's also useful for those who want to mimic the behavior of ESRI products, which ALWAYS calculate the scale at equator for geographic CRS.)

This feature was developed by Nyall Dawson


Feature: [Raster] Use HEIGHT_AVERAGE from RPC when available

Improve the georeferencing of DIMAP / Pleiades NEO products. This is the counterpart of the GDAL change of https://github.com/OSGeo/gdal/pull/11989 but it can be applied independently of it.

With this PR dataset MARSEILLE_PRY_NoHD15_NoDHZ_JP2/000251471_1_1_STD_A/IMG_01_PNEO3_PAN/DIM_PNEO3_STD_202111071029297_PAN_SEN_PWOI_000251471_1_1_F from https://geodelivery.intelligence-airbusds.com/main.html?download&weblink=7f828450ac65e2d61bfd5ea4ac8b3feb&realfilename=MARSEILLE_ORT_NoHD15_NoDHZ_JP2.7z overlaps nicely with OSM background

velodrome_rpc_qgis

This feature was developed by Even Rouault


Feature: [3D] Clipping planes tool

Description

This PR adds a new tool to create cross sections in 3D scene. User enables this tool in 3D window, selects the area on 2D canvas and after confirmation the 3D scene will be edited + the camera will change to profile view.
Left click -> adds point
~~BACKSPACE or DEL -> remove last step in selection~~
Right click or ESCAPE -> resets the selection

https://github.com/user-attachments/assets/3e0e7a67-d28d-48d4-a342-ed267f2d603a

This feature was funded by Septima, Klimadatastyrelsen

This feature was developed by Matej Bagar


Feature: Profile tool: Add support for subsections indicator

Description

This PR allows to display subsections indicator as vertical lines in the profile tool. This is based on the ideas discussed in https://github.com/qgis/QGIS-Enhancement-Proposals/issues/260
It works on the Elevation Profile and the Print Layout. In both cases, it is possible to change the symbology of the lines. For the elevation profile, theses new options are added to the options menu.

Screenshots

Capture d’écran du 2025-03-14 18-21-39

Elevation Profile

Capture d’écran du 2025-03-14 18-20-56

Capture d’écran du 2025-03-14 18-22-04

Layout

Capture d’écran du 2025-03-14 18-23-24

Capture d’écran du 2025-03-14 18-25-36

cc @Simon-Lopez @T4mmi @Djedouas

This feature was funded by BRGM

This feature was developed by Jean Felder


Feature: Add option to use POST requests for a WFS connection

While the default remains at GET requests, this change allows users to switch a particular WFS connection to prefer POST requests:

image

(For motivation see https://github.com/qgis/QGIS/issues/32348)

This feature was funded by Dorset Council

This feature was developed by Nyall Dawson


Feature: Batch processing temporary output

Description

Allows temporary output in Batch processing (see attached video example).

One thing to consider would be if it makes sense to allow temporary outputs if Load layers on completion is not checked.

Peek 2025-03-13 11-56

This feature was funded by Ocean Winds

This feature was developed by Jan Caha


Feature: Postgre qgisproject management

Description

Adds options for QGIS Projects stored in PostGIS database to:

  • Rename Project…
  • Delete Project…
  • Duplicate Project…
  • Move Project to Schema…

Clipboard 1

This feature was funded by Ocean Winds

This feature was developed by Jan Caha


Feature: Add country codes config to Nominatim Geocoder Locator filter - 2

This adds configuration option to Nominatim Geocoder Locator filter for filtering results to one or more countries. (Two letter country codes, comma separated). Configuration value is optional.

image

This feature was funded by level2

This feature was developed by Uroš Preložnik


Feature: [RasterTemporal] Add fixed date/time to raster temporal mode

Allows the user to select a fixed date/time for a raster layer temporal properties so he doesn't have to set the same date/time for start and end of a temporal range.

rasterdatetime

This feature was funded by Ifremer**

This feature was developed by Julien Cabieces


Feature: Allow field customisation when importing db tables

This expands the database table import dialog to add a new field mapping section, which gives users control over the
fields in the created table. Users can rename, set the exact destination field types, and tweak the source expression
for each output field. Fields can also be excluded from the import, or new fields created which don't exist in the source table.

image

Refs https://github.com/qgis/QGIS/issues/24192
Refs https://github.com/qgis/QGIS/issues/45286

This feature was funded by City of Canning

This feature was developed by Nyall Dawson


Feature: Add optional extent, expression based filter when importing tables to database

When a table is imported to a database via the browser, the user now has an option to filter the copied records by extent or expression:

image

This feature was funded by City of Canning

This feature was developed by Nyall Dawson


Feature: Show dialog when importing tables via browser, give users options to control import

This PR is a step towards porting the DB Manager "Import vector table" functionality into core/browser. I've taken extreme care here to ensure that everything is kept generic and that the GUI is all dynamically built based on the available capabilities of the destination database provider. This means that we gain native import vector table control for postgres, hana, sql server, gpkg, spatialite + the OGR database formats (eg ESRI File Geodatabase) in one shot, and that any future extensions to this dialog will automatically apply to all relevant destination providers. *

To facilitate this, I've added new API to the database connections classes. I've removed a lot of duplicate copy/paste code from the various QgsDataItemGuiProvider subclasses and moved them to generic methods in QgsDataItemGuiProviderUtils.

Some notes:

  • Part of this work was based on efforts by @JanCaha to port the DB Manager Postgres import functionality to browser
  • The new dialog will show when dragging and dropping a SINGLE VECTOR TABLE only onto a database schema (or connection item, if the connection doesn't support schemas). You won't see it if you drag and drop multiple tables at once -- that still does an immediately import without any customisation or prompts. I've left this as I don't want to risk UI regressions for users who need to import many tables at once, where showing a dialog per table would be annoying. (At some stage we could/should make a similar import dialog designed around multiple-table import to handle this situation)
  • The dialog will show when dragging and dropping a layer from the browser, OR a layer from the current project
  • You can also show the dialog by right-clicking a schema item (or non-schema supporting connection item) and selecting "Import Vector Table...", giving you the choice of importing any of the layers from the current project.
  • Unlike the DB Manager feature, which blocks the application and does the import in the main thread, this uses a background task to do the actual import leaving QGIS nice and responsive.
  • Supported functionality is:
  • Renaming the destination table. The destination table will default to the same name as the import table/layer, but users can change this as desired
  • Replace destination table checkbox (unchecked by default)
  • Set the primary key name for the created table. Defaults to the original layer primary key name, or a default provider-specific name if the original layer does not have a primary key. Only shown if the destination supports primary key naming.
  • Set the geometry column name. Defaults to the original layer geometry column name, or a default provider-specific name if the original layer does not have a named geometry column. Only shown if the destination supports geometry column naming and the source is a spatial layer.
  • Set the destination layer CRS. Only shown if the source layer is a spatial layer. Defaults to the original layer CRS.
  • Set the output table comment. Only shown if the destination provider supports this (which is currently only the postgres provider). Defaults to the input layer metadata description/abstract.
  • Some functionality from the DB Manager Import Vector Table is NOT currently supported. This is:
  • Overriding the source layer CRS. In my view this is confusing, niche functionality which should be handled outside of this dialog, eg by setting the layer's CRS manually.
  • Similarly, the ability to override the source layer's encoding is not supported. Again, this is confusing + niche and should instead just be set for the source map layer directly when required.
  • "Do not promote to multi-part" option. I think this logic needs re-thinking to make it generic and not specific to postgres database import. In db manager it means that eg a multipolygon source layer will be imported as a (not multi)polygon layer on the database, and that the import will error out if ANY geometries are found with more than one part. It's badly named for a start, as it implies that by leaving the box unchecked that a promotion to multipart geometries will ALWAYS occur. At the very least this option should be renamed to "demote to single part" and only enabled when the source layer is a multipart geometry type, but this needs to be discussed and rethought before we do this. (It's out of scope for my current work, I will not be doing this)
  • "Convert field names to lowercase". In a follow up PR I will expose the ability to exclude source layers from the import and rename them -- after this is done we could instead have a button in the dialog which just renames all the layers to lowercase (out of scope for my current work).
  • "Create spatial index". The API for spatial index creation is messy -- we have a method in QgsVectorDataProvider to do this, but only implemented by SQL Server and Oracle providers. We have an alternative API in QgsAbstractDatabaseProviderConnection but only implemented by Oracle, Postgres, GeoPackage and Spatialite. Right now the QgsVectorLayerExporter class used by browser vector imports just ALWAYS uses the vector provider method when exporting tables, so we ALWAYS get spatial indexes for tables imported for SQL Server + Oracle providers. This is just too messy and we need to consolidate on one spatial index creation method implemented by all database providers before exposing this choice in the dialog. (This is out of scope for my current work)
  • "Import only selected features" -- I'll be sending through a follow up PR after this one with extra options for filtering the imported layer, including extent based filter + expression based filter, and I'll implement selection based filtering at this time.
  • There's no way to hit a "..." button and pick a non-project layer to import. This should be done by showing a dialog (or QgsPanelWidget) with a browser tree for picking the source layer. It's out of scope for my current work.

image

  • Note that this functionality does not currently work for oracle databases, simple because the oracle provider is still using deprecated functionality from QgsDataItem and surprisingly does not yet implement a QgsDataItemGuiProvider! :scream_cat: There's nothing here which prevents Oracle from just working as soon as someone implements that class for oracle data items.

Fixes https://github.com/qgis/QGIS/issues/24194

This feature was funded by City of Canning

This feature was developed by Nyall Dawson


Feature: [feature] Add stored query support to Execute SQL window

This ports the equivalent functionality from DB Manager over to the core/browser "Execute SQL" dialog.

Users can insert stored queries into their current query, save new stored queries, and remove queries via a new toolbar action.

Users can opt to store queries in either the current project (ie the DB Manager approach, and this is fully compatible with
existing queries stored via DB Manager) or in the local user profile (so that they are available across different projects)

https://github.com/user-attachments/assets/7035bfb4-6e48-4d32-a475-be2de4ae86cc

This feature was funded by City of Canning

This feature was developed by Nyall Dawson


Feature: Saving/loading SQL queries from Execute SQL/Update SQL dialogs

This adds support for saving and loading SQL queries to a .sql text file to the Execute SQL dialog and Update SQL dialogs.

Effectively, it ports this functionality from the DB Manager plugin over to the core browser-based database connection facilities.

The UX has been designed to mimic the same functionality from other standard parts of QGIS, eg the Processing Script Editor. Toolbar actions are used accordingly, instead of the old text button approach used in DB Manager. To accompany the new toolbar I've also added standard actions for operations like copy/paste/undo/redo, again mimicing the Processing Script Editor dialog UI

image

This feature was funded by City of Canning

This feature was developed by Nyall Dawson


Feature: [mssql] Allow SQL queries as layer sources

Allows loading SQL Server queries as map layers from the browser, and updating the SQL for existing query layers

Fixes https://github.com/qgis/QGIS/issues/19301

This feature was funded by City of Canning

This feature was developed by Nyall Dawson


Feature: Add merge policies

Fixes #59494.

Similarly to already existing Split and Duplicate "policies" this PR implements Merge Policies, which determine the initial values in the Merge Features dialog. The PR includes the following merge policies:

From the existing Qgis::FieldDomainMergePolicy enum:
* Sum: numeric fields only
* Geometry Weighted: numeric fields only, uses weighted average by geometry
* Default Value: uses the default value set in QGIS (expressions use a dummy feature with the merged geometry, but referring to other fields won't work)

New policies:
* Unset Field: similarly to Split & Duplicate policies clears the field and lets the data provider populate any default value if one exists. If it doesn't the first feature is used (this is the behavior which is currently implemented)
* Largest Geometry: use the value from the feature with the biggest geometry (length/area/number of parts for multipoints)
* Minimum Value: numeric fields only
* Maximum Value: numeric fields only
* Set to Null: sets the value of the field for the feature to NULL

Initial merge dialog before PR:
MERGEPOLICY_BEFORE

Initial merge dialog after PR:
MERGEPOLICY_AFTER

Configuring the policies:
image

This feature was funded by the National Land Survey of Finland.

This feature was developed by Juho Ervasti


Feature: [oauth2] Allow for extra OAuth2 token(s) to be added into the headers

Description

This PR adds an oauth2 advanced configuration option to attach extra tokens sent by the OAuth2 token endpoint as HTTP(S) request headers. The UI looks as follow:

image

This can be quite useful when working with OAuth2 service providers such as Google which adds openid tokens to their token replies.

This feature was developed by Mathieu Pellerin


Feature: Add basic drag and drop support in the model designer

Introduction

This PR add the new way to edit a model using a drag and drop interface. This is part of long waited improvements in the model designer capabilities.

The design is based of the Google Summer of code proposal I did last year, and that we discussed on the mailling list. Compared to the original proposal the UI looks more similar to the current modeler interface

I encourage anyone to open your existing models and give it a try !

Thanks to the Hauts-de-France region for sponsorising this work

How does it works ?

New sockets were added around each parameter and algorithm used in a model.

https://github.com/user-attachments/assets/30f3df6f-cfad-4cad-aa32-0de2bdb58828

Those are interactive and are used to connect component between them. To connect component drag any output socket regardless of it's from a model parameter or a algorithm into an input socket. You can also remove a connection by dragging an edge out of the socket.

https://github.com/user-attachments/assets/becb533b-2914-4454-be17-78528fc363a1

Theses new capabilities have been added as part of the select/edit tool. No needs to switch to a new tool when you want to edit connection in your model. The icon has been updated in consequence.

Screenshot From 2025-02-19 08-29-54

This PR remain fully compatible with the previous user interface. When you connect sockets by drag and drop. The dialog used when opening an algorithm is updated as well.

https://github.com/user-attachments/assets/42b2c2ef-4c79-4b76-baec-7886540ceee8

This feature was developed by Valentin Buira


Feature: Add an option to delete unused categories in the categorized symbol renderer widget

Description

This PR adds an option via a button in the categorized symbol renderer widget to delete unused categories from the model/view. I.e. any categories which are not matched in the attribute field or expression used to categorize the layer.

Example use case:

I have a layer of land systems covering the entire Northern Territory and a .qml style file which categorizes this layer into some 22 classes based on an attribute "CLASS".

Screenshot from 2025-02-16 20-25-53

Screenshot from 2025-02-16 20-24-51

Now I clip this NT-wide layer to a much smaller area. The subset only contains 7 of these classes, however I still want to load the style from the same .qml style file.

Screenshot from 2025-02-16 20-19-59

With the added option, one can quickly delete all the categories which are not used by the smaller subset layer:

remove-unused-categories

In the added void QgsCategorizedSymbolRendererWidget::deleteUnusedCategories() method, I reused a block of code from the existing addCategories() method to build a QList<QVariant> of unique values in the layer based on the current classification attribute or expression. To avoid duplication & to try and keep things tidy, I moved this block to a new protected method: QList<QVariant> QgsCategorizedSymbolRendererWidget::layerUniqueValues( QString attrName ) which returns the list of unique values and is then called in both addCategories() and deleteUnusedCategories().

This feature was developed by Ben Wirf


Feature: Processing raster rank algorithm

Description

This PR introduces a new spatial analysis' raster rank algorithm:

image

The algorithm takes a collection of rasters as input and creates an output with cell values matching the rank order of a list of cell values take from the input collection of rasters. For e.g., if the list of input values for a given cell is [10,20,30,40] and the rank is 2, the output value will be 20.

The algorithm also allows for negative index rank. Given the same list of input values - [10,20,30,40] - using rank -2, the output value would be 30.

Finally, the algorithm offers to nodata handling behavior. By default, nodata values are excluded from the list and a given output cell will only be set to nodata if the rank is greater than the values list size. Users can also pick an alternative behavior whereas one or mode nodata values for a given cell in the input layers will result in a nodata value for that output cell. The alternative behavior matches what ArcMap is doing in its own raster rank algorithm.

This feature was developed by Mathieu Pellerin


Feature: add expression functions to create CRS from string definition and to get CRS authid (refs #58313)

Description

Processing batch mode allows to defined output name using expressions and all algorithm parameters are available as values in this context. However, CRS parameters when used in expression return nothing. This happens because when algorithm scope is populated we create variables using the values obtained from parametersForRow() method and these values are just uses as-is

https://github.com/qgis/QGIS/blob/6b4ffb39a887a4f10d04373f27250b6d7b1f2293/python/plugins/processing/gui/BatchPanel.py#L956-L961

In case of CRS parameter, variable will be populated with the instance of QgsCoordinateReferenceSystem. Expression engine does not have support for variants containing QgsCoordinateReferenceSystem and evaluating such variable returns nothing as reported in #58313.

This PR adds two new expression functions:

  • make_crs(definition) to create a QgsCoordinateReferenceSystem from a definition
  • crs_authid(crs) to get a string with the CRS authid

Refs #58313.

This feature was developed by Alexander Bruy


Processing


Feature: Port SAGA "Fill Sinks Wang & Liu" to native tool

This highly in-demand tool seems to be fragile and error-prone when run via the SAGA Processing Plugin.

A new native tool has been provided to provide an optimized out-of-the-box tool that is stable and effective.

Note that, as this implementation is a clone of the SAGA implementation, bugs present in the source will be present in the new native tool.

This feature was developed by Nyall Dawson