QGIS基本功|5 QGIS图层进阶(二)- 连接属性表

本文介绍如何在QGIS中将统计年鉴等纯属性数据与地理空间数据进行连接,通过预处理、属性表连接、可视化和保存等步骤,实现属性数据的空间可视化分析。利用QGIS的【按字段值连接属性】工具,将统计年鉴数据与省级行政区划图层关联,通过颜色渐变展示年末总人口的分布差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GIS界流行一句话:人类活动80%的信息与地理位置有关。然而,我们得到的数据中有很大一部分却没有地理几何图形,而是一张张文字和数字组成的表格,例如,统计局每年发布的统计年鉴。如何将这些表格定位到地图上,并使用表格数据做空间可视化分析,是GISer需要掌握的基本技能。

本文以全国省级行政区划为地理空间底图,以统计年鉴为属性表来源,从数据预处理、表连接、属性表的使用、表持久化四个方面,演示空间数据与纯属性数据结合并进行分析的过程。        

 

01  获取示范数据

 

• 全国2015年省级行政区划来自资源环境科学与数据中心,该图层为免费公开的数据,输入网址:http://www.resdc.cn/Default.aspx,注册后即可免费下载。

• 统计年鉴来自国家统计局官网,网址为:http://www.stats.gov.cn/,无需注册即可下载。

为了方便大家,以上数据已经打包上传到网盘,连接如下:

链接:https://pan.baidu.com/s/18vKpBMjOGfT9nHcNo31bFw 提取码:hkyi

 

02 预处理

 

打开下载到的统计年鉴数据,本文选择“分地区人口的城乡构成和出生率、死亡率、自然增长率”为例进行操作演示。可以看到,该电子表格并不适合直接导入到QGIS中,在空间数据挂接之前,需要对数据做预处理。

 

 

  • 处理多重表头

 

统计年鉴的表头一般由标题和指标名称构成,指标名称可能包含多个层级,需要逐层合并,才能得到某列数据的完整列名,这种复杂的表头样式俗称多重表头。例如上图中第三列的指标名称应为:城镇人口数;第四列指标名称为:城镇人口比重(%)。为了便于计算机处理,在数据整理时一般将复杂的指标名称与数据列名做出对照表,以元数据形式随内容分发。

 

本文采用的处理步骤为:删除表格标题,用英文代替中文指标名称,保留中英文指标名称之间的对应关系。处理结果如下:

 

 

  • 删除全国数据和空行

 

表格中的“全国”或者“合计”行,与其他数据不在同一行政级别上,应删除。为了阅读方便而增加的空行也应去掉。

 

  • 处理省名中的空格

 

统计年鉴中为了提高阅读舒适度和纸质出版物的美观,在省名称中加入空格以达到对齐效果。由于空格对计算机来说也是字符串的内容࿰

03-08
### QGIS 地理信息系统软件介绍 QGIS 是一款开源的地理信息系统 (GIS) 软件,允许用户创建、编辑、可视化和分析地图数据。这款工具支持多种空间数据格式,并提供丰富的插件库来扩展功能[^1]。 #### 主要特点 - **跨平台兼容性**:可以在 Windows、macOS 和 Linux 上运行。 - **多源数据支持**:能够处理矢量、栅格以及数据库中的地理信息。 - **强大的制图能力**:提供了专业的样式设置选项,可以制作高质量的地图产品。 - **灵活的数据管理**:内置了完整的属性表管理和查询构建器等功能。 - **社区驱动开发模式**:拥有活跃的开发者群体和技术文档资源。 #### 安装指南 对于初次使用者来说,在官方网站下载适合操作系统版本的安装包是最简单的方式。完成安装后启动程序即可进入图形化界面开始探索各项基本操作[^2]。 ```bash # 访问官方网址获取最新版安装文件链接 https://qgis.org/en/site/forusers/download.html ``` #### 基础工作流程示例 为了帮助理解如何利用 QGIS 进行实际项目的工作流,这里给出一个简单的例子: 假设有一个城市规划部门希望评估新建公园位置的影响范围。可以通过载现有的土地覆盖层作为底图;接着导入人口密度统计数据并将其转换成热力图形式叠显示;最后通过缓冲区分析确定潜在影响区域边界[^3]。 ```python import processing from qgis.core import QgsProject, QgsVectorLayer # 载现有图层 land_cover_layer = QgsVectorLayer("path/to/landcover.shp", "Land Cover", "ogr") population_density_layer = QgsVectorLayer("path/to/populationdensity.asc", "Population Density", "gdal") if not land_cover_layer.isValid() or not population_density_layer.isValid(): print("Failed to load one of the layers.") else: # 将新图层到当前项目中 QgsProject.instance().addMapLayers([land_cover_layer, population_density_layer]) # 执行缓冲区分析 buffer_result = processing.run("native:buffer", {'INPUT': 'path/to/park_location.geojson', 'DISTANCE': 500, 'OUTPUT': 'memory:'}) park_buffer_layer = buffer_result['OUTPUT'] QgsProject.instance().addMapLayer(park_buffer_layer) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值