Qgis中进行Shp和Excel属性连接实现百强县公共预算空间分析

前言

        在之前的博文中,将2022的全国百强县一般公共预算收入的数据下载到了本地,博客原文地址:一种使用Java的快速将Web中表格转换成Excel的方法。对于不关注时空位置关系的一般分析,到此也就基本够用了。但是,如果站在全国的视野去观察分析这些全国百强县的时空分布关系,就十分有必要增加一个空间的维度,以此来作为空间分析的基础。

        本文就是在此背景下,重点讲解如何对一个包含区县信息的excel表格,再结合对应的空间shp数据,将普通的二维表格融合空间shp数据,实现二维数据的空间化,给决策者一种地理尺度上的分布认知,更好的做好经济服务支撑。文中将重点介绍如何使用Qgis软件进行两者的融合,最后基于融合的结果进行制图,得到一个直观的结果。

一、数据准备

        在进行系统融合之前,需要准备的两份数据,第一是从网上下载的2022全国百强县一般公共预算收入榜的excel文件。数据列表如下(说明:在全国百强县中,区县名称重复的不对,因此不考虑使用市名称进行二次过滤):

序号列名例子
1县级地区昆山市
2所属省江苏
3一般公共预算收入(亿元)430.18

         上述是一份excel二维表格数据,为了进行空间分析,因此还需要一份空间数据,这里使用审图号为:2019中国地图-审图号GS(2019)1822号的一份全国区县数据。

序号

参数名

1

名称

县(等积投影)

2路径F:\XXX\2019中国地图-审图号GS(2019)1822号\县(等积投影).shp
3

存储

ESRI Shapefile

4编码

GBK

5

几何图形

Polygon (MultiPolygon)

6

坐标参照系(CRS)

Krasovsky_1940_Albers - 投影

7

单位

8

要素数目

2,901

         这里需要牢记属性表中的NAME字段,因为后续将会采用NAME作为数据关联的关键字段。

对上述数据进行简单符号化和标注以后,可以看到如下的图件。

 二、映射关系建立

        通过仔细对比观察Excel和Shp数据,两份数据通过excel表中的县级地区和Shp数据中的Name字段进行映射关联。它的数学表达如下:

        设R是n元关系,S是m元关系,A是R的属性,B是S的属性,A和B的值域具有相同的数据类型,θ∈{=, ≠, >, <, ≤, ≥}。R和S的连接操作定义为:

这里写图片描述

         其中,r[A]表示元组r在属性A上的值,s[B]表示元组s在属性B上的值。我们称A和B是连接属性。这里的链接应采用等值链接的模式,即Inner Join。翻译成数据库的语句大致就是:Select A.* from TableA A join TableB B on A.xxx = B.xxx。上述理论知识是数据能够建立连接的理论基础。

三、Excel数据导入到Qgis中

        为了方便后续的处理,我们将Excel同样到Qgis平台中。由于Excel是不带空间坐标的,因此无法进行空间位置的展示,只有属性信息展示。在Qgis可以打开Excel的属性表进行属性表信息查看。

         在这里可以打开excel的属性,Field3字段与Shp表中的Name字段是有对应关系的。这个要牢记,后续操作会用到。

四、空间数据挂接

         在上述成果之上,我们进行实际的空间数据挂接。操作步骤如下:

        第一步、鼠标单击县(等积投影),打开属性面板。如下图所示:

         第二步、点击连接按钮,弹出如下对话框:

         第三步、点击新的连接,在新的连接窗口中进行属性的关联和配置。在这里,连接图层注意选择为打开的Excel图层,连接字段选择Field3,目标字段为Name字段。完成后,点击OK即可。

         经过上述步骤即可完成属性的挂接,在关闭窗口点击Apply按钮之后,再次打开属性表发现。原来的属性表中已经挂接上了新的属性,后面增加就是。详情如下图所示:

         此时,这几个挂接的字段还不是最终的字段,需要导出要素后自动生成一份新的数据后属性生效,参考坐标系我们修改成4326的。

 五、百强县数据过滤

        细心的小伙伴发现,经过挂接后,因为我们是将excel数据挂接到了shp中,excel只有100条数据,而shp中有2901条,有2801条不是我们要的,因此我们要将这部分数据从库中过滤掉。我们打开属性表,发现百强县的挂接字段均有值,因此只需要将值不为空的数据过滤出来即可。

         我们发现挂接的属性名字不太友好,我们可以修改成英文或者其他的想要的属性名。

          鼠标右键点击数据,选择过滤,弹出如下对话框,在查询构建器中进行属性的过滤,通过前面的规则说明,对于ggys不是null的数据就是我们需要的,因此我们需要执行的过滤SQL就是

"ggys" is not null

         点击测试,可以进行查询结果的验证,通过点击可以得到以下结果:

         这就是全国百强县的数据,可以将得到的数据导出到外部作为下一步制图的基础数据。

六、地图制图

        为了更好的进行空间展示,通过不同的一般性公共预算收入来区分展示,从空间和值域的设置上直观看到不同的区县的收入信息。需要我们根据公共预算收入的值进行制图。具体步骤如下:        

        第一步、符号化,点击需要符号化的图层,选择分类方式进行符号化。

         第二步、标注。对区县信息进行空间标注,让读者看起来更直观。

         最终得到的效果图(基于省份进行分类)如下所示:

         除了按照省份进行分类外,还可以根据不同的收入类型进行分类展示。这里采用渐进分类方式:

 总结

        以上就是本文的主要内容,本文重点讲解如何对一个包含区县信息的excel表格,再结合对应的空间shp数据,将普通的二维表格融合空间shp数据,实现二维数据的空间化,给决策者一种地理尺度上的分布认知,更好的做好经济服务支撑。文中将重点介绍如何使用Qgis软件进行两者的融合,最后基于融合的结果进行制图,得到一个直观的结果。

  • 27
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 46
    评论
编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本方法。编译原理不仅是计算机科学理论的重要组成部分,也是实现高效、可靠的计算机程序设计的关键。本文将对编译原理的基本概念、发展历程、主要内容和实际应用进行详细介绍编译原理是计算机专业的一门核心课程,旨在介绍编译程序构造的一般原理和基本
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`是您创建的画布对象。通过这个连接,当用户在画布上选择不同的图层时,图层管理器会自动更新当前选的图层。 希望这些代码能帮助您开始实现图层管理器和画布的链接!请注意,这只是一个简单示例,您可以根据实际需求进行更多的定制和功能扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜郎king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值