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.0 和 Version 3.2 了解3.4版本中的全部变更范围。
Thanks
我们要感谢开发人员、文档编制人员、测试人员以及所有在那里自愿投入时间和精力的人(或者为他们提供资金)。从QGIS社区,我们希望您喜欢这个版本!如果你想捐献时间、金钱或参与到使QGIS更棒的工作中,请漫步至 qgis.org 伸出援手!
QGIS由捐助者和维持成员提供支持。在我们的网站上可以看到对该项目作出重大和小型财政捐助的捐助者的最新名单。 donors list . 如果您想成为正式的持续会员,请访问 our sustaining members page 详情。支持QGIS有助于我们为每六个月一次的开发人员会议提供资金,维护项目基础设施并为错误修复工作提供资金。下面提供了当前支持者的完整列表-非常感谢所有支持者!
qgis是免费软件,您没有义务支付任何费用来使用它-事实上,我们希望鼓励人们广泛地使用它,无论您的财务或社会地位是什么-我们相信赋予人们空间决策工具将导致一个更好的社会为全人类。
QGIS现在可以作为Flatpak应用程序在 flathub Flatpak(以前称为xdg应用程序)是一个软件实用程序,用于Linux桌面计算机的软件部署、包管理和应用程序虚拟化。它允许用户在Linux上安装不同的QGIS版本,而无需重新编译或使用Docker。它是一个包含所有库的完整包,并且使用自己的用户配置文件位置。所以你需要一些磁盘空间和使用flatpak的新习惯,但是它很震撼!
此功能由 Aleix Pol
此功能由开发 Aleix Pol
允许将符号、标签等的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的数组
此功能由开发 Etienne Trimaille, Matteo Ghetta, Matthias Kuhn, Mathieu Pellerin, Nyall Dawson
在表达式编辑器中自动完成代码。
变量、函数名和字段名是在编写表达式时自动提出和插入的。
函数参数在填充时显示
此功能由 OPENGIS.ch
此功能由开发 Matthias Kuhn (OPENGIS.ch)
选择/识别现有多边形覆盖的特征通常很有用。为此,用户可以使用“按多边形选择特征”和“按多边形标识特征”工具,但需要手动跟踪感兴趣的多边形。此新功能允许用户右键单击地图并从弹出菜单中选择该位置的现有多边形功能-该多边形将用作选择或标识的输入。
这一特色由莱斯特郡议会资助。
每当消息栏项链接到创建的文件(例如,导出布局或地图层后),该链接现在将直接在操作系统文件浏览器中打开包含该文件的文件夹,并预先选择创建的文件。从qgis导出文件后,这是一个非常方便的快捷方式,可以加速文件操作!
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
在欢迎页面的右键单击上下文菜单中,此新选项用于禁用条目,允许用户在文件管理器中打开最接近原始项目位置的现有路径,以帮助他们重新定位丢失/移动/重命名的项目。
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
当需要“丢弃”层时,例如在多个步骤中预处理数据时,qgis中的临时划痕层非常方便。但是,对于那些没有意识到当当前的QGIS项目关闭时,层的内容将永久丢失的统一用户来说,它们可能是一个陷阱。相应地,添加了一个新的指示器图标,该图标显示在层树中任何临时草稿层旁边,使其立即清除仅临时的层。
将这些临时层转换为永久的基于磁盘的格式也要容易得多。您可以单击新指示器图标或从层上下文菜单中选择“永久”。然后,qgis将提示输入保存临时图层的位置,然后将其替换到位(保留相同的图层ID、样式、表单设置等)。
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
qgis任务管理器小部件(在后台任务运行时显示在状态栏中)现在显示长时间运行的后台任务的估计剩余时间和完成时间。这个估计到达时间是根据任务的运行时间和当前进度用一个简单的线性插值计算出来的,并且允许用户知道他们是否只有时间在办公室厨房里做一个实例咖啡,或者在完成长时间的处理任务之前在街区里走来走去喝一杯咖啡师做的咖啡……
此外,QGIS在更多平台和场合上使用标准的操作系统进度报告机制。一些长时间运行的任务(不在后台运行)如Atlas导出现在通过操作系统机制显示它们的进度,并抛出方便的完成通知。
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
对于本地矢量和栅格数据集,“图层属性”对话框中的“信息”选项卡现在具有源文件路径超链接。单击超链接后,系统的文件导航器将打开并自动突出显示数据集。
此功能由 iMhere Asia
此功能由开发 Mathieu Pellerin
qgis样式管理器对话框(允许用户设置和管理自己的符号库和颜色渐变)现在以非模态方式打开,因此它现在可以与主qgis窗口一起使用(就像布局管理器对话框和打印布局设计器窗口一样)。
我们还改进了图层样式停靠中符号的预览,添加了一个切换开关,在大图标视图和符号的详细列表视图之间切换。悬停在符号(和颜色!)现在显示符号的大预览。最后,我们让符号列表更适合于高dpi。
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
为了改进浏览器面板的用户界面和体验,本版本做了大量工作,包括hidpi修复、压缩矢量/栅格数据集改进和刷新的图标集。
还添加了一些功能,包括直接从浏览器上下文菜单创建新目录的功能。浏览器现在还显示了更完整的SQL Server连接选项范围,与其他数据库连接可用的选项相匹配。
此功能由Mathieu Pellerin(Imhere Asia)、Nyall Dawson(North Road)开发。
在QGIS 3.4中增加了一种新型的矢量层窗体控件,用于在属性窗体上显示图形化的、吸引人的交互项,如图表或技术图形。小部件具有灵活的配置,包括示例模板和表达式支持。
此功能由 QGIS Project
从属性面板向网格层添加数据集
属性面板中的信息和源面板
活动数据集的选择(属性或样式面板)
轮廓/比例尺的样式(属性或样式面板)
网格框架的样式(属性或样式面板)
矢量箭头的样式(属性或样式面板)
此功能由 Lutra Consulting
导出和导入样式时 .qml
文件现在可以选择部分的子集。这允许在忽略其他配置的同时保存和恢复部分层配置。例如,可以只导出层的符号,当将此QML样式文件导入层时,表单和小部件或其他属性上的任何配置都不会受到影响。使用复制/粘贴时,也可以只处理样式的单个部分。
此功能由 qwat group
QGIS 3.4扩展了内置GPS跟踪支持,增加了“采集间隔”和“距离阈值”参数。当接收器处于静态状态时,这些选项可用于保持光标静止。
此功能由 Andrea Rossi
此功能由开发 Andrea Rossi
现在,新顶点的效率提高了很多。它可以同时移动所有可编辑层的顶点,这对于保持跨层拓扑非常有用。然而,在许多情况下,我们中的许多人不想同时修改所有层。为此我们添加了顶点映射工具的变体。
此功能由 Oslandia
此功能由开发 Paul Blottiere (Oslandia)
矢量层有一个精确的配置选项。精度定义了保存节点位置的精度。新几何图形或已编辑几何图形的每个节点都将捕捉到此分辨率的网格。数字化时,显示网格以指导用户。
此功能由 Kanton Solothurn
此功能由开发 Matthias Kuhn (OPENGIS.ch)
在矢量图层上添加或编辑几何图形时,QGIS可以自动从几何图形中删除重复节点。此选项可在矢量层的数字化选项卡中配置。
此功能由 Kanton Solothurn
此功能由开发 Matthias Kuhn (OPENGIS.ch)
如果激活此选项,则可以检查每个新几何图形或编辑的几何图形的有效性。当当前编辑会话产生错误的几何图形时,这允许透明地与用户通信。
此功能由 Kanton Solothurn
此功能由开发 Matthias Kuhn (OPENGIS.ch)
可以在层上激活拓扑检查。在新添加和编辑的几何图形上,可以执行拓扑检查。保存层或单击几何验证面板上的拓扑检查按钮时,将执行检查。
以下检查可用:
缝隙
重叠
相邻多边形上缺少顶点
这建立在几何检查器插件的功能之上,该插件由 Sourcepole .
此功能由 Kanton Solothurn
此功能由开发 Matthias Kuhn (OPENGIS.ch)
与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)
属性表工具栏中添加了一个按钮,用于按需在停靠模式和窗口模式之间切换。以前,用户必须更改“设置”对话框中的选项并打开一个新表,以便在固定/未固定模式之间切换,但如果您决定这样做,将很痛苦。 之后 一张桌子已经打开了,您想停靠/卸下它…!
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
添加了一个新的定位器过滤器,允许用户在 all 层在其项目中,通过层的显示表达式。
可以使用前缀“af”激活过滤器,也可以通过qgis选项->定位器->所有层中的功能使其成为默认搜索。显示表达式在“显示”选项卡下的向量层属性中定义。在“数据源”选项卡下的“项目属性”对话框中,可以将各个图层标记为不可搜索。
此功能由 Opengis.ch
此功能由开发 Denis Rouzaud
对于当前项目中标记为“必需”的任何层,将显示新的指示器“锁定”图标。此图标向用户提供即时反馈,即无法从项目中删除特定层。
通过“项目属性”对话框的“数据源”选项卡配置所需图层。
此功能由 Arpa Piemonte (Dipartimento Tematico Geologia e Dissesto) within ERIKUS project
此功能由开发 Martin Dobias (Lutra Consulting) 和 Faunalia
qgis“值关系小部件”中的新功能和逻辑,允许在qgis属性形式中实现复杂的动态过滤器。该功能可用于在QGIS中实现“向下钻取”表单,其中一个字段中的可用值取决于其他字段的值:
此功能由 QGIS community through crowd-funding
这一特点是由亚历山德罗·帕索蒂(北道)开发的。
此功能允许用户将其三维地图视图添加到打印布局。
此功能由 QGIS community through crowd-funding
此功能由开发 Lutra Consulting
多亏了大量 generous backers 将众筹的“就地编辑”模式添加到3.4的处理中。当矢量层处于活动状态且可编辑状态时,此模式允许用户直接对层中的特征执行适当的算法,在适当的位置修改其属性和几何图形。所有编辑都被添加到层的“编辑缓冲区”,因此您可以在将更改保存回数据源之前轻松地撤消和重做这些更改。
对于那些经常进行数据编辑的超级用户,此功能也通过qgis 3.0的“定位器栏”(位于左下角的“键入以定位”栏)公开。键入“ef”(“编辑功能”),然后键入相应操作的名称,可以直接通过键盘执行编辑。例如。
选择一组线条特征
按ctrl+k(激活定位条)
“EF反向”型
按Enter键–所选线条特征将立即反转!
此功能由开发 North Road
一些处理模型与特定项目内的逻辑是如此内在地联系在一起,以至于它们在该项目外没有意义(或完全被破坏)(例如,依赖特定地图层、关系等存在的模型)。因此,从qgis 3.4,处理模型可以存储在qgis项目文件中。项目中存储的任何模型都将在该项目打开后立即可用。这还避免了将“全局”模型提供者与毫无意义的模型混淆在一起,并使分发单个项目(包括所有相关模型)变得更容易。
通过单击Modeler对话框工具栏中的新“嵌入到项目”按钮,模型存储在项目中。可以从工具箱中模型的右键单击菜单中删除项目中的模型。
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
qgis 3.4添加了一个本地的“k-均值聚类”算法。该算法基于Postgis的st-cluster k means函数的一个端口,在一组输入特征中添加一个新的簇ID字段,该输入特征基于k均值聚类方法来识别特征的簇。如果使用非点几何图形作为输入,则聚类基于输入几何图形的质心。
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
这种新的本地算法实现了一种优化的基于DBSCAN密度的扫描聚类方法,用于聚类二维点特征。
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
对现有处理算法的一些其他改进包括:
这个 反向线条方向 算法现在可以处理多行串几何输入
延伸线 :添加了对动态(数据定义)开始和结束距离的支持
偏置线 :添加了对动态偏移距离的支持
这个 按字段值联接 和 按位置联接 算法现在可以选择导出不匹配的记录
按字段值联接 还报告匹配/不匹配功能的计数
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
添加了两种新的算法,通过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值设置为从栅格带采样的值。可以选择使用(数据可定义)比例值缩放值。
此功能由 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)
在适当情况下,脚本现在将在以下情况下启动处理算法对话框:
将python脚本拖放到主窗口中
使用浏览器面板的右键单击运行脚本操作
此功能由 iMhere Asia
此功能由开发 Mathieu Pellerin
一个新的gdal提供程序“重排带”算法被添加到处理工具箱中。该算法允许输出栅格继续给定输入栅格带的子集,并提供重新排序带的可能性。
此功能由 iMHere Asia
此功能由开发 Mathieu Pellerin
对于使用“预先计算的表达式”的所有参数,都存在一个新选项。此表达式在执行子算法之前计算一次,并在执行该算法期间使用。
此功能由 QGIS
此功能由开发 Nyall Dawson (North Road)
此新算法使用样式数据库中的匹配符号将矢量层的渲染器设置为分类的渲染器。
指定的表达式(或字段名)用于为渲染器创建类别,QGIS为层中的每个唯一值创建一个类别。每个类别分别与指定的QGIS XML样式数据库中存在的符号匹配。只要找到匹配的符号名称,类别的符号将被设置为此匹配的符号。
默认情况下,匹配不区分大小写,但如果需要,可以将其设置为区分大小写。或者,在执行匹配时,可以忽略类别值和符号名称中的非字母数字字符。这允许在将类别与符号匹配时有更大的公差。
如果需要,还可以输出包含无法与符号匹配的类别列表和未与类别匹配的符号的表。
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
新模式“捕捉到定位节点(仅单层)”确保向量层的任意两个顶点至少与阈值给定的距离相同。
该算法在进行矢量叠加运算时非常方便,如交集、并集或差分等,以避免在坐标非常接近的情况下,由于数值误差而引起的拓扑误差。在运行该算法之后,一些以前有效的几何图形可能会变得无效,因此以后运行修复几何图形算法可能会很有用。
此功能由 InaSAFE DFAT
支持身份验证代码、隐式和资源所有者授予流
允许预配置连接,从默认位置读取
在QGIS重启后提供访问令牌缓存
保存/加载配置
此功能由 Monsanto Company
网格层表示具有额外组件(例如时间和矢量)的可变大小网格上的数据。通过引入mdal,用户可以直接在qgis中加载以下格式并浏览所有其他组件:
GRIB
XMDF
NETCDF
此功能由 Lutra Consulting
此功能由开发 Lutra Consulting
使用这个API,开发人员可以检查网格元素,并从空间和时间上获取值。例如,可以从网格层创建时间序列图。
此功能由 Lutra Consulting
此功能由开发 Lutra Consulting
网格层通常包含几个数量。例如,netcdf/grib可以包含几个气象量。每个数量也可以有多个组件。例如,风数据可以包含速度(标量)和值(网格)。使用此选项,可以覆盖不同数量的标量和网格。在下面的图像中,您可以看到温度(网格)和风(标量)。
此功能由 Lutra Consulting
此功能由开发 Lutra Consulting
通常在每个网格元素的中心/角生成标量数据。当显示标量数据时,箭头可能看起来稀疏,并且常常看不到一般的趋势。使用此选项,可以在用户定义的网格上显示箭头。额外的标量值将被动态插入并放置在用户定义的网格上。
此功能由 Lutra Consulting
此功能由开发 Lutra Consulting
支持读取PostgreSQL JSON类型。JSON数据可以在小部件中显示为“键/值”(映射)、“列表”(数组)或文本。
此功能由 Kanton Solothurn
此功能由开发 David Signer (OPENGIS.ch)
QGIS的认证系统增加了对ESRI基于令牌的临时认证的支持。这允许通过分配的临时令牌连接到ArcGIS功能和地图服务器。
此功能由开发 Nyall Dawson (North Road)
最新版本的QGIS已经转向了一种更安全的方法来读取SQL Server层,它可以自动检查几何有效性,并在需要时修复几何。为了避免SQL Server的几何处理设计出现问题,需要使用此解决方法,在这种情况下,遇到任何具有无效几何的行都可以在不返回层中的所有功能的情况下自动中止请求。不幸的是,解决方法的性能成本很高。
在QGIS 3.4中,添加了一个新的设置,允许用户手动关闭QGIS的SQL Server无效几何处理。在SQL Server连接的属性下打开“跳过无效几何处理”设置会导致QGIS跳过所有昂贵的几何验证处理,但要确保数据库上的所有功能都具有有效的几何验证,则必须由用户/数据库管理员负责。这是“自担风险使用”设置。不正确地启用此选项会导致功能丢失和数据丢失。
此功能由开发 Nyall Dawson (North Road)
默认情况下,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
QGIS服务器3.4支持WMTS 1.0.0 OGC标准。
在QGIS项目属性中,用户可以定义:
项目的哪个部分(所有项目、图层组或图层)必须通过WMTS标准发布
瓷砖的最小比例
QGIS服务器将WMS中定义的CRS重新用于WMT。
要管理tile缓存,必须由qgis服务器安装并加载带有qgsservercachefilter类的qgis服务器插件。
此功能由 Ifremer
此功能由开发 3Liz
现在可以配置qgis服务器,使其将日志写入stderr。这是通过将qgis服务器日志文件env var设置为特殊值“stderr”来完成的。
此功能由 OSLANDIA
此功能由开发 Eric Lemoine
使用脱机编辑功能,可以选择导出应创建空间站点还是地理包文件供脱机使用。
此功能由 Oester Messtechnik
此功能由开发 David Signer (OPENGIS.ch)
使用https://github.com/mouner/kdbush.hpp,基于扁平kd树的二维点的快速静态空间索引
与QGSSPATIALINDEX相比,此索引:-仅支持单点功能(无多点)-是静态的(构造后无法从索引中添加或删除功能)-速度更快!-支持真正的“基于距离”搜索,即从搜索点返回半径内的所有点
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
这是替代 QgsRasterDataProvider::identify
方法,效率低但更强大
此功能由 North Road
此功能由开发 Nyall Dawson (North Road)
添加了新的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)
由于PYQT/SIP库中的上游更改,QGIS 3.4中建议的导入此模块的方法已更改。为了实现最大的可移植性,而不是直接调用: import sip
插件应该使用: from qgis.PyQt import sip
使用这种更新的样式导入将确保代码在所有平台上都正确工作,并在未来的QGIS版本中保持功能。
可以基于一组关键帧(特定时间的相机位置)创建动画。然后在关键帧之间插入相机位置/旋转。
要创建关键帧,首先通过旋转、缩放或移动相机为地图设置场景。然后给帧指定一个时间。有几种方法可以在关键帧之间进行插值。
这种三维线渲染模式将使用OpenGL线渲染,而不是将线缓存到多边形中并将其渲染为网格。
其优点是,三维线不会松动其Z坐标,这是目前缓冲后“普通”三维渲染的情况。
缺点是线条不能太宽(仅在5.10以后才在qt3d中支持,但即使这样,它们的渲染也不会有很好的连接/封口),并且只使用材质中的环境色。
此功能由 Lutra Consulting
在三维地图中引入了一种新的识别工具。使用此工具,可以检查三维场景中的特征。
此功能由 Department of Environment, Land and Infrastructure Engineering (DIATI)
此功能由开发 Martin Dobias (Lutra Consulting) 和 Faunalia
一些来自qgis 3d的类已经提供给了Python开发人员。现在可以查询或更改地图层的三维渲染器以及包含的三维符号(如材质颜色)的读/写属性。请注意,目前API被认为是实验性的,因此在未来的3.x版本中可能会发生变化。
此功能由 Lutra Consulting