Release date: 2023-10-29
Introducing QGIS 3.34, a major release of the QGIS Project that brings significant enhancements to the capabilities of the QGIS open-source geospatial data analysis and visualization software.
This release includes a variety of enhancements to existing APIs, expressions, and tools, print layout modifications, and improvements to rendering options for both 2D and 3D contexts.
For a whirlwind tour of all the new functionalities introduced, you can view the highlight reel video on YouTube at https://www.youtube.com/watch?v=LHFVo0edaXE
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 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 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.
Thanks to an ecosystem grant from the Cesium project, QGIS now has support for loading in 3D content in the Cesium 3D Tiles format! Tiles can be loaded from either local or remote datasources (including the Cesium ion platform and the Google Earth photorealistic tiles), and are visible in both 2D and 3D map views. In 2D views users can control the appearance of tile content by styling in either their original textures or in a wireframe view of the tile geometries, and users also have control over the desired level of detail in both 3D and 2D views.
This feature was developed by Martin Dobias and Nyall Dawson
A new Always use decimal point
checkbox option has been added to the Measure Tool. This option will ensure that measurements and coordinates are copied to the clipboard using a decimal point (dot) separator, even if the current locale uses a comma.
This enables the ability to copy comma-separated (csv) data even in instances where the user locale uses a comma as the decimal separator.
This feature was developed by Yoann Quenach de Quivillic
QGIS now displays the geometry of the identified feature result for raster pixels on the map canvas. This matches the existing behavior of the identify tool against vector, vector tile, and point cloud feature types.
This is useful when a identifying a raster which has sections of similar colored pixels and it’s difficult to visually determine the exact extent of a pixel.
This feature was developed by Nyall Dawson
When using the identify tool on raster layers, the derived results will now include row and column number of the identified pixel.
This feature was developed by Hannes & Nyall Dawson
New layer rendering settings allow users to control the color and symbol that will be used in place of the system or project defaults when highlighting selected features.
This setting is defined for each layer and is useful to improve the visibility of selected features by the application of an explicitly defined symbology.
This is useful in various scenarios, including instances where:
The layer uses a symbol color or style that matches the selection symbology, resulting in the feature selection not being visible
A line layer uses a thin symbol, and coloring selected lines does not make them visible enough
Layers with complex symbology (such as raster/ gradient fills/ lines/ shapeburst with a color ramp) would not have a default selection color applied. In these scenarios, the user can now specify a simpler symbol to use for selected features within the layer.
This feature was developed by Nyall Dawson
Users can now toggle labels for vector tile layers using the vector tile layer styling panel and the layer context menu in the table of contents of the layers pane, effectively replicating the label toggle capabilities for vector layers.
This functionality is enabled by the addition of new functions to the QgsVectorTileLayer
API by replicating the existing functionality on QgsVectorLayer
.
This feature was developed by Mathieu Pellerin
Dynamic map decorations are now rendered to a transparent overlay, preventing re-rendering of decoration objects (such as title or scale bar) during navigation. The QgsMapDecoration
now also includes hasFixedMapPosition
to fix a decoration to a geographic location.
This feature was developed by Yoann Quenach de Quivillic
The debugging/ development profiling tools have been extended with a new “map render” profile (accompanying the existing Startup and Project Load profiles).
Through this tool, users are able to identify pain points in their map rendering and track down exactly which layers are causing long map redraws.
This feature was developed by Nyall Dawson
When using “Refresh Layer at Interval” on vector layers, previous versions of QGIS would simply redraw the layer (for animations etc.), without refreshing data from the data source.
A new widget is provided which allows users to select the layer refresh options according to their preferred use case:
“Reload Data”: The layer will be completely refreshed. Any cached data will be discarded and re-fetched from the provider. This mode may result in slower map refreshes.
“Redraw Layer Only”: This mode is useful for animations or when the layer style should be updated at regular intervals. Canvas updates are deferred in order to avoid refreshing multiple times if more than one layer has an automatic update interval set.
This feature was developed by Nyall Dawson
Users are now able to configure the GPU memory limit configuration on each layer (previously fixed at 500MB per entity/ layer)
A warning is also displayed when a limit is hit, which should assist in troubleshooting large scenes.
This functionality is useful for users utilizing large 3D scenes which exhaust the available GPU memory resources.
This feature was developed by Martin Dobias
Additional API methods for relevant geometry classes are now available for boundingBox3D
and calculateBoundingBox3D
, as well as extensions to boundingBoxIntersects
methods which will now support checking intersections between 3D bounding boxes.
This feature was developed by Jean Felder
New functionality is provided for handling the selection of multiple items simultaneously from the item list within print layouts.
This also improves the user experience of multi-select existing functionality which is available with visual selections by keeping the item selection synchronized with the items list.
This feature was developed by Yoann Quenach de Quivillic
When a layout has more than one page, the current page number will be displayed in the item properties header section using the format page_number
/pagecount
.
This feature was developed by Yoann Quenach de Quivillic
A new “Open file after exporting” checkbox option has been added to the export options for PDF, SVG, and Image output types. When selected this option will attempt to automatically open the output file once the export is completed.
The application used to open the file will use the configured default application on the system based on type (using QDesktopServices::openUrl
). This feature will leverage the user settings API to remember the selection for the active user profile.
This feature was developed by Yoann Quenach de Quivillic
A new bearing
function has been added which computes the bearing angle (in radians) between two points.
The bearing is determined in the given CRS and measured clockwise on the given ellipsoid.
This feature was developed by Andrea Giudiceandrea
QGIS expressions now include a layer_crs_ellipsoid
layer variable, as well as the crs_ellipsoid
property available from the layer_property
function. The value returned will be the ellipsoid acronym of the layer CRS.
This feature was developed by Andrea Giudiceandrea
When digitizing features with the “avoid overlap” option, QGIS has improved the behavior of automatically coercing the feature type and includes more meaningful messages to notify users of the automated behaviours.
An example use case would be the digitizing of a multipart polygon on a singlepart polygon target layer, which cannot be saved. QGIS will now automatically only keep the largest geometry portion, and prompt users to optionally restore the additional features as singlepart polygons.
This prevents the digitizing of “sliver” polygons and frustrations with improper feature types.
This feature was developed by Matthias Kuhn
When using the save vector features to file algorithm, QGIS will inform users of the default behavior for handling pre-existing files (file overwrite) and provide the abiltiy to select from a range of alternate behaviors (such as overwrite layer or append new features to existing layer)
This greatly improves the ability for users to manage data using flat file data storage formats such as geopackage, whilst minimizing the risk of data loss or unwanted side effects.
This feature was developed by Mathieu Pellerin
New functionality ensures that copied features within the same layer will continue to respect project relationship(s) strength.
When copying features within the same vector layer using the map, attribute table, or the copy/ move feature(s) tool, QGIS will now track any relationship within the opened project and duplicate features with the relations intact.
This feature was developed by Mathieu Pellerin
QGIS will now show band descriptions in the symbology tab for raster layers, in addition to the band number.
This feature was funded by Summer is getting warmer and warmer.
This feature was developed by Alessandro Pasotti
A new “Enable antialiasing” parameter has been added to the “Generate XYZ Tiles” processing tool.
This option will be enabled by default (replicating the current behavior) but allow users to disable the antialiasing of map content.
This feature was developed by ASAI Hitoshi
Fields for the row_index
and col_index
have been added to the output of the “Create Grid” processing algorithm. The fields are added to all outputs of type point, rectangle, and hexagon.
Field values are integers for which the count begins at 0 and increments from left to right (column index) and top to bottom (row index).
This feature was developed by Valentin Buira
The new “Calculate expression” algorithm will calculate the results of a QGIS expression and make the result available for use in other parts of the model.
It avoids the need to use the same expression multiple times throughout a model if the same result needs to be used more than once and provides additional use cases (such as generating a static timestamp value for use throughout a model).
This feature was developed by Nyall Dawson
QGIS now allows the conversion of 3D tile content in GLTF and GLB formats into editable vector feature formats.
This feature was developed by Nyall Dawson
The SAGA DTM Filter tool has been ported to a native QGIS algorithm.
This feature was developed by Nyall Dawson
A “Clear Recently Opened” action is now listed at the bottom of the Project → Open Recent
menu, which will remove every unpinned project from the menu.
An additional context menu is also available to enable the ability to remove individual projects from the recent project list, as well as “pin” and “unpin” items.
The state will be synchronized between the recent projects menu and the QGIS Welcome Page.
This feature was developed by Yoann Quenach de Quivillic
QGIS now supports the capability to configure the default values for GUI tools within the QGIS Processing framework using parameters specified in the QGIS.ini settings file.
This allows for the configuration of user-specific or organization-wide default values for certain algorithms. For example, to set the default value of the GRID_SIZE (precision) parameter on the intersection algorithm, the following configuration may be added to the QGIS/QGIS3.ini
in the active user profile directory root:
[Processing]
DefaultGuiParam\native%3Aintersection\GRID_SIZE=0.01
When a user with this configuration opens the relevant toolbox to execute an algorithm, the default value will be specified for them automatically.
This feature was developed by mhugent
This option (available from the new Settings → Options → Elevation tab) allows users to set a specific color to use as the background color for elevation profiles.
This can make the chart more readable for certain datasets, e.g. point clouds with RGB coloring, where the default background color is too similar to point colors to be easily discernable.
This is an opt-in setting, and by default the elevation profiles will continue to display using the standard system background color.
This feature was developed by Nyall Dawson
QGIS now supports the automated discovery of relations for the Oracle data provider.
This feature was funded by Métropole de Lille
This feature was developed by Jacky Volpes
For maintenance reasons, the interactive shell for the GRASS C++ Plugin, as well as the embedded QTermWidget, have been removed from future releases.
It is expected that the GRASS Processing Plugin will be given priority development and maintenance support going forward, and providing an interactive GRASS shell is not a critical functionality for QGIS itself but rather something that users may manage externally.
Further details on the specifics of this feature cleanup can be found on the feature Pull Request.
This feature was developed by Nyall Dawson
A new function has been added to allow for the export of the current runtime profiler (QgsRuntimeProfiler
) model content as a multi-line text string.
This feature was developed by Mathieu Pellerin
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.28 backport commit (GitHub) |
---|---|---|---|
QGIS cannot connect to MySQL if user’s password contains commas. |
No |
||
QGIS WFS server will look for .qgz file in wrong place if “map” is in path |
|||
Raster layer transparency/opacity not stored in saved style |
|||
WMS GetPrint with ATLAS_PK has incorrect layers visibility in versions >= 3.22 |
|||
Error saving edit on PostGIS geometry when table also contains geography |
|||
Cant subtract or add angles since the degrees symbol has been added |
N/A |
||
WCS Keep Unavailable Layers |
N/A |
||
taxon legend from map whis atlas |
N/A |
||
Spinbox for colum space in legends does not allow to set values above 99.99 units |
N/A |
||
Geometry Error SpatiaLite Database |
N/A |
||
Splitting MultiLineStrings gives awkward results |
|||
Open project, then layer properties, close, close project: qgis thinks something has changed |
N/A |
||
Width field of attribute tables in print layouts only uses locale when being edited |
|||
Data Source Manger - Browser: Close and Help buttons are missing |
N/A |
||
0 port in OAuth2 callback URI |
Cannot reproduce |
N/A |
|
QGIS Crashes when editing multiple features simultaneously that have a Value Relation field |
TODO |
||
Crash when playing with duplicated legends in layout |
|||
QGIS fails to request more than one WMS-Layer |
N/A |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Alessandro Pasotti (itOpen / qcooperative)
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.28 backport commit (GitHub) |
---|---|---|---|
qgsgeos.cpp: fix a -Wunused-variable warning |
unreported |
N/A |
|
qgsvirtualpointcloudprovider.cpp: add a missing variable initialization |
unreported |
N/A |
|
OAPIF does not honour the view extent |
|||
Does QGIS require units “m” for the projection coordinate variables in a netCDF/CF file? |
N/A |
||
Syntactical error with the use of == instead of = for comparison in the WHERE clause |
Already fixed |
Unable to write any additional layers to an existing FGDB |
|
Add minimal CRS information to sqlite exports |
|||
Complex Attributes in OGC API Feature-Items have empty content |
|||
GPX Provider: missing element when importing gpx file |
N/A |
||
Saving edits on larger vector layers is slow |
N/A |
||
QgsVectorLayerSaveAsDialog: uncheck ‘Add saved filed to map’ when selecting PGDump driver (refs #54548) |
Not worth it |
||
Spatial filtering of multipart polygons within a shapefile dataset broken |
Not a bug |
||
qgis cannot find/identify a polygon feature by clicking a newly created (multi)polygon part |
|||
qgis cannot find/identify a polygon feature by clicking a newly created (multi)polygon part |
|||
Export to spreadsheet creates an xlsx file with errors when exporting empty tables/layers |
|||
export bbox wrong when feature crosses anti-prime-meridion (180 deg) |
Not worth it |
||
QgsVectorDataProvider.changeAttributeValues() returns True even when it fails |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Even Rouault (Spatialys)
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.28 backport commit (GitHub) |
---|---|---|---|
Fix segfault in coordinate transform |
unreported |
N/A |
|
Wrong rendering for HIGHLIGHT_LABEL_ROTATION above 89° |
N/A |
||
Database string connection visible in the message bar/QGIS logs |
N/A |
||
PostGIS Connection’s “Session ROLE” is not kept |
N/A |
||
Example files are installed by the server build, and additionally they are in a wrong place |
N/A |
||
Point to Path tool causes QGIS to crash |
|||
qgs/qgz project does not save mesh symbology correctly |
N/A |
||
Endless loop if profile is drawn outside layer extent |
N/A |
||
Server: Can’t enable WFS3 API update endpoint (PUT/PATCH) on layers without geometry |
N/A |
||
Add safe guard around -of in gdal command for batch processing |
N/A |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Paul Blottiere (Hytech-imaging)
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.28 backport commit (GitHub) |
---|---|---|---|
Have QgsRectangle null rectangle printed as EMPTY in wkt |
unreported |
N/A |
|
Fix aspect ratio computation in QgsLayoutItemMap::zoomToExtent |
unreported |
N/A |
|
Do not include a BoundingBox tag in GetFeatureInfo responses, when it is null |
unreported |
N/A |
|
Always run the spell and shell checkers if possible, print warning when not possible |
unreported |
N/A |
|
Tweak Null rectangle handling |
unreported |
N/A |
|
Run spellcheck only on changed files in prepare_commit.sh |
unreported |
N/A |
|
Fix prepare_commit.sh |
unreported |
N/A |
|
Fix extent computation in QgsSpatiaLiteProvider |
unreported |
N/A |
|
Do not force verbose build in mingw build |
N/A |
||
Make QgsBookmark string output more explicit about it being EMPTY |
unreported |
N/A |
|
Fix extent computation in QgsAFSProvider |
unreported |
N/A |
|
Add |
unreported |
N/A |
|
Handle null rectangles in QgsExtentWidget::outputExtent |
unreported |
N/A |
|
Handle null in QgsRectangle grow() and include() methods |
unreported |
N/A |
|
Add QgsRectangle::setNull(), deprecating setMinimal() |
unreported |
N/A |
|
Handle Null rectangle in QgsRectangle::buffered |
unreported |
N/A |
|
Fix extent computation in QgsVirtualLayerProvider |
unreported |
N/A |
|
Add a QgsRectangle::createNull() temporary static method |
unreported |
N/A |
|
Fix testRegisterFeatureUnprojectible - Use valid extent in testRegisterFeatureUnprojectible |
unreported |
N/A |
|
Have QgsGeometry::boundingBox return null rect for null geom |
unreported |
N/A |
|
Have QgsGeometry::fromRect(NULL RECT) return null geometry |
unreported |
N/A |
|
Stop considering Rectangle(0,0,0,0) null - while Rectangle(1,1,1,1) is not null |
N/A |
||
Run doxygen layout checker in prepare-commit script, when possible |
unreported |
N/A |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Sandro Santilli (strk)
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.28 backport commit (GitHub) |
---|---|---|---|
qgs3daxissettings: Correctly read viewport ratio on a saved project |
unreported |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Jean Felder (Oslandia)
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.28 backport commit (GitHub) |
---|---|---|---|
Don’t show help for algorithms which can’t be run in qgis_process |
pending |
||
Fix crashes in layout designer |
Too intrusive |
||
Fix layout label adjust size to text logic |
unreported |
pending |
|
Fix toggling visibility of group layers resets child layer mask blend modes |
N/A |
||
Ensure identify highlight works for very transparent symbols |
|||
Fix layout maps force rasterisation of whole layout when map item has transparency set |
unreported |
Too intrusive |
|
Fix crash in merge features dialog when a field has a unique constraint set |
|||
Fix initial zoom level when opening layout designer windows |
|||
Fix hang when exporting 3d maps |
Too risky |
||
Fix layout labels don’t immediately react to changes when semi-transparent |
unreported |
||
Fix crash when opening layer properties for raster layer with broken data source |
|||
Fix Execute SQL exeception |
|||
Cleanup all browser layer properties dialog before exiting |
|||
Avoid loss of attributes when calculating fields |
|||
Fix crash when changing layers between editable/non-editable layers |
N/A |
||
Fix QgsField::ConfigurationFlag::None causes syntax error when starting PyQGIS |
unreported |
N/A |
|
Handle sql=’’ or sql=”” as empty sql strings instead of ‘’ / “” literals |
|||
Fix crash when certain symbol pages are open in style dock and QGIS is closed or a new project opened |
unreported |
Too intrusive |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Nyall Dawson (North Road)
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.28 backport commit (GitHub) |
---|---|---|---|
Masking with SVG symbol doesn’t work |
|||
Bug on graduated symbology on French QGis 3.28.10 |
|||
QGIS crashes when undoing moving of elements in map layout |
|||
QGIS Crashes Upon Exporting Layout to PDF when Using Random Point Fill Symbology |
poly2tri issue https://github.com/jhasse/poly2tri/issues/55 |
||
Label expression with more than 32767 chars becomes invalid when switching from expression dialog back to layer properties |
|||
Activating notify/listen feature crash QGIS |
This feature was funded by QGIS.ORG (through donations and sustaining memberships)
This feature was developed by Julien Cabieces (Oslandia)