添加地图到图层管理器_使用QGIS批量打包天地图WFS图层

 01 

目标概述

“天地图”(http://www.tianditu.gov.cn)是我国自然资源部直属的国家基础地理信息中心建设的国家地理信息公共服务平台,以多种形式面向社会和公众提供地图与地理信息服务。

除提供常规的瓦片地图服务以外,“天地图”还以WFS(网络要素服务)的形式,提供了一类名为“数据API”的服务(http://lbs.tianditu.gov.cn/data/dataapi.html)。所有支持WFS的GIS客户端都可以打开WFS服务中包含的图层,并像操作本地图层一样操作WFS图层。显然,这也意味着可以将WFS图层保存到本地。

WFS服务包含了图层的几何要素与属性信息,数据量很大,在线操作容易遇到性能瓶颈问题。通过QGIS提供的“打包图层”功能,可以方便地将“天地图”WFS服务提供的所有图层一次性批量打包到单个GeoPackage文件中。GeoPackage是一种开放的地理数据库格式,既是QGIS推荐的取代SHP文件的默认存储方式,也为其他的主流GIS软件所支持。

 02 

操作步骤

操作方法其实特别简单,为了尽可能照顾到更多的人,这里给出详细的操作步骤:

1.启动QGIS,新建一个空白项目。在QGIS【浏览】面板的下部,找到【WFS】节点,在上面点击鼠标右键,在弹出菜单中选择【新建连接】。

31354efe0e7bab4ea49e545f665be1e7.png

2.在弹出的【创建一个新的WFS连接】对话框中,输入名称和网址。名称随意填,网址填写:http://gisserver.tianditu.gov.cn/TDTService/wfs,点击【OK】按钮。

b2588a60663c82fff3cf4a8b090cd9ed.png

3.如果输入无误,【浏览】面板中的WFS节点中应该已经成功添加了天地图WFS服务,点击服务名称前方的小箭头,可以看到其中包含了按名称顺序排列的十个图层。

76aaa5a43a1f5161ff3106e6ba3046c8.png

4.点击第一个图层,按住键盘上的【Shift】键,再点击最后一个图层,十个图层都将呈现蓝色的选中状态。点击鼠标右键,在弹出菜单中选择【添加选中的图层到项目】。

195c556f0b785eecb6242cd015c361be.png

5.QGIS将开始加载这十个WFS图层,由于总数据量约500M,至少需要几分钟时间。如果网速较慢,时间会更长,耐心等待一下。

947446bb9314f1fd70f4d6f822bfd3bd.png

6.待全部图层加载完毕后,通过键盘快捷键【Ctrl+Alt+T】调出【处理工具箱】,找到【数据库】节点中的【打包图层】,用鼠标双击该工具。

ab748c00ee5154ac53c2d7fa8053af42.png

7.在弹出的【打包图层】对话框中,点击【输入图层】文本框右侧的【…】按钮,弹出【多项选择】对话框。点击【全选】按钮选中全部十个图层,然后点击【OK】按钮。

0ed3e7703bd66b0bf3151ccf840748b9.png

8.点击【目标GeoPackage】文本框右侧的【…】按钮,在弹出菜单中选择【保存到文件】。

6d7005ec3c02e4b564e6fe1aa69a2b1b.png

9.选择存放GeoPackage文件的目录,并给文件起一个名字。

daf352b47cf360b1c90316e8469fcd31.png

10.点击【运行】按钮,QGIS将逐个将十个WFS图层导入指定的GeoPackage文件。对话框中将动态显示导入进度。导入过程需要几分钟时间,如果不想等待,可以点击对话框中的【Close】按钮试试(放心,尽管点)。

fcdb756742af05e1a1f659b9b00e9ed6.png

11.得益于QGIS极为优异的多线程机制,即使关闭了对话框,图层打包工作仍会继续进行,并通过主窗口的状态栏提示进度信息。这个时候,对地图的任何操作都是不受影响的。事实上,QGIS的地图渲染功能也是基于多线程的,在前一次渲染尚未全部完成的时候已经可以进行下一个地图操作了,体验丝滑,几乎没有卡顿的感觉。

2e115d3c9a9311ec3aad4596958c345e.png

12.图层打包操作完成后,可以新建一个空白项目,然后在【浏览】面板中找到【GeoPackage】节点,在上面点击鼠标右键,在弹出菜单中选择【新建连接】。

236b78c6f3ba3bcc143d8a5cff04e93d.png

13.找到刚才指定的存放GeoPackage文件的目录,打开该GeoPackage文件。

b674bb00a5257199248f9e87c4ab7028.png

14.【浏览】面板中的GeoPackage节点中应该已经添加了该GeoPackage文件,点击名称前方的小箭头,可以看到其中包含了按名称顺序排列的十个图层,可以将这些图层添加到地图窗口中。这里一次性添加了全部图层。

3a5374efce3e01ca13b4799860636f1d.png

15.十个图层以随机样式显示在地图窗口中,可以感受一下QGIS进行地图渲染的效率。

.

d374ff35ec7546a7cdb72a677aff8862.png

 03 

数据规格

“天地图”WFS服务提供的十个图层来自于我国1:100万基础地形数据库,当前的更新年份为2017年,主要包括交通、水系、居民地、境界与政区、地名及注记五大类要素,数据主要规格如下:

506c9d1144ddf305ad44317608cd45b2.png

Q博士

2020年7月4日


版权声明

本文欢迎转载,转载时请注明出处。

b20bd106dee31779613cbd4dde131b43.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QGIS的二次开发中,图层管理器的实现和画布的链接是非常重要的。通过图层管理器,您可以管理和控制地图中的不同图层,包括添加、删除、隐藏和更改图层的属性等操作。而画布则是地图的可视化部分,用于显示地图数据和与用户交互。 要实现图层管理器的功能,您可以使用QGIS提供的PyQGIS Python API。以下是一个简单的示例代码,展示了如何创建一个图层管理器窗口,并添加一个图层: ```python from qgis.core import ( QgsProject, QgsVectorLayer, QgsMapLayerProxyModel ) from qgis.gui import QgsLayerTreeView # 创建一个图层管理器窗口 layer_tree_view = QgsLayerTreeView() # 设置图层管理器的数据模型 layer_proxy_model = QgsMapLayerProxyModel(QgsProject.instance()) layer_proxy_model.setFilterMode(QgsMapLayerProxyModel.FilterMode.ShowAll) layer_tree_view.setLayerModel(layer_proxy_model) # 添加一个图层 layer = QgsVectorLayer('/path/to/your/layer.shp', 'Layer Name', 'ogr') QgsProject.instance().addMapLayer(layer) # 将图层管理器窗口添加到主窗口中 main_window.addDockWidget(Qt.LeftDockWidgetArea, layer_tree_view) ``` 至于画布和图层管理器之间的链接,您可以使用QGIS提供的信号和槽机制来实现。通过连接画布的信号(如`currentLayerChanged`)到图层管理器的槽函数,您可以在用户选择不同图层时更新图层管理器的状态。 ```python canvas.currentLayerChanged.connect(layer_tree_view.setCurrentLayer) ``` 这里的`canvas`是您创建的画布对象。通过这个连接,当用户在画布上选择不同的图层时,图层管理器会自动更新当前选中的图层。 希望这些代码能帮助您开始实现图层管理器和画布的链接!请注意,这只是一个简单示例,您可以根据实际需求进行更多的定制和功能扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值