Release date: 2021-10-22
QGIS 3.22 Białowieża is aimed at celebrating the 100-year anniversary of Białowieża National Park, Poland, which was established in 1921. Białowieża Forest is one of the world’s last primary woodlands, located on the border between Poland and Belarus. It is one of the few natural old-growth forests in temperate lowland Europe and has been protected for over 600 years. The outstanding value of Białowieża Forest has been acknowledged by its recognition as a UNESCO Natural World Heritage Site.
Białowieża Forest is named after the village Białowieża, which is located right in the middle of this woodland. It is one of the oldest settlements in the area, nowadays hosting numerous research and tourism activities. Today, there are three research institutions in the village: Białowieża Geobotanical Station, University of Warsaw, The Mammal Research Institute, Polish Academy of Sciences, and the Forest Research Institute, Department of Natural Forests. Additionally, a large number of scientists from Poland and abroad travel to Białowieża in order to carry out their studies, and as such, there are also other users of QGIS in the area, as well as additional projects which contribute to the Open Data and Open Source Software ecosystems, such as the Open Forest Data project.
You can learn more about the project and this release of QGIS at the dedicated project website, https://qgisbialowieza.pl.
This feature-packed release includes a vast number of user experience enhancements and controls added to various advanced functionalities. In addition to a host of additional mesh functionality and operational improvements, QGIS Desktop now includes annotation tools and support for annotation layers, amongst much, much more. For a whirlwind tour of all the new functionalities introduced, you can view the highlight reel video at https://youtu.be/U-RHBt6WZi8
我们还要向开发、文档编制、测试以及所有自愿投入时间和精力 (或提供资金支持),使这些版本逐渐向世人呈现的人员表示衷心的感谢。我们希望您喜欢这个来自QGIS社区的版本!如果您想奉献时间、捐赠资金或以其他方式让QGIS变得更棒的工作中来,请前往 QGIS.ORG 并伸出援助之手!
QGIS得到捐助者和赞助会员的支持。在我们的捐赠者名单上,可以看到目前为该项目提供大小不等的资金捐助的 捐赠者名单。如果您想成为正式的项目支持会员,请访问我们的 支持会员页面 了解详细信息。赞助QGIS有助于我们为定期的开发者会议,维护项目基础设施,并为Bug修复工作提供资金。下面提供了当前赞助商的完整名单 - 非常感谢所有赞助商!
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.
注记图层的其他特性现在包括以下内容:
注记图层属性窗口包含有关图层的一些基本信息以及用于设置图层的缩放范围、不透明度、混合模式和绘制效果的选项
通过注记工具栏查看 "主注记图层属性" 的选项 (主注记图层是隐藏图层,始终位于所有其他地图图层之上,因此无法通过图层树打开其属性窗口)
用于在 "图层样式" 面板停靠栏中设置注记图层的不透明度、混合模式、绘制效果以进行交互式修改的选项
此项功能由 Nyall Dawson 开发
"修改注记" 工具现在可用于通过单击现有节点并移动来编辑注记项中的结点。用户进行交互操作遵循标准 QGIS 模式,如下所示:
左键单击开始移动
再次左键单击应用更改
右键单击可取消操作
选择一个结点并按删除键将移除该结点
双击某条线段将添加一个结点
此功能由瑞士 QGIS 用户组资助。
此项功能由 Nyall Dawson 开发
当注记项被选中时,可以通过按方向键进行移动。
此功能包括与布局项相同的交互模式使用键盘快捷键的能力:
Shift + 方向键
: 较大移动
Alt + 方向键
: 每次移动 1 像素
此项功能由 Nyall Dawson 开发
注记工具中添加了用于创建新的线和多边形注记项的功能。
支持与绘制矢量要素相同的交互操作,如捕捉、跟踪、cad 停靠、退格并移除顶点、曲线和流数字化模式等。
此功能由 QGIS 瑞士用户组资助
此项功能由 Nyall Dawson 开发
为地图工具创建一个框架来创建新的注记项,包括创建新的点文本注记项的能力。
此功能由瑞士 QGIS 用户组资助
此项功能由 Nyall Dawson 开发
添加了一个新的注记工具栏,并提供以下操作:
在当前工程中创建新的空注记图层。
"修改注记" 工具提供了一个用于编辑现有注记的接口。
修改注记工具支持的操作包括:
单击选择现有注记并在图层样式面板停靠栏中显示其属性,包括符号、参考比例、Z 索引等
左键单击选中的注记项可以进行移动;右键单击或按ESC键则取消移动,而第二次左键单击将确认移动操作。
在选择注记时按删除键将删除该注记
此功能由瑞士 QGIS 用户组资助
此项功能由 Nyall Dawson 开发
该工具的行为类似于现有的 "测量角度" 地图工具,只需要用户单击地图上的两个点并显示这些点之间的方位角度。
此项功能由 Nyall Dawson 开发
切换编辑模式操作已修改为支持在所有选中图层上激活,从而可以轻松地同时跨多个图层启动和停止编辑会话。尽管所有选中图层的编辑会话状态可能不同,但所有选中图层都将切换为活动或非活动状态,当前活动图层的当前状态将随之进行切换。此功能位于菜单项 图层 > 切换编辑模式、数字化工具栏上的 切换编辑模式 按钮以及图层上下文菜单中的 切换编辑模式 项。
此功能由 Stefanos Natsis 开发
虽然识别要素工具支持多种选择模式,但 "当前图层" 模式已扩展为支持选择图层组,并将识别所有选中图层的要素 (仅识别图层组中可见图层的要素)。
此功能由 Stefanos Natsis 开发
打开文件资源管理器窗口并直接选择文件
还修复了现有的 "文件属性" 操作,无论文件类型是什么都会显示,并且在某些情况下不会错误地显示相关信息。
此项功能由 Nyall Dawson 开发
几何生成器现在为用户提供了可选项,供用户选择应使用哪些单位返回几何图形,而不是仅支持图层 CRS 中定义的单位。这在符号与图层不关联的情况下特别有用,例如在布局项中使用的时候。
此更新提供以下单位选择:
地图单位 (默认,以前的行为)
毫米
像素
英寸
点
当选择毫米、像素、英寸或点时,@map_geometry 变量可在表达式内使用,其中包含指定单位中的要素几何图形 (相对于地图框架),而 $geometry 变量仍然可用在图层 CRS 地图单位中的表达式中。
此项功能由 Nyall Dawson 开发
已公开一个选项,允许为矢量图层上的要素符号配置参考比例。
实际这定义了相关的地图比例,配置的符号和标注大小可以在该比例下使用基于纸张的单位 (例如毫米或点) 进行引用。然后,这些单位大小将根据相关参考比例和当前地图视图的比例自动相应地缩放。
例如,如果将线图层配置为使用参考比例为 1:2000 的 2mm 线宽,将使用 4mm 线宽以 1:1000 的地图比例或 1mm 线宽以 1:4000 的地图比例进行渲染要素。
此功能由 North Road 资助,感谢 SLYR
此项功能由 Nyall Dawson 开发
现在可以通过新的反转颜色选项反转正在渲染栅格的颜色。这在很多情况下都会派上用场。例如,无需重新创建新的栅格数据集,即可将浅色栅格底图快速转换为深色底图。
此功能由 Mathieu Pellerin 开发
指定数据定义标注旋转的角度单位
此功能由 Damiano Lombardi 开发
QGIS 现在支持创建新网孔图层。
网孔创建支持以下创建格式:
新建空网孔图层
基于工程中现有网孔的新网孔框架
基于文件中现有网孔的新网孔框架
此功能由 Hydrotec 资助
QGIS 现在支持网孔框架编辑,支持确保网孔一致性的功能,并提供撤消和重做编辑操作。
This introduces the QgsMeshEditor
class to the QGIS Python API, which allows for performing edit operations, and the QgsTopologicalMesh class which is not exposed to the Python API but is used for ensuring that edited mesh elements remain topologically correct and perform data modifications.
此功能由 Hydrotec 资助
This feature has been introduced in the scope of QEP 228 which outlines the introduction of Mesh Editing tools, implements changes to the User Interface, and exposes new functionality to the API.
Mesh frame editing now supports a complete set of functionalities for controlling the editing lifecycle operations, including start, commit, roll back, and cancel, similar to vector layers.
此功能由 Hydrotec 资助
This feature has been introduced in the scope of QEP 228 which outlines the introduction of Mesh Editing tools.
Mesh editing map tool now supports the following operations:
添加顶点或面
选择顶点或面
移除顶点或面
更改顶点的 Z 值
移动顶点
Interaction with edges
Split faces
此功能由 Hydrotec 资助
This feature has been introduced in the scope of QEP 228 which outlines the introduction of Mesh Editing tools, implements changes to the User Interface, and exposes new functionality to the API.
The QGIS User Interface provides delaunay triangulation and face refinement functions, which are accessible from the context menu in the map when vertices and/ or faces are selected from a mesh layer. These options may be migrated to buttons in the mesh toolbar once further functionality has been introduced.
The QGIS API has also been extended to support advanced editing for meshes, which is introduced by a new interface abstract class QgsMeshAdvancedEditing. Derived classes of this class can be implemented to make some advanced editing on a mesh: generation of faces to add to the mesh, particular operation on many faces or vertices. The advanced editing is made by passing a QgsMeshAdvancedEditing instance to a QgsmeshEditor instance, and the editing is applied as other editing operations.
Two advanced editing functions are implemented within this feature:
德洛内三角网
Faces refinement
此功能由 Hydrotec 资助
Users can now select mesh elements within a digitized area when performing mesh editing. Each vertex of the polygon is digitized using a left click, whilst right clicking will complete and validate the polygon to select intersecting mesh elements (faces and vertices). Using the backspace key will allow the user to remove last vertex, and the Escape key will allow users to return to the normal digitizing mode.
This function supports two behavior modes with different selection predicates as follows:
Touching elements (default), or partially included/ intersecting elements will be selected (green rubber band).
Contained, or completely included elements will be selected (blue rubber band).
此功能由 Hydrotec 资助
Two actions have been added for selecting mesh elements from geometries present in existing vector layers.
After selecting vector layer geometries, the user can use these tools to select mesh elements using the touching or containing predicates.
此功能由 Hydrotec 资助
An interface has been created for selecting mesh elements by expression during mesh editing. In addition, a contextual expression function $face_area
has been added that returns the area of a mesh face.
此功能由 Hydrotec 资助
A new editing mode for the mesh transform tool allows the user to import the coordinates of a single selected vertex.
The tool button on the top right of the Transform Mesh Vertices window toggles this mode, and each time a single vertex is selected it will automatically populate the available fields for the user to adjust the vertex coordinates accordingly.
此功能由 Hydrotec 资助
Users are now able to reindex (or renumber) the vertices and faces of a mesh layer during editing. The renumbering is an optimization of the mesh with the Cuthill-McKee algorithm.
此功能由 Hydrotec 资助
When editing mesh features, users can now transform features by forcing them to conform to a surface defined by existing polylines, or break lines. Faces are forced to follow the break lines, that is, edges of encountered faces have to be on these lines. Users may select break line geometries and then use the dedicated button to transform intersecting mesh elements.
Options provided for the transform include:
Adding new vertices when the lines cut the internal edges
Interpolating the Z value of newly added vertices on the mesh or from the lines
Tolerance setting for shifting existing vertices into place and preventing the creation of new vertices along line within the specified distance
Whilst the term "break lines" is typically used to refer to polylines that constrain a surface or TIN to the defined positions, these break lines are often components of the mesh itself, and additional operations would continue to constrain the surface to these lines. This functionality specifically transforms the surface in a static manner, so that future operations are not constrained to the lines used to transform the mesh elements.
此功能由 Hydrotec 资助
User can perform geometrical transformations on a mesh using an expression to change the vertices' coordinates. All coordinates (X,Y,Z) of selected vertices can be calculated with an expression, allowing transformation of the mesh while the mesh is still valid.
With a valid expression, selecting the "Preview transform" option will calculate the new expression based mesh coordinates and identify whether the transform is valid and may be applied.
If the preview is green, the transformed mesh is valid and the user can apply the transformation. If the preview is red, the transformed mesh is invalid and user cannot apply the transformation.
Once applied, users have the option to undo or redo the operation.
此功能由 Hydrotec 资助
新设置可正确使用物理屏幕 DPI 而不是逻辑 DPI,允许在不同的连接设备 (高 dpi 和低 dpi) 以及移动应用程序 (如 QField) 中均匀呈现符号。
默认情况下禁用此设置,确保符号的缩放比例不会与 QGIS 早期版本中的符号存在差异。
此功能由 Matthias Kuhn 开发
A new control has been exposed which allows the opacity of a raster to be data defined. This allows for the varied representation of a raster layer, in various contexts, such as on different pages of an atlas, being dependent on the visibility of another layer, or adjusted by temporal variables etc.
Additionally, a "redraw layer only" temporal mode for raster layers has been added, which causes a raster layer to be redrawn on each new animation frame as in the equivalent functionality for vector layers. This may be useful in many contexts, such as when the layer uses time-based expression values like the data defined renderer opacity to fade in or out a raster layer from an animation.
此项功能由 Nyall Dawson 开发
当由点驱动控制的地图集时,布局地图项获得了对预定义比例模式的支持。这确保了当地图集要素是具有不同包络区域的点集几何图形时,可以观察到正确的结果。
此功能由 Mathieu Pellerin 开发
图例属性的 "间距" 部分添加了两个新条目:
组项缩进
子组项缩进
属于组或子组的项将右移指定的数量。当图例图斑添加到条目的左侧时,它们也将缩进。
此功能由 Jürnjakob Dugge 开发
Expressions have been added for interacting with mesh layers, with the following functions returning value related to the current vertex:
$vertex_as_point
: returns the current vertex as a geometry point
$vertex_z
: returns the Z value of the current vertex.
These two functions are contextual and need to be added in a QgsExpressionContext
with QgsExpressionContextUtils::meshExpressionScope()
for the creation of a specific QgsExpressionScope
.
此功能由 Hydrotec 资助
现在可以使用 $z
检索表达式上下文中当前要素的 z 值
此功能由 Hydrotec 资助
An affine_transform function has been added to QGIS Expressions.
This feature was developed by Antoine Facchini
A straight_distance2d function is now available in QGIS expressions for retrieving the direct/ Euclidean distance between the first and last vertex of a curve geometry feature.
This feature was developed by Antoine Facchini
A sinuosity function has been added to QGIS expressions.
This feature was developed by Loïc Bartoletti
A new pair of functions was added to the QGIS expression engine to read exif tags from image files. The two functions are:
exif(path, tag) : this function returns the value of a given tag string for the provided image file path; when the second optional parameter isn't provided, the function will return a map object containing all exif tags and their values.
exif_geotag(path) : this function returns a point geometry from the exif geotags containing in the provided image file path.
此功能由 Mathieu Pellerin 开发
The geometry snapper is now blazingly fast after benefiting from another round of optimization work. Small snapping distance values hanging QGIS forever is now a thing of the past.
This feature was funded by SwissTierras Colombia
此功能由 Mathieu Pellerin 开发
The ability to convert vertices to or from curved vertices is now supported with the Vertex tool, allowing users to convert vertices with the "C" and "O" keys.
Additionally, methods for convertVertex()
have been introduced for the QgsGeometry
and QgsCompoundCurve
objects in the QGIS API.
This feature was funded by Swiss QGIS user group
This feature was developed by Olivier Dalang
The QGIS Advanced Digitizing tools now support the entering of user-defined Z and M values, greatly improving the available control for newly digitized features such as components of 3D networks.
This feature was funded by Métropole Européenne de Lille @Jean-Roc
This feature was developed by Loïc Bartoletti
Users may now use Drag and Drop support on an external resource widget when an external storage has been defined and configured appropriately.
This feature was funded by Lille Metropole
This feature was developed by Julien Cabieces
The layer properties dialog's information panel now shows the size and last modified date of file-based datasets, removing the need to retrieve these details from a file manager. These additional details are also visible in the browser panel's information section. For datasets formed of more than a single file, the size will reflect the sum of all the auxiliary/ sidecar files forming the dataset.
图像28|
此功能由 Mathieu Pellerin 开发
QGIS 浏览器中文件的 "管理" 子菜单中添加了重命名操作。如果重命名的文件对应于具有多个附加或 Sidecar 文件的空间数据集,这些文件将相应地进行重新命名。
此外,如果文件是当前工程中存在的图层,用户会收到警告,并询问是否要相应地自动更新所有图层路径。
此项功能由 Nyall Dawson 开发
GPS 工具插件 "添加 GPX 图层" 的功能已移至数据源管理器中的 "添加 GPS 数据" 页面。
此项功能由 Nyall Dawson 开发
从历史上看,当使用 GPKG 格式的拖放功能时,仅表示要加载到 QGIS 中的要素图层。
当使用拖放功能将 GPKG 文件添加到 QGIS 画布时,QGIS 将显示嵌入 GPKG 中的工程。
此项功能由 Nyall Dawson 开发
QGIS 现在包含一个外部存储 API,这符合 QEP 196 中概述的建议。
包括以下功能:
外部存储 API
包含所有外部存储后端的注册表
SimpleCopy 外部存储:将选中的外部资源存储在磁盘上的特定位置
支持 WebDAV
此外,还添加了一个控件,允许外部存储后端和组件的配置和可视化操作。当选择外部存储时,存储模式 (文件或目录) 控件当前不可见,并且相对路径设置被隐藏,这是因为相对路径与外部存储数据不相关。
This feature was funded by Lille Metropole
This feature was developed by Julien Cabieces
现在可以使用拖放设计器在对话框中进行图层操作
此功能由 Kanton Solothurn, Amt für Geoinformation 资助
此功能由 Alessandro Pasotti 开发
A new feature has been added to allow the selection of a placeholder image which may be used in the legend item of a raster or vector layer. This is very useful in certain instances such as when using raster layers with QGIS server, preventing long lists of palleted values from GetLegendGraphic requests and instead returning a tailored result, among various other use cases.
This feature was funded by Canton of Glarus
This feature was developed by mhugent
A long awaited feature has been for QGIS to support simple if() statements in the raster calculator.
Although conditional statements have been supported in the raster calculator for a while, the syntax and structure of the expressions was often verbose and complex.
The raster calculator will now support simple conditional statements with the common syntax of if ( condition , option1 , option2 )
whereby if the condition evaluates to true, the first option will be used, otherwise the second option will be used.
This feature was developed by Francesco Bursi
Virtual raster data provider support has been added to the QGIS raster calculator, which now allows users to perform raster calculator operations without specifying an output file or writing the resulting raster to disk.
This option is enabled via the UI by checking the "Create on-the-fly raster instead of writing layer to disk" checkbox in the raster calculator, and is also supported via the PyQgis API.
Resulting raster layers may be used in further analysis operations and allow for user specified raster names. Where a name is not provided for the resulting raster, it will be named according to the formula used to generate it.
This feature was developed by Francesco Bursi
An annotation layer parameter type has been added to the QGIS Processing Framework, which includes a new algorithm for converting main annotation layer items to secondary annotation layers. This is useful for moving items created in the main layer to a secondary layer, so that the item placement can be adjusted within the layer stack.
此项功能由 Nyall Dawson 开发
Add a choice between performing GET or POST requests when downloading a file using the FileDownloader processing tool.
If the POST parameter is specified, some DATA can be added in the query.
This is useful in many contexts, such as for sending longer requests to the Overpass API using POST to download OSM data.
This feature was funded by 3Liz
This feature was developed by Étienne Trimaille
New algorithms have been provided which allow users to select or extract features from one layer which are within a certain distance of features from another reference layer.
The distance checking is heavily optimized, using spatial indices to restrict the number of features retrieved, and also automatically handling off the check to the database server for layers using the PostGIS provider.
Additionally, the distance parameter may be a data-defined. property
This feature was funded by QTIBIA Engineering
此项功能由 Nyall Dawson 开发
QGIS 地理处理中添加了一个新的点云参数---框架,允许过滤地图图层中的点云图层和多个图层参数。这为原生点云算法打开了大门,并改进了对第三方提供商的点云支持。
此功能由 Alexander Bruy 开发
GPS 工具的最后一项功能已移植到三种新的地理处理算法中,即:
转换GPS数据
将GPS数据上传到设备
从设备下载GPS数据
因此,GPS 导入插件已变得多余并已从 QGIS 中完全移除。
此项功能由 Nyall Dawson 开发
转换 GPX 要素类工具已从 GPS 工具移植到新的地理处理算法,该算法使用 GPSBabel 工具将 GPX 要素从一种类型转换为另一种类型 (例如,将所有航点要素转换为路径要素)。
它的设计目的是作为工作流的替换品,该工作流之前使用 GPS 工具插件中的功能,但作为 QGIS 处理框架的一部分,其所有好处和改进都会自动实现。
此项功能由 Nyall Dawson 开发
该算法允许用户添加一个带有整数的列,该整数将从 START 递增到限制,并有可能在该组之后的 START 值处继续分组。
包括一个称为 "取模计数" 的选项,如果达到取模值,将计数重置为起始值,对取模选项使用 0 值将禁用它。
This feature was developed by Loïc Bartoletti
A brand new duration parameter was added to the processing framework to facilitate the creation of temporal-related algorithms.
此功能由 Mathieu Pellerin 开发
QGIS 3.22 ships with a brand new spatiotemporal ST-DBSCAN clustering algorithm which clusters point features based on a 2D implementation of spatiotemporal density-based clustering of applications with noise (ST-DBSCAN) algorithm.
For more details, please see the following papers:
Ester, M., H. P. Kriegel, J. Sander, and X. Xu, "A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise". In: Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining, Portland, OR, AAAI Press, pp. 226-231. 1996
Birant, Derya, and Alp Kut. "ST-DBSCAN: An algorithm for clustering spatial–temporal data." Data & Knowledge Engineering 60.1 (2007): 208-221.
Peca, I., Fuchs, G., Vrotsou, K., Andrienko, N. V., & Andrienko, G. L. (2012). Scalable Cluster Analysis of Spatial Events. In EuroVA@ EuroVis.
此功能由 Mathieu Pellerin 开发
In line with the discussion in QEP 226, the SAGA, GRASS, and OTB providers have been separated into independent plugins.
This should prevent issues with the loading of the Processing plugin in cases where any one of these providers is broken. It will also make it easier to convert them into third-party plugins in the future.
The SAGA and GRASS plugins are enabled by default, leaving the UX unchanged. The OTB provider can be enabled in the Plugin Manager if necessary, however, the enabling or disabling of any of these providers is now performed via the Plugin Manager as with any other plugin.
This is mostly an internal change, with the only visible change on the part of end-users being that the Plugin Manager is used to activate or deactivate the SAGA, GRASS, and OTB providers.
此功能由 Alexander Bruy 开发
Historically, when exporting keyboard shortcuts to an XML file, QGIS would only export user-defined shortcuts. In instances where no customized shortcuts were found, an empty file would be created.
A new option has been provided to export all available keyboard shortcuts to the resulting XML file, or to generate a PDF output with a list of all defined QGIS shortcuts.
此功能由 Alexander Bruy 开发
The GPS babel configuration settings has been moved from a settings page in the deprecated GPS Tools plugin, to a new page in the main settings dialog.
此项功能由 Nyall Dawson 开发
QGIS Desktop historically supported the definition of whether a particular project used an absolute or relative structure from the project properties, however, the default setting for this functionality was always configured to use relative paths.
A new setting has been exposed which allows users to set the default path structure to use either absolute or relative for new projects under the program options. In much the same way the default project format may be configured to use qgz or qgs, this is made available as a global property specific to each user profile.
This feature was developed by mhugent
In the qgis_global_settings.ini
file, it's possible to set the max image cache size in bytes.
The cache is used for caching symbology and layout images, If high resolution images are used for printing layout, then this value should be increased accordingly.
Default value is 100mb.
This feature was funded by 3Liz
This feature was developed by David Marteau
The delete action used from the QGIS browser has been improved in various ways, including:
The action is more consistent and applied to all file type items
Multiple file deletion is now supported by selecting multiple file items in the browser which includes a confirmation prompt
Before deleting files, the current project is scanned to see if it is using any of the files. If so, a prompt is shown asking users if they want to cancel the deletion, or delete and remove layers, or delete and retain layers.
此项功能由 Nyall Dawson 开发
As a part of the ongoing efforts to port the table management functionalities from the DB Manager to the QGIS Browser, as detailed in QEP 205, a new SQL dialog is available from the browser panel which provides the ability to execute queries and SQL statements for the following elements:
DB connections
Schema items
Table items
The implementation also supports the following advanced functionalities:
A multi-threaded implementation for both API token fetching and row fetching results in non-blocking GUI operations
Fully interruptible API
Support for progressive loading of features in the results view (fetchMore API)
此功能由 Alessandro Pasotti 开发
Addition of transaction support to the MSSQL data provider.
There are no GUI-related changes, as users can enable transactional editing as with other providers. This is done by going to the Project Properties and checking "Automatically create transaction groups where possible" in the Data Sources tab.
By default, a running transaction in MSSQL will block other clients from accessing the same data. For example, if one client starts a transaction and adds or modifies a feature in a table, other clients will get blocked when trying to read any data from the table until the transaction is completed.
There is database-level configuration option, READ_COMMITTED_SNAPSHOT
, which is OFF
by default.
Activating this will change the behavior to function in a similar fashion as other RDBMS systems such as PostgreSQL, in that transactions do not cause blocking and enables the database to support multiple versions of data. This is a database-level property configured by the administrator and can not be automatically set by QGIS when connecting to the database, however it may be activated using the following query:
ALTER DATABASE my_db SET READ_COMMITTED_SNAPSHOT ON
In most instances where transactions are desired, activating this option is likely recommended to prevent freezing in QGIS or other clients.
This feature was funded by ms.GIS
This feature was developed by Lutra Consulting (Martin Dobias)
A check box has been added to the sublayer selection dialog to control whether system and internal tables should be shown. This will be turned off by default, but will be useful in instances where users have a particular need to load a system table into QGIS for viewing or manipulation purposes.
此项功能由 Nyall Dawson 开发
Previously this was supported for File Geodatabases and shp.xml metadata, but it is now also supported for ESRI personal geodatabases (.mdb files)
Requires GDAL 3.4+
此项功能由 Nyall Dawson 开发
This provider uses the QgsProviderRegistry::querySublayers API to automatically create appropriate browser data items for all file based sources, regardless of the underlying provider whether it may be mdal, gdal, ogr, pdal, or ept.
This allows the merging of sources which can be handled by multiple different providers into single container items in the browser, which may be expanded to display all related or nested elements. It is common for many file types, such as GeoPDF or KML/KMZ files to may contain raster and vector layers, or .nc files which may be accessed as a mesh or raster depending on the data provider.
此项功能由 Nyall Dawson 开发
QGIS Server historically only supported the provision of a single metadata URL, but will now allow multiple metadata endpoints to be specified in the service definition.
This feature was funded by Ifremer
This feature was developed by Étienne Trimaille
It's quite a common practice to have arguments like -v
and --version
for tools accessed via command line interfaces (CLIs), so new --version
and it's alias -v
have been added to identify QGIS version information for the following tools:
qgis_process
qgis_mapserv.fcgi
qgis_mapserver
This feature was funded by 3Liz
This feature was developed by Étienne Trimaille
An additional writeSingleTile
method in QgsVectorTileWriter
has been exposed to enable the encoding of a single vector tile to a memory buffer. This may support workflows for PyQgis and QGIS Server which include support for vector tiles.
This feature was developed by David Marteau
The QGIS API has been extended to support encoding and writing vector tiles in a different CRS than EPSG:3857.
Note that according to the Mapbox Vector Tile specification, a Vector Tile represents data based on a square extent within a projection. A Vector Tile should contain information about its bounds and projection. The file format assumes that the decoder knows the bounds and projection of a Vector Tile before decoding it.
This feature was funded by Ifremer
This feature was developed by rldhont
An option has been added to QgsFeatureRequest to request features within a certain distance of a reference geometry
This is made possible by the new enum Qgis::SpatialFilterType which has been added to reflect whether a request uses no spatial filter, a BoundingBox filter (via setFilterRect), or the new DistanceWithin filter.
For example, the following request will retrieve all features within 50 map units of the provided linestring:
QgsFeatureRequest().setDistanceWithin(QgsGeometry.fromWkt('LineString(0 0, 10 0, 12 1)'), 50)
Distance within filters are treated like bounding box filters, in that they are independent of any attribute/id filters (such as feature ids or expressions).
Provider feature iterators can potentially delegate the distance within search to the backend. So, for example, the PostgreSQL data provider could use an ST_DWithin
query for optimal index use.
此项功能由 Nyall Dawson 开发
An API has been added to allow a string parameter to show as a combobox with preset choices in processing GUI tools.
In some circumstances, it is desirable to restrict the values available when a user is asked to enter a string parameter that should match a list of predetermined "valid" values, yet these values will vary installation by installation.
For example, a "printer name" parameter, where it may be desired that users may pick a name value from a list of printers installed on the system, but since the printer names will vary between installations, an enum parameter is not a suitable choice.
This is now supported by setting the "value_hints" option in the widget wrapper metadata, as demonstrated below.
Whilst this provides a mechanism for guiding users to select from valid string values when running a Processing algorithm through the GUI, it does not place any limits on the string values accepted via PyQGIS codes or when running the algorithm via other means that do not use the GUI. Algorithms should gracefully handle other values accordingly.
param = QgsProcessingParameterString( 'PRINTER_NAME', 'Printer name')
# show only printers which are available on the current system as options
# for the string input.
param.setMetadata( {'widget_wrapper': { 'value_hints': ['Inkjet printer', 'Laser printer'] } })
此项功能由 Nyall Dawson 开发
The QgsExifTools class can now retrieve individual exif tags from images using the readTag function.
E.g.: QgsExifTools.readTag('/my/photo/0997.JPG'), 'Exif.Image.DateTime')
Known exif tags representing time values are automatically converted to Q{Date,Time,DateTime} objects. This makes working with those tags much easier and integrates well with other parts of the QGIS API.
此功能由 Mathieu Pellerin 开发
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.16 backport commit (GitHub) |
Remark |
---|---|---|---|---|
WFS / GML parse issue, but QGIS loads GML as file fine? |
Not a bug |
|||
POST request to modify timestamp does not respect defined format |
Wontfix / not a bug |
|||
Warning message 'Cannot create temporary SpatiaLite cache' when adding many WFS-layers |
复制 |
|||
QGIS creates invalid filter for WFS GetFeature request |
||||
WFS Layer is not rendered when requested CRS is not matching project CRS and "Only request features overlapping the view extent" option is set |
||||
Adding a WFS layer with filter for non-existent attribute leads to broken layer |
||||
New Shapefile layer silently overwrite existing files |
||||
QGIS on linux crashes when opening many geopackages at once |
否 |
|||
Crash in QgsPointCloudLayerRenderer when closing while rendering still active |
||||
Geoprocessing tools cause libgeos to throw SIGBUS |
N/A |
|||
QGIS crash after loading WMS layer via script and zooming in and out |
否 |
Mostly a usage issue |
||
Integer unexpectedly large in GeoPackage |
Not a bug |
|||
Attributes - Update All button - Creates Corrupted Fields - GeoJSON file |
N/A |
|||
WFS connection manager: GetCapabilities document's URLs not being used consistently |
||||
QGIS crashes if network connexion is lost and a raster layer is loaded |
N/A |
These bug fixes were funded by QGIS.ORG (through donations and sustaining memberships)
Bugs fixed by Even Rouault
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.16 backport commit (GitHub) |
Remark |
---|---|---|---|---|
Data Source Manager - ArcGIS REST Server - dialog/window closes when adding a layer |
n/a |
|||
"Display no data value as" option is not available in raster layer properties |
Not critical |
|||
Raster layer not rendering after data-source change when combined with certain layout element |
||||
Update selected feature ids before emitting featuresDeleted |
Not critical |
|||
sample() and identify() from QgsRasterDataProvider don't always provide the same value |
||||
Copying objects containing multiline strings into another project does not work properly |
Not critical |
|||
projecting label coordinates for multiPoint geometry crashes QGIS |
否 |
|||
Copy/paste style category "Form" is missing some settings |
Maybe won't fix, checking with m-kuhn and 3nids |
|||
Adding a new point onto a memory multipoint layer kills QGIS |
||||
Attributes - Update All button - Creates Corrupted Fields - GeoJSON file |
否 |
|||
WMS parent layer added via QGIS Browser doesn't use default style |
否 |
|||
"Display nodata as" color widget is not automatically updated in layer styling panel |
n/a |
|||
PostGIS error while changing attributes (field value and geometry): prepared statement "updatefeature" already exists |
queued |
|||
Attribute Table in Layout Manager Font Style Override Doesn't Show Fields |
queued |
|||
WFS Layer from QGIS Server is not rendered because of an issue with coordinate axis order |
Not critical |
|||
Not rendering with identity transform raster created with rasterio |
Checked out, probably not a bug |
|||
SQL query from DB Manager is executed twice |
queued |
|||
can't use layers where name starts with number in virtual layer |
queued |
|||
Show Feature Count counts null in zero category |
queued |
|||
Copying table by Drag&Drop in Browser (2) doesn't copy the table structure correctly |
否 |
|||
Wrong histogram plot if raster data type is byte |
queued |
|||
Inconsistency regarding pattern handling for QgsServerOgcApiHandler |
queued |
|||
QGIS Server - WMS Request GetPrint fails with ATLAS_PK |
queued |
|||
projectsInDatabase key is not stored to xml for PostGIS connections |
queued |
|||
Changing values in Form mode of attribute table doesn't set active the Save button |
queued |
|||
Create spatialite trigger with DBManager do not work |
否 |
These bug fixes were funded by QGIS.ORG (through donations and sustaining memberships)
Bugs fixed by Alessandro Pasotti
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.16 backport commit (GitHub) |
Remark |
---|---|---|---|---|
QGIS 3.20 on Mac crashes when certain Qt signals are emitted |
n/a |
|||
Unable to view LAS files written in WGS84 (EPSG:4326) coordinates |
duplicate of #41765 |
|||
macOS: Symbol not found: __cg_jpeg_resync_to_restart when reprojecting raster layer with GDAL warp on macOS |
否 |
否 |
Not an issue with the nightly (qgis-deps-0.9) anymore |
|
Data Source Manager incorrectly identifies PostGIS raster extent on macOS |
queued |
|||
icons not visible in the Layer Notes |
n/a |
|||
unable to open any ascii FLO-2D files in Mesh Layer |
unreported |
n/a |
||
encoding issue when using GRASS processing tool on macOS |
Not critical - workaround exists |
|||
Matplotlib QT backend imports not working on MacOS |
investigation |
These bug fixes were funded by QGIS.ORG (through donations and sustaining memberships)
Bugs fixed by Lutra Consulting (Peter Petrik)
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.16 backport commit (GitHub) |
Remark |
---|---|---|---|---|
Make QgsGeos::prepareGeometry and QgsGeos::cacheGeos idempotent |
unreported |
|||
Add a distanceWithin method to the QgsGeometryEngine virtual class |
unreported |
|||
Allow calling testdata_pg.sh from any directory |
unreported |
|||
Make TestPyQgsPostgresProvider.testGeneratedColumns idempotent |
unreported |
|||
Improve PostgreSQL test DB setup documentation and script |
unreported |
|||
Add GEOS DistanceWithin API |
||||
Make Postgres provider test idempotent |
||||
Use GEOSDistanceWithin when available |
unreported |
|||
Reduce GEOS conversions and preparations of geometries |
unreported |
|||
More heuristics to determine whether to iterate over target source |
unreported |
These bug fixes were funded by QGIS.ORG (through donations and sustaining memberships)
Bugs fixed by Sandro Santilli
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.16 backport commit (GitHub) |
Remark |
---|---|---|---|---|
More const in geometry |
Not reported / performance |
|||
QgsFeature::setId improve documentation with a warning |
||||
Geometry Checker: Enlarge FeatureID |
||||
VertexTool. Fixes move vertex on Z layer if CRS are differents (with Vincent Cloarec) |
Not reported |
Not backported. Introduce new methods. |
||
Fix Z/M dimension URI via DB Manager. |
||||
[FIX] GeometryValidator init curve support |
Not reported |
|||
Compile fails, 'None' is not a member of 'QgsField::ConfigurationFlags' |
Wontfix / not a bug |
|||
Union fails when using a point and a polygon layer |
Difference between GEOS 3.8 and 3.9 |
|||
Rings order in MultiPolygon WKT string may leave overlapping parts when deleting holes (native:deleteholes) |
Wontfix for now. We can use Geos to fix the issue, but will remove Z/M and segmentize arc. |
These bug fixes were funded by QGIS.ORG (through donations and sustaining memberships)
Bugs fixed by Loïc Bartoletti
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.16 backport commit (GitHub) |
Remark |
---|---|---|---|---|
Regression: trying to run the multipart to singleparts algorithm throws a python error |
These bug fixes were funded by QGIS.ORG (through donations and sustaining memberships)
Bugs fixed by Denis Rouzaud
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.16 backport commit (GitHub) |
Remark |
---|---|---|---|---|
Styles in database not working for postgres provider and non-geometric layers |
||||
"Layer notes" icon is not displayed when copy-pasting a style |
no need |
|||
Ambiguous JSON errors |
Failed to reproduce |
|||
Attribute table: missing features when copying/pasting from scratch layer |
Can’t reproduce (Closed) |
|||
Form view shows wrong image attachments when scrolling through features |
Already fixed |
|||
Build Virtual Raster tool creates an additional layer when selecting and reordering layers |
||||
Attachment widget options are reset when you reopen the field widget properties |
复制 |
|||
Cleared feature attributes not acting like they have been cleared, and preventing saving of layer |
||||
[Postgres] default value displayed instead of NULL |
||||
a feature copy/paste sets a NULL field to its "default value" in a geopackage |
Question: Do we evaluate default value on NULL field when copy-pasting feature ? |
|||
QGIS expression builder can not resolve PostgreSQL text arrays correctly |
These bug fixes were funded by QGIS.ORG (through donations and sustaining memberships)
Bugs fixed by Julien Cabieces
Bug Title |
URL issues.qgis.org (if reported) |
URL Commit (Github) |
3.16 backport commit (GitHub) |
Remark |
---|---|---|---|---|
Don't reset mesh layer styling when changing data source for layer |
N/A |
|||
Fix crash when rendering clipped features and clipped shape results |
||||
Fix crash when using map label tools with projects containing vector tile layers |
||||
Fix symbol sizes in Meters at Scale cannot be negative |
Not suitable for backport |
|||
Fix overwriting default style of geopackage layers |
||||
Fix hang when rendering lines with dash patterns with all 0 values |
||||
Update default toolbar locations |
unreported |
N/A |
||
Don't overwrite existing data defined property expressions when an interactive map tool is used to move/rotate/edit labels |
N/A |
|||
Fix crash on exit with CAD dock open |
unreported |
N/A |
||
Fix rule based symbology doesn't work for columns with '-' in name |
||||
Avoid hangs when drawing symbol icons using inappropriate sizes in map units |
Not suitable for backport |
|||
Fix inappropriate display of z/m values in cad dock when non-z/m layer is selected |
unreported |
N/A |
||
Implement more responsive cancelation of map render for maps using complex effects |
Not suitable for backport |
|||
Allow CAD dock to be used for geographic CRS, but only allow the x/y/z/m constraints to be set |
unreported |
Not suitable for backport |
||
Fix crash when opening symbology properties of a layer set to embedded renderer which is not compatible with embedded renderers |
N/A |
|||
Fix QgsMapToolCapture coordinates when associated with a non-vector layer where the layer CRS != canvas CRS |
unreported |
N/A |
||
Fix geometry generator rendering outside of vector layers |
Not suitable for backport |
|||
Fix color customisation is lost when configuring renderers using geometry generators |
Not suitable for backport |
|||
Fix rendering of interpolated line symbol layer outside of vector layers |
N/A |
|||
Fix QgsGeometry.fromPolygonXY docs |
N/A |
|||
Fix digitizing features using CAD dock when layer CRS != canvas CRS |
unreported |
N/A |
||
Fix offset background when drawing rotated text |
pending |
|||
Correctly escape complex source strings in processing history log |
pending |
|||
Fix handling of ADF files in browser |
unreported |
Not suitable for backport |
These bug fixes were funded by QGIS.ORG (through donations and sustaining memberships)
Bugs fixed by Nyall Dawson