QGIS 3.4 LTR的变更日志

image0

QGIS 3的首次长期发行(LTR)。QGIS 3.4刚刚发布。在5个整合点发布(3.4.5)之后,它将在2019年2月替换包存储库中以前的LTR(请参见 release schedule )这是该项目的一个巨大飞跃——我们基于3.x平台的第一个长期版本。对于从2.18 LTR迁移过来的用户,在这个新的LTR版本中有大量的新特性和有效的更改。请记住,3.x插件与2.x插件不兼容,因此请仔细检查插件的使用情况-如果可能,还可以帮助将旧插件迁移到新平台。如果您还没有这样做,请查看 Version 3.0Version 3.2 了解3.4版本中的全部变更范围。

Thanks

我们要感谢开发人员、文档编制人员、测试人员以及所有在那里自愿投入时间和精力的人(或者为他们提供资金)。从QGIS社区,我们希望您喜欢这个版本!如果你想捐献时间、金钱或参与到使QGIS更棒的工作中,请漫步至 qgis.org 伸出援手!

QGIS由捐助者和维持成员提供支持。在我们的网站上可以看到对该项目作出重大和小型财政捐助的捐助者的最新名单。 donors list . 如果您想成为正式的持续会员,请访问 our sustaining members page 详情。支持QGIS有助于我们为每六个月一次的开发人员会议提供资金,维护项目基础设施并为错误修复工作提供资金。下面提供了当前支持者的完整列表-非常感谢所有支持者!

qgis是免费软件,您没有义务支付任何费用来使用它-事实上,我们希望鼓励人们广泛地使用它,无论您的财务或社会地位是什么-我们相信赋予人们空间决策工具将导致一个更好的社会为全人类。

image1

一般

特点:Flatpak

QGIS现在可以作为Flatpak应用程序在 flathub Flatpak(以前称为xdg应用程序)是一个软件实用程序,用于Linux桌面计算机的软件部署、包管理和应用程序虚拟化。它允许用户在Linux上安装不同的QGIS版本,而无需重新编译或使用Docker。它是一个包含所有库的完整包,并且使用自己的用户配置文件位置。所以你需要一些磁盘空间和使用flatpak的新习惯,但是它很震撼!

image28

此功能由 Aleix Pol

此功能由开发 Aleix Pol

特点:SVG文件可以嵌入到项目和符号中

允许将符号、标签等的SVG图像直接嵌入项目文件(或QML样式或QPT打印模板!)将SVG编码为标准base64字符串。

此外,可以从项目和符号中提取嵌入的文件,并将其保存回基于磁盘的SVG文件。

此功能由 SMEC/SJ

此功能由开发 Nyall Dawson

表达

特点:新的表达式函数和变量

QGIS 3.4中增加了许多新的表达式函数。其中包括许多用于处理和操作数组和映射(字典)对象的简便函数。

  • json_to_map :将JSON编码的字符串值转换为映射(字典)类型对象

  • map_to_json :将map(dictionary)类型对象转换为json编码的字符串值

  • hstore_to_map :将hstore值转换为map(dictionary)类型对象

  • map_to_hstore :将映射(字典)类型对象转换为hstore值

  • array_foreach :循环数组并对数组中的每个项执行表达式,返回包含每个计算值的新数组

  • array_filter :根据表达式筛选数组

  • raster_value :返回从指定点的栅格图层采样的值

  • to_dms :将数值转换为度、分、秒格式的字符串

  • to_dm :将数值转换为度数、分钟格式的字符串

  • line_substring :返回直线(或曲线)几何图形中介于指定起点和终点距离(从直线起点测量)之间的部分。Z和M值从现有值线性内插。

  • 生成系列(开始、停止、步骤):创建包含数字序列的数组。

此外,一些新变量也可用于QGIS表达式:

  • @canvas 光标点:包含一个点值,表示鼠标光标在主地图画布中的当前位置。

  • @map 图层:包含在地图中可见的所有图层的数组

  • @map 层层ID:包含地图中可见层的所有层ID的数组

image2

此功能由开发 Etienne Trimaille, Matteo Ghetta, Matthias Kuhn, Mathieu Pellerin, Nyall Dawson

功能:表达式生成器的代码完成

在表达式编辑器中自动完成代码。

  • 变量、函数名和字段名是在编写表达式时自动提出和插入的。

  • 函数参数在填充时显示

image3

此功能由 OPENGIS.ch

此功能由开发 Matthias Kuhn (OPENGIS.ch)

地图工具

特征:基于现有多边形识别或选择特征

选择/识别现有多边形覆盖的特征通常很有用。为此,用户可以使用“按多边形选择特征”和“按多边形标识特征”工具,但需要手动跟踪感兴趣的多边形。此新功能允许用户右键单击地图并从弹出菜单中选择该位置的现有多边形功能-该多边形将用作选择或标识的输入。

image4

这一特色由莱斯特郡议会资助。

此功能由开发 Peter Petrik (Lutra Consulting)

用户界面

功能:在文件管理器中自动选择导出的文件

每当消息栏项链接到创建的文件(例如,导出布局或地图层后),该链接现在将直接在操作系统文件浏览器中打开包含该文件的文件夹,并预先选择创建的文件。从qgis导出文件后,这是一个非常方便的快捷方式,可以加速文件操作!

image5

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

功能:为禁用的欢迎页面项目新建“打开目录”选项

在欢迎页面的右键单击上下文菜单中,此新选项用于禁用条目,允许用户在文件管理器中打开最接近原始项目位置的现有路径,以帮助他们重新定位丢失/移动/重命名的项目。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

功能:临时划痕层的UX改进

当需要“丢弃”层时,例如在多个步骤中预处理数据时,qgis中的临时划痕层非常方便。但是,对于那些没有意识到当当前的QGIS项目关闭时,层的内容将永久丢失的统一用户来说,它们可能是一个陷阱。相应地,添加了一个新的指示器图标,该图标显示在层树中任何临时草稿层旁边,使其立即清除仅临时的层。

将这些临时层转换为永久的基于磁盘的格式也要容易得多。您可以单击新指示器图标或从层上下文菜单中选择“永久”。然后,qgis将提示输入保存临时图层的位置,然后将其替换到位(保留相同的图层ID、样式、表单设置等)。

image6

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

功能:任务管理器改进

qgis任务管理器小部件(在后台任务运行时显示在状态栏中)现在显示长时间运行的后台任务的估计剩余时间和完成时间。这个估计到达时间是根据任务的运行时间和当前进度用一个简单的线性插值计算出来的,并且允许用户知道他们是否只有时间在办公室厨房里做一个实例咖啡,或者在完成长时间的处理任务之前在街区里走来走去喝一杯咖啡师做的咖啡……

此外,QGIS在更多平台和场合上使用标准的操作系统进度报告机制。一些长时间运行的任务(不在后台运行)如Atlas导出现在通过操作系统机制显示它们的进度,并抛出方便的完成通知。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

功能:样式管理器改进

qgis样式管理器对话框(允许用户设置和管理自己的符号库和颜色渐变)现在以非模态方式打开,因此它现在可以与主qgis窗口一起使用(就像布局管理器对话框和打印布局设计器窗口一样)。

我们还改进了图层样式停靠中符号的预览,添加了一个切换开关,在大图标视图和符号的详细列表视图之间切换。悬停在符号(和颜色!)现在显示符号的大预览。最后,我们让符号列表更适合于高dpi。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特点:抛光浏览器面板界面和体验

为了改进浏览器面板的用户界面和体验,本版本做了大量工作,包括hidpi修复、压缩矢量/栅格数据集改进和刷新的图标集。

还添加了一些功能,包括直接从浏览器上下文菜单创建新目录的功能。浏览器现在还显示了更完整的SQL Server连接选项范围,与其他数据库连接可用的选项相匹配。

image8

此功能由Mathieu Pellerin(Imhere Asia)、Nyall Dawson(North Road)开发。

功能:QML图表和绘图小部件

在QGIS 3.4中增加了一种新型的矢量层窗体控件,用于在属性窗体上显示图形化的、吸引人的交互项,如图表或技术图形。小部件具有灵活的配置,包括示例模板和表达式支持。

image9

此功能由 QGIS Project

此功能由开发 David Signer and Matthias Kuhn (OPENGIS.ch)

符号学

特征:网格层样式

  • 从属性面板向网格层添加数据集

  • 属性面板中的信息和源面板

  • 活动数据集的选择(属性或样式面板)

  • 轮廓/比例尺的样式(属性或样式面板)

  • 网格框架的样式(属性或样式面板)

  • 矢量箭头的样式(属性或样式面板)

此功能由 Lutra Consulting

此功能由开发 Peter Petrik (Lutra Consulting)

特征:在渐变渲染器中分类对称

此功能由https://github.com/pierrelocq资助

此功能由https://github.com/pierrelocq开发

功能:部分QML导出和导入

导出和导入样式时 .qml 文件现在可以选择部分的子集。这允许在忽略其他配置的同时保存和恢复部分层配置。例如,可以只导出层的符号,当将此QML样式文件导入层时,表单和小部件或其他属性上的任何配置都不会受到影响。使用复制/粘贴时,也可以只处理样式的单个部分。

image10

此功能由 qwat group

此功能由开发 Denis Rouzaud (OPENGIS.ch GmbH)

数字化

功能:GPS跟踪改进

QGIS 3.4扩展了内置GPS跟踪支持,增加了“采集间隔”和“距离阈值”参数。当接收器处于静态状态时,这些选项可用于保持光标静止。

此功能由 Andrea Rossi

此功能由开发 Andrea Rossi

功能:高级数字化基座中的更多角度选择

增加了选项,允许在施工模式下捕捉到5/10/15/18/22.5度。

image11

此功能由 lbartoletti

此功能由开发 lbartoletti

特征:顶点工具只能在当前层上工作

现在,新顶点的效率提高了很多。它可以同时移动所有可编辑层的顶点,这对于保持跨层拓扑非常有用。然而,在许多情况下,我们中的许多人不想同时修改所有层。为此我们添加了顶点映射工具的变体。

image12

此功能由 Oslandia

此功能由开发 Paul Blottiere (Oslandia)

特征:添加反转线地图工具

期待已久的功能!没有更多的外部插件或算法来逆转一行的方向!

image13

此功能由 OSLANDIA

此功能由开发 Loïc Bartoletti

特征:几何精度

矢量层有一个精确的配置选项。精度定义了保存节点位置的精度。新几何图形或已编辑几何图形的每个节点都将捕捉到此分辨率的网格。数字化时,显示网格以指导用户。

image14

此功能由 Kanton Solothurn

此功能由开发 Matthias Kuhn (OPENGIS.ch)

功能:自动删除重复节点

在矢量图层上添加或编辑几何图形时,QGIS可以自动从几何图形中删除重复节点。此选项可在矢量层的数字化选项卡中配置。

此功能由 Kanton Solothurn

此功能由开发 Matthias Kuhn (OPENGIS.ch)

特征:检查几何有效性

如果激活此选项,则可以检查每个新几何图形或编辑的几何图形的有效性。当当前编辑会话产生错误的几何图形时,这允许透明地与用户通信。

image15

此功能由 Kanton Solothurn

此功能由开发 Matthias Kuhn (OPENGIS.ch)

功能:编辑时检查拓扑

可以在层上激活拓扑检查。在新添加和编辑的几何图形上,可以执行拓扑检查。保存层或单击几何验证面板上的拓扑检查按钮时,将执行检查。

以下检查可用:

  • 缝隙

  • 重叠

  • 相邻多边形上缺少顶点

这建立在几何检查器插件的功能之上,该插件由 Sourcepole .

image16

此功能由 Kanton Solothurn

此功能由开发 Matthias Kuhn (OPENGIS.ch)

数据管理

特点:QGIS项目翻译

与qgis和插件一样,这些项目也是通过qt转换过程进行转换的。意思是,它根据qt编译的翻译源文件进行翻译 (.qm 文件)。当用户打开项目时,qgis会检查 .qm 文件放在同一文件夹中,如 .qgs 文件,与 .qgs 文件并将语言代码作为用户语言的后缀(在QGIS设置中配置的语言)。要创建翻译,在项目设置中,有一个选项可以生成 .ts 文件,可由qt-linguist或transifex等程序编辑。

更多信息 this blog post

此功能由 QGIS Usergroup Switzerland and QGEP Project

此功能由开发 David Signer (OPENGIS.ch)

功能:按需切换属性表停靠模式

属性表工具栏中添加了一个按钮,用于按需在停靠模式和窗口模式之间切换。以前,用户必须更改“设置”对话框中的选项并打开一个新表,以便在固定/未固定模式之间切换,但如果您决定这样做,将很痛苦。 之后 一张桌子已经打开了,您想停靠/卸下它…!

image17

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

功能:新的定位器过滤器,用于搜索所有图层

添加了一个新的定位器过滤器,允许用户在 all 层在其项目中,通过层的显示表达式。

可以使用前缀“af”激活过滤器,也可以通过qgis选项->定位器->所有层中的功能使其成为默认搜索。显示表达式在“显示”选项卡下的向量层属性中定义。在“数据源”选项卡下的“项目属性”对话框中,可以将各个图层标记为不可搜索。

image18

此功能由 Opengis.ch

此功能由开发 Denis Rouzaud

功能:在图层树中突出显示不可移动(必需)图层

对于当前项目中标记为“必需”的任何层,将显示新的指示器“锁定”图标。此图标向用户提供即时反馈,即无法从项目中删除特定层。

通过“项目属性”对话框的“数据源”选项卡配置所需图层。

image19

此功能由 Arpa Piemonte (Dipartimento Tematico Geologia e Dissesto) within ERIKUS project

此功能由开发 Martin Dobias (Lutra Consulting)Faunalia

功能:将栅格层附加到现有地理包

将栅格层保存到地理包数据库时,现在可以将该层附加到现有文件中。

image20

此功能由 Borys Jurgiel

此功能由开发 Borys Jurgiel

窗体和小部件

功能:在QGIS值关系小部件中向下钻取(层叠)表单

qgis“值关系小部件”中的新功能和逻辑,允许在qgis属性形式中实现复杂的动态过滤器。该功能可用于在QGIS中实现“向下钻取”表单,其中一个字段中的可用值取决于其他字段的值:

image21

此功能由 QGIS community through crowd-funding

这一特点是由亚历山德罗·帕索蒂(北道)开发的。

专题地图编辑器

特征:三维地图项目

此功能允许用户将其三维地图视图添加到打印布局。

image22

此功能由 QGIS community through crowd-funding

此功能由开发 Lutra Consulting

处理

功能:新的“就地编辑”模式

多亏了大量 generous backers 将众筹的“就地编辑”模式添加到3.4的处理中。当矢量层处于活动状态且可编辑状态时,此模式允许用户直接对层中的特征执行适当的算法,在适当的位置修改其属性和几何图形。所有编辑都被添加到层的“编辑缓冲区”,因此您可以在将更改保存回数据源之前轻松地撤消和重做这些更改。

对于那些经常进行数据编辑的超级用户,此功能也通过qgis 3.0的“定位器栏”(位于左下角的“键入以定位”栏)公开。键入“ef”(“编辑功能”),然后键入相应操作的名称,可以直接通过键盘执行编辑。例如。

  • 选择一组线条特征

  • 按ctrl+k(激活定位条)

  • “EF反向”型

  • 按Enter键–所选线条特征将立即反转!

image23

此功能由 Crowdfunding campaign

此功能由开发 North Road

功能:在项目中存储模型

一些处理模型与特定项目内的逻辑是如此内在地联系在一起,以至于它们在该项目外没有意义(或完全被破坏)(例如,依赖特定地图层、关系等存在的模型)。因此,从qgis 3.4,处理模型可以存储在qgis项目文件中。项目中存储的任何模型都将在该项目打开后立即可用。这还避免了将“全局”模型提供者与毫无意义的模型混淆在一起,并使分发单个项目(包括所有相关模型)变得更容易。

通过单击Modeler对话框工具栏中的新“嵌入到项目”按钮,模型存储在项目中。可以从工具箱中模型的右键单击菜单中删除项目中的模型。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特征:栅格值示例

添加了一种新的点位置栅格层值采样算法。

image24

此功能由 Faunalia

此功能由开发 Matteo Ghetta (Faunalia)

功能:新的“栅格像素到多边形”算法

该算法将栅格层转换为矢量层,其中多边形特征对应于栅格中的每个像素,单个字段包含栅格中的带值。

此功能由 SMEC/SJ

此功能由开发 Nyall Dawson

特征:k表示聚类算法

qgis 3.4添加了一个本地的“k-均值聚类”算法。该算法基于Postgis的st-cluster k means函数的一个端口,在一组输入特征中添加一个新的簇ID字段,该输入特征基于k均值聚类方法来识别特征的簇。如果使用非点几何图形作为输入,则聚类基于输入几何图形的质心。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特点:DBSCAN空间聚类算法

这种新的本地算法实现了一种优化的基于DBSCAN密度的扫描聚类方法,用于聚类二维点特征。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特点:改进算法

对现有处理算法的一些其他改进包括:

  • 这个 反向线条方向 算法现在可以处理多行串几何输入

  • 延伸线 :添加了对动态(数据定义)开始和结束距离的支持

  • 偏置线 :添加了对动态偏移距离的支持

  • 这个 按字段值联接按位置联接 算法现在可以选择导出不匹配的记录

  • 按字段值联接 还报告匹配/不匹配功能的计数

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特征:用m过滤顶点,用z算法过滤顶点

添加了两种新的算法,通过m或z值过滤线/多边形顶点。可以输入最小和最大m/z值,如果顶点超出这些范围,将从输出几何图形中丢弃。最小和最大过滤值也可以是数据定义的,因此每个特性都可能不同。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特征:“翻译特征数组”算法

这个新算法通过创建特征的多个翻译(偏移)版本,在一个图层中创建特征的副本。每个副本由X/Y/Z/M轴中的预设量替换。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特征:“偏移(平行)线阵列”算法

这个新算法通过创建每个特征的多个并行版本,在一个图层中创建线条特征的副本。每个副本都被预设的距离偏移。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特征:非度/未知距离的单位选择

当算法具有以米/英尺等为单位的距离参数(即非地理距离)时,添加了一个组合框,允许选择单位类型。

(QGIS没有(而且应该 从未 )以度数显示距离——在这种情况下,由用户选择合适的本地投影并重新投影数据以匹配。)

此功能由 North Road

此功能由开发 Nyall Dawson

特征:“褶皱特征到z/m”算法

这两种新算法可以将几何顶点Z或M值设置为从栅格带采样的值。可以选择使用(数据可定义)比例值缩放值。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特征:“栅格像素到点”算法

在qgis 3.4中加入了一种新的“像素到点”算法,在每个像素的中心创建了一个点特征。跳过nodata像素。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特征:线子串算法

这一新的、要求很高的算法返回一条直线(或曲线)的一部分,该部分位于指定的开始和结束距离之间(从直线的开始测量)。Z和M值从现有值线性内插。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特点:“在线插补点”算法

该新算法创建一个点几何体,沿直线(或多边形边界)几何体以设定的距离内插。完全支持曲线输入几何图形。Z或M值根据现有值线性插值。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特点:K-邻凹壳

此功能由https://qgis.org资助

此功能由开发 Detlev Neumann, Rudi von Staden

特性:实现算法的python脚本现在执行拖拽和浏览器双击的算法。

在适当情况下,脚本现在将在以下情况下启动处理算法对话框:

  • 将python脚本拖放到主窗口中

  • 使用浏览器面板的右键单击运行脚本操作

image25

此功能由 iMhere Asia

此功能由开发 Mathieu Pellerin

特点:新的GDAL重排带算法

一个新的gdal提供程序“重排带”算法被添加到处理工具箱中。该算法允许输出栅格继续给定输入栅格带的子集,并提供重新排序带的可能性。

image26

此功能由 iMHere Asia

此功能由开发 Mathieu Pellerin

特征:模型算法参数的“预先计算”值

对于使用“预先计算的表达式”的所有参数,都存在一个新选项。此表达式在执行子算法之前计算一次,并在执行该算法期间使用。

此功能由 QGIS

此功能由开发 Nyall Dawson (North Road)

功能:“使用样式XML文件对层进行分类”算法

此新算法使用样式数据库中的匹配符号将矢量层的渲染器设置为分类的渲染器。

指定的表达式(或字段名)用于为渲染器创建类别,QGIS为层中的每个唯一值创建一个类别。每个类别分别与指定的QGIS XML样式数据库中存在的符号匹配。只要找到匹配的符号名称,类别的符号将被设置为此匹配的符号。

默认情况下,匹配不区分大小写,但如果需要,可以将其设置为区分大小写。或者,在执行匹配时,可以忽略类别值和符号名称中的非字母数字字符。这允许在将类别与符号匹配时有更大的公差。

如果需要,还可以输出包含无法与符号匹配的类别列表和未与类别匹配的符号的表。

image27

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

特征:捕捉几何算法的新模式

新模式“捕捉到定位节点(仅单层)”确保向量层的任意两个顶点至少与阈值给定的距离相同。

该算法在进行矢量叠加运算时非常方便,如交集、并集或差分等,以避免在坐标非常接近的情况下,由于数值误差而引起的拓扑误差。在运行该算法之后,一些以前有效的几何图形可能会变得无效,因此以后运行修复几何图形算法可能会很有用。

此功能由 InaSAFE DFAT

此功能由开发 Martin Dobias (Lutra Consulting)

数据提供者

功能:OAuth2身份验证方法插件

  • 支持身份验证代码、隐式和资源所有者授予流

  • 允许预配置连接,从默认位置读取

  • 在QGIS重启后提供访问令牌缓存

  • 保存/加载配置

此功能由 Monsanto Company

此功能由开发 Larry Shaffer, Alessandro Pasotti

功能:网格层:新网格层格式支持

网格层表示具有额外组件(例如时间和矢量)的可变大小网格上的数据。通过引入mdal,用户可以直接在qgis中加载以下格式并浏览所有其他组件:

  • GRIB

  • XMDF

  • NETCDF

image29

此功能由 Lutra Consulting

此功能由开发 Lutra Consulting

特征:网格层:添加功能以标识网格层上的值

使用这个API,开发人员可以检查网格元素,并从空间和时间上获取值。例如,可以从网格层创建时间序列图。

image30

此功能由 Lutra Consulting

此功能由开发 Lutra Consulting

特征:网格层:允许选择不同的矢量和标量数据集

网格层通常包含几个数量。例如,netcdf/grib可以包含几个气象量。每个数量也可以有多个组件。例如,风数据可以包含速度(标量)和值(网格)。使用此选项,可以覆盖不同数量的标量和网格。在下面的图像中,您可以看到温度(网格)和风(标量)。

image31

此功能由 Lutra Consulting

此功能由开发 Lutra Consulting

功能:网格层:允许用户定义网格上的渲染向量/箭头

通常在每个网格元素的中心/角生成标量数据。当显示标量数据时,箭头可能看起来稀疏,并且常常看不到一般的趋势。使用此选项,可以在用户定义的网格上显示箭头。额外的标量值将被动态插入并放置在用户定义的网格上。

image32

此功能由 Lutra Consulting

此功能由开发 Lutra Consulting

功能:JSON/JSONB类型支持

支持读取PostgreSQL JSON类型。JSON数据可以在小部件中显示为“键/值”(映射)、“列表”(数组)或文本。

image33

此功能由 Kanton Solothurn

此功能由开发 David Signer (OPENGIS.ch)

功能:ESRI令牌认证支持

QGIS的认证系统增加了对ESRI基于令牌的临时认证的支持。这允许通过分配的临时令牌连接到ArcGIS功能和地图服务器。

此功能由开发 Nyall Dawson (North Road)

功能:SQL Server-无效的几何处理

最新版本的QGIS已经转向了一种更安全的方法来读取SQL Server层,它可以自动检查几何有效性,并在需要时修复几何。为了避免SQL Server的几何处理设计出现问题,需要使用此解决方法,在这种情况下,遇到任何具有无效几何的行都可以在不返回层中的所有功能的情况下自动中止请求。不幸的是,解决方法的性能成本很高。

在QGIS 3.4中,添加了一个新的设置,允许用户手动关闭QGIS的SQL Server无效几何处理。在SQL Server连接的属性下打开“跳过无效几何处理”设置会导致QGIS跳过所有昂贵的几何验证处理,但要确保数据库上的所有功能都具有有效的几何验证,则必须由用户/数据库管理员负责。这是“自担风险使用”设置。不正确地启用此选项会导致功能丢失和数据丢失。

此功能由开发 Nyall Dawson (North Road)

QGIS服务器

功能:可以通过插件管理服务器缓存

默认情况下,QGIS服务器只在内存中缓存WMS getCapabilities文档。有了WMTS实现,就需要有一种方法来缓存数据块。但是缓存管理器还没有开发成只缓存块。

缓存管理器插件可用于缓存:

  • WMS、WFS、WCS、WMTS getCapabilities文档

  • WFS描述功能类型文档

  • WCS描述覆盖范围文档

  • WMTS获取文件图像

  • WMS获取图例图形图像

下面是一个python缓存管理器类,它不验证QGIS项目是否已更改:

class PyServerCache(QgsServerCacheFilter):

    """ Used to have cache control """

    def __init__(self, server_iface):
        super(QgsServerCacheFilter, self).__init__(server_iface)

        self._cache_dir = os.path.join(tempfile.gettempdir(), "qgs_server_cache")
        if not os.path.exists(self._cache_dir):
            os.mkdir(self._cache_dir)

        self._tile_cache_dir = os.path.join(self._cache_dir, 'tiles')
        if not os.path.exists(self._tile_cache_dir):
            os.mkdir(self._tile_cache_dir)

    def getCachedDocument(self, project, request, key):
        m = hashlib.md5()
        paramMap = request.parameters()
        urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
        m.update(urlParam.encode('utf8'))

        if not os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml")):
            return QByteArray()

        doc = QDomDocument(m.hexdigest() + ".xml")
        with open(os.path.join(self._cache_dir, m.hexdigest() + ".xml"), "r") as f:
            statusOK, errorStr, errorLine, errorColumn = doc.setContent(f.read(), True)
            if not statusOK:
                print("Could not read or find the contents document. Error at line %d, column %d:\n%s" % (errorLine, errorColumn, errorStr))
                return QByteArray()

        return doc.toByteArray()

    def setCachedDocument(self, doc, project, request, key):
        if not doc:
            print("Could not cache None document")
            return False
        m = hashlib.md5()
        paramMap = request.parameters()
        urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
        m.update(urlParam.encode('utf8'))
        with open(os.path.join(self._cache_dir, m.hexdigest() + ".xml"), "w") as f:
            f.write(doc.toString())
        return os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml"))

    def deleteCachedDocument(self, project, request, key):
        m = hashlib.md5()
        paramMap = request.parameters()
        urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
        m.update(urlParam.encode('utf8'))
        if os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml")):
            os.remove(os.path.join(self._cache_dir, m.hexdigest() + ".xml"))
        return not os.path.exists(os.path.join(self._cache_dir, m.hexdigest() + ".xml"))

    def deleteCachedDocuments(self, project):
        filelist = [f for f in os.listdir(self._cache_dir) if f.endswith(".xml")]
        for f in filelist:
            os.remove(os.path.join(self._cache_dir, f))
        filelist = [f for f in os.listdir(self._cache_dir) if f.endswith(".xml")]
        return len(filelist) == 0

    def getCachedImage(self, project, request, key):
        m = hashlib.md5()
        paramMap = request.parameters()
        urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
        m.update(urlParam.encode('utf8'))

        if not os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png")):
            return QByteArray()

        img = QImage(m.hexdigest() + ".png")
        with open(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"), "rb") as f:
            statusOK = img.loadFromData(f.read())
            if not statusOK:
                print("Could not read or find the contents document. Error at line %d, column %d:\n%s" % (errorLine, errorColumn, errorStr))
                return QByteArray()

        ba = QByteArray()
        buff = QBuffer(ba)
        buff.open(QIODevice.WriteOnly)
        img.save(buff, 'PNG')
        return ba

    def setCachedImage(self, img, project, request, key):
        m = hashlib.md5()
        paramMap = request.parameters()
        urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
        m.update(urlParam.encode('utf8'))
        with open(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"), "wb") as f:
            f.write(img)
        return os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"))

    def deleteCachedImage(self, project, request, key):
        m = hashlib.md5()
        paramMap = request.parameters()
        urlParam = "&".join(["%s=%s" % (k, paramMap[k]) for k in paramMap.keys()])
        m.update(urlParam.encode('utf8'))
        if os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png")):
            os.remove(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"))
        return not os.path.exists(os.path.join(self._tile_cache_dir, m.hexdigest() + ".png"))

    def deleteCachedImages(self, project):
        filelist = [f for f in os.listdir(self._tile_cache_dir) if f.endswith(".png")]
        for f in filelist:
            os.remove(os.path.join(self._tile_cache_dir, f))
        filelist = [f for f in os.listdir(self._tile_cache_dir) if f.endswith(".png")]
        return len(filelist) == 0

以及将其添加到QGIS服务器缓存管理器的方法。

servercache = PyServerCache(server_iface) server_iface.registerServerCache(servercache, 100)

此功能由 Ifremer

此功能由开发 3Liz

功能:支持WMTS 1.0.0

QGIS服务器3.4支持WMTS 1.0.0 OGC标准。

在QGIS项目属性中,用户可以定义:

  • 项目的哪个部分(所有项目、图层组或图层)必须通过WMTS标准发布

  • 瓷砖的最小比例

QGIS服务器将WMS中定义的CRS重新用于WMT。

要管理tile缓存,必须由qgis服务器安装并加载带有qgsservercachefilter类的qgis服务器插件。

image34

此功能由 Ifremer

此功能由开发 3Liz

功能:添加定义WMT最小比例的功能

此功能由https://github.com/rldhont资助

此功能由https://github.com/rldhont开发

功能:支持qgis服务器日志到stderr

现在可以配置qgis服务器,使其将日志写入stderr。这是通过将qgis服务器日志文件env var设置为特殊值“stderr”来完成的。

此功能由 OSLANDIA

此功能由开发 Eric Lemoine

插件

功能:在插件管理器中支持加密的zip

插件管理器现在可以从本地zip文件安装插件,即使是加密的。

image35

此功能由 Borys Jurgiel

此功能由开发 Borys Jurgiel

功能:离线编辑地理包

使用脱机编辑功能,可以选择导出应创建空间站点还是地理包文件供脱机使用。

此功能由 Oester Messtechnik

此功能由开发 David Signer (OPENGIS.ch)

可编程性

功能:qgsspaceindexkdbush

使用https://github.com/mouner/kdbush.hpp,基于扁平kd树的二维点的快速静态空间索引

与QGSSPATIALINDEX相比,此索引:-仅支持单点功能(无多点)-是静态的(构造后无法从索引中添加或删除功能)-速度更快!-支持真正的“基于距离”搜索,即从搜索点返回半径内的所有点

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

功能:qgsrasterdataprovider::在给定点对栅格进行有效采样的采样方法

这是替代 QgsRasterDataProvider::identify 方法,效率低但更强大

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

功能:新几何API调用以返回曲线子字符串

添加了新的Pyqgis API,以便于从LineString/曲线几何图形中检索子字符串:

QgsCurve::curveSubstring -  Returns a new curve representing a substring of a curve, from a start distance and end distance.

如果存在z或m值,则输出z和m将使用现有顶点的z或m值进行插值。该方法还可以处理曲线几何,而不会丢失或分割。

此功能由 North Road

此功能由开发 Nyall Dawson (North Road)

功能:SIP模块API更改

由于PYQT/SIP库中的上游更改,QGIS 3.4中建议的导入此模块的方法已更改。为了实现最大的可移植性,而不是直接调用: import sip 插件应该使用: from qgis.PyQt import sip 使用这种更新的样式导入将确保代码在所有平台上都正确工作,并在未来的QGIS版本中保持功能。

特性:python矢量数据提供程序

开发API、示例提供程序和测试,允许在纯Python中创建向量数据提供程序。

image36

这个功能是由善意资助的

这个功能是由亚历山德罗·帕索蒂开发的

三维特征

功能:改进的导航

这将在相机移动时更新相机的视图中心。在视场中心始终处于零海拔之前,这意味着当地形离零海拔较远时,由于中心点距离较远,相机的倾斜和旋转会感到奇怪。

允许使用向上/向下翻页键向上/向下移动相机

移动相机,使用Ctrl+箭头键/鼠标保持位置

image37

此功能由 QGIS community through crowd-funding

此功能由开发 Martin Dobias (Lutra Consulting)

功能:动画

可以基于一组关键帧(特定时间的相机位置)创建动画。然后在关键帧之间插入相机位置/旋转。

要创建关键帧,首先通过旋转、缩放或移动相机为地图设置场景。然后给帧指定一个时间。有几种方法可以在关键帧之间进行插值。

image38

此功能由 QGIS community through crowd-funding

此功能由开发 Martian Dobias (Lutra Consulting)

功能:简单呈现三维线串

这种三维线渲染模式将使用OpenGL线渲染,而不是将线缓存到多边形中并将其渲染为网格。

其优点是,三维线不会松动其Z坐标,这是目前缓冲后“普通”三维渲染的情况。

缺点是线条不能太宽(仅在5.10以后才在qt3d中支持,但即使这样,它们的渲染也不会有很好的连接/封口),并且只使用材质中的环境色。

image39

此功能由 Lutra Consulting

此功能由开发 Martin Dobias (Lutra Consulting)

功能:用于三维视图的标识地图工具

在三维地图中引入了一种新的识别工具。使用此工具,可以检查三维场景中的特征。

image40

此功能由 Department of Environment, Land and Infrastructure Engineering (DIATI)

此功能由开发 Martin Dobias (Lutra Consulting)Faunalia

特点:实验性的python api

一些来自qgis 3d的类已经提供给了Python开发人员。现在可以查询或更改地图层的三维渲染器以及包含的三维符号(如材质颜色)的读/写属性。请注意,目前API被认为是实验性的,因此在未来的3.x版本中可能会发生变化。

此功能由 Lutra Consulting

此功能由开发 Martin Dobias (Lutra Consulting)