目录

上一主题

4. 矢量数据属性表的使用与关联

下一主题

4.2. 空间属性关系


本教程由OSGeo中国中心维护。

4.1. 使用关键项的属性组合

4.1.1. 在Excel中导入统计数据

  1. 数据准备

通过将Excel等电子表格的各种统计数据与某些地图数据相结合,绘制专题地图是GIS的基本功能。 本节介绍如何将属性数据与空间数据相结合。我们首先使用属性表的关键项(成为关键代码的特定字段)来描述属性组合。 关系数据库能够组合来自两个或多个表的相关内容以创建新的表。GIS中的属性绑定与此功能相同,并且可以将空间数据的 属性表和表格数据通过关联字段组合。

  1. 阅读统计数据

首先,使用Excel处理统计数据,以便可以将其与QGIS的边界数据结合使用。为此,将统计数据读入Excel。

如果我们所下载的数据有text文件,则我们进行一下操作,启动Excel并从主菜单 "数据-自文本.scv" 打开“打开文件”窗口。在此窗口中, 将所有Excel文件中文件名输入字段旁边的目标文件,格式选择更改为“所有文件”,然后选择相应文件夹。 指定“省人口.txt”并单击 打开 按钮。出现“文本文件向导-1/3”时,在“原始数据格式”中选中“按分隔符 (如逗号或制表符分隔每个字段的数据)”,然后单击 下一步 按钮,如 图 4.1

_images/img_1_xz4.png

图 4.1 文本文件向导

“文本文件向导1-2/3”确认“分隔符”的“逗号”中有检查,点击 下一步 按钮。请注意,由于显示数据的Excel工作表 被赋予了已读取的文件名,因此在这种情况下工作表名称为“省人口”。读取后,将此数据保存为“人口普查(小区域)”文件夹中名 为“全国人口普查.Xlsx”的Excel工作簿(.xlsx)文件。

4.1.2. 边界数据处理

  1. 绘制边界数据

将Excel处理的统计数据与QGIS结合到边界数据中。为此,启动QGIS,绘制边界数据。在这项工作中,我们将使用创建的人口密度.qgs。 启动QGIS,在主菜单中读取“人口密度.Qgs”, 导航到 项目 ‣ 打开 ,图层名称 "China100w2015_region" , 绘制了另一个人口密度图。

  1. 关于边界数据的说明

将统计数据与此边界数据相结合时应小心。右键单击 Layers 中的“市界”以显示菜单, 选择 Open Attribute Table ,然后检查属性表。在PROVINCENA一栏中以“福建省”为例, 包含9个市,属性名name,且编号不同。如上所述,在人口普查(子区域)数据中, 由于包括市的区域被认为是一个统计区域,因此通常将相同的PROVINCENA编号分配给多个多边形。

在边界数据的属性数据中,即使PROVINCENA编号不相同,也输入每个区域和人口数据。 因此,如果统计数据与边界数据原样组合,可将PROVINCENA的统计数据将合并为一个省区域, 该统计区域的总体将被重复计算,如 图 4.2 。 因此,我们组织由多个多边形组成的统计区域,并确保每个name编号只有一个统计区域。

_images/img_2_xem.png

图 4.2 属性查询窗口

  1. 边界数据的处理

如果选择QGIS的主菜单 Vector ‣ Geometry Tools ‣ Multipart to singleparts , 将出现 "Multipart to singleparts" 窗口。选择此窗口的选项卡菜单 Parameters 后, 在 Input layer 中选择 “市界_polygon(EPSG:4326)” ,然后选中 "Selected features only" 。 此外,对于 "Single parts" ,按右侧的 ... 按钮,选择 "Save to file" , 然后打开 "Save file" 窗口。在此窗口中,“保存类型”中选择 "SHP files(.shp)" , 将文件夹改为“人口数_单部件.shp”按名称保存。此外,在 "Multipart to singleparts" 窗口中, 选中 "Open output file after running algorithm" ,然后单击 Run 按钮。 然后,将一个名为 "Single parts" 的图层添加到 "Layer" ,并绘制地图。 “人口数_单部件.shp”在文件夹中创建,并在 "Layer" 中显示为 "Single parts" 。 如果是这种情况很容易出错,请将 "Single parts" 的图层名称更改为“人口数_单部件”。 右键单击 Single parts 中的“单部件”,然后从弹出菜单中选择 Rename layer 。 然后,可以在 "Single parts" 中更改图层名称,因此将 "Single parts" 更改为 “人口数_单部件”,如 图 4.3

_images/img_3_x2k.png

图 4.3 属性表窗口

4.1.3. 将Excel数据加入边界数据

  1. 增加数据

使用QGIS处理的统计数据与边界数据组合。选择 Layer ‣ Add Layer ‣ Add Vector Layer` , 然后调出 "Data SourceManager/Vector" 窗口。在此窗口中,选中 Source Type 中的 "File" , 然后在 Encding 中选择 "UTF-8" 。在 "Source" 中,单击 ... 按钮 以显示 "Open OGR Supported vector Dataset(s)" 窗口,在“文件名”旁边的文件类型菜单中选择 "All file" 。 选择后,选择Excel文件“省人口数 .xlsx”,然后单击 Open 按钮。 此外,当按下 "Data SourceManager/Vector" 窗口中的 Add 按钮时,会在 "Layers" 中添加一个新图层, 由于此图层仅是属性表,因此在地图视图中不会绘制任何内容。如果要读取的Excel文件中有多个工作表, 按 "Data SourceManager/Vector" 窗口中的 Open 按钮后,将出现“选择要添加的矢量图层”窗口,将显示工作表列表。 显示时,单击相应的项目将其选中,然后单击 0K 按钮将包含工作表名称的图层添加到 "Layers" 中。

2.重命名层

如果使用长的图层名称,则在数据组合后将删除部分项目名称,因此它必须在3个字符以内。然后右键单击 Layers 的层以显示菜单, 并选择 Rename layer 。然后,可以在 "Layers" 中更改图层名称。

3.组合数据

双击 Layers 中的“人口数_单部件”以显示 "Layer Properties" 窗口,然后选择此窗口左侧的选项卡菜单 Joins , 如 图 4.4

_images/img_4_xh0.png

图 4.4 添加矢量连接

此时,按下窗口底部的绿色 运算符+ 按钮,当“添加矢量连接”窗口出来时,在“连接图层”中选择“人口”,在“连接字段”中 选择 "field1" ,在“目标字段”中选择 "PROVINCENA" 。确认选中“在虚拟内存中的缓存组合层”后,单击 0K 按钮。 设置显示在 "Layer Properties" 窗口中,因此单击 0K 按钮。如果要重做此任务,请在 "Layer Properties" 窗口的选项卡 菜单中选择显示的设置,然后单击 红色1 按钮。释放数据绑定,因此再次执行绑定。

4.确认数据

为了确认统计数据的结合是否顺利,右键点击 Layers 的“人口数_单部件”,选择 "Open Attribute Table" 。 当属性表向右滑动时,在边界数据的属性数据之后,可以确认,在下拉杠上连接了 "field" 这样的层名和项目名的新项目名, 追加了统计数据。确认后,按右上方按钮关闭窗口。如果属性表的统计数据添加部分显示所有数据都是空值(在没有包含数据的状态下), 则无法组合统计数据,因此再次尝试操作是必要的。

5.创建新数据和协调转换

此时的层图层是临时组合了边界数据和统计数据,并不是制作了带有统计数据的shapefile文件。 因此,有必要在属性表格中创建统计数据结合的SHEP文件。

右键单击 Layers 的“人口数_单部件”以显示菜单,选择 "Save As..." ,然后调出 "Save Vector Layer As" 窗口。 在此窗口中,选择 "ESRI Shapefile" 作为“格式”,然后单击 "File name" 的 ... 按钮,设置为保存。 在 "CRS" 中,单击右侧的 CRS 按钮以打开 "Coordinate Reference Syetem System Selector" 窗口。 在 "Coordinate Reference Syetem System Selector" 窗口中,在 "Filter" 中输入 "WGS84" ,在“空间参考系统”列表中 选择 "WGS84(EPSD:4326)" ,单击 OK 按钮。通过该操作,在 "Save Vector Layer As" 窗口中, 然后选中 "Add saved file to map" 。单击 OK 按钮。然后,在文件夹中,创建组合边界数据和统计数据的shapefile文件 “人口数_单部件2.shp”并显示在地图视图中。

4.1.4. 区域修正后的人口密度图的创建

1.统计区域的面积计算

使用层“人口数_单部件2”结合统计数据新创建人口密度图。为此,首先确定多部分后人口普查区域的面积。从QGIS主菜单中 选择 Vector ‣ Geometry Tools ‣ Add Geometry Attributes` ,调出 "Add Geometry Attributes" 窗口。 在该窗口的 "Input layer" 中选择“人口数_单部件2”,然后在 Calculate using 中选择 "Layer CRS" 。 在 Added geom info 中选择 "Save to file" 。显示 "Save file" 窗口时,在“保存类型”中选择 "SHP文件(.shp)" , 为了将来的工作,指定在“空间分析”文件夹中保存为“省人口普查.Shp”。然后,单击 Save 按钮。 此外,当选中 "Open output file after running algorithm"并单击 Run 按钮时, 会在 "Layers" 面板中添加一个名为 "Add Geometry Attributes" 的图层,并绘制一个地图。

“省人口普查.Shp”在文件夹中创建,并在 "Layers" 中显示为 "Add Geometry Attributes" 。要更改此图层名称, 请右键单击 Layers 中的 "Add Geometry Attributes" ,然后从出现的菜单中选择 Rename Layer 。 可以在图层面板中更改图层名称,因此将 "Add Geometry Attributes" 更改为“省人口普查”。 表示该层“省人口普查”的属性表中的区域的 "area_l" 的数值是QGIS唯一计算多边形面积的结果, 并且最初输入的层“市界”的属性值与表中的 "AREA" 值略有不同。 如果需要使用图层“市界”的区域值,则需要添加多部分的多边形区域并修改属性表中的值。

2.人口密度的计算

使用新计算的统计区域 "area_1" 的面积来确定总人口的密度。在 Layers 中双击“省人口普查”以显示 "Layer Properties" 窗口, 然后选择窗口左侧的选项卡菜单 Source Fields 。在这里,如果单击 "Field" 中的 Field Calculator 按钮并 将 "Field Calulator" 设置为自动生成将显示 "Field Calulato" 窗口。在此窗口中,选中 "Create virtual field" 并选择“密度” 作为更新字段,如 图 4.5

_images/img_5_x5c.png

图 4.5 人口密度计算

当您在列表中的 Fieid and Values 中双击 "perimeter" 时,"perimeter" 将显示在 "Expression" 中。 此时,按 "Expression" 的 运算符/ 按钮,在 "Fieid and Values" 中双击 "area" , 然后单击 Expression"运算符*" 按钮。然后在 Expression 中输入“半宽”为 "1000000" 。 确认在“公式”输入字段中输 "perimeter"/"area"*1000000 后,单击 "Field Calulato" 窗口中的 OK 按钮。

此外,当在 "Layer Properties" 窗口中按下 "Source Fields" 的 Toggle editing mode 按钮时, 将显示“退出编辑”窗口。单击 Save 按钮。因此,记录在层“省人口普查”的属性数据中 在“密度”中新计算的人口密度,如 图 4.6

_images/img_6_xzo.png

图 4.6 人口密度计算

3.地图符号设置

选择 "Layer Properties" 窗口左侧的 Symbology 选项卡菜单,单击窗口底部的 Style 按钮, 然后选择 Load Style 。当出现 "Database styles manager" 窗口时,在 "File" 右侧的菜单中选择 "QGIS图层样式文件" , 然后在人口普查(小区域)文件夹中选择“人口密度”。并按 打开 按钮。在窗口的 "Power Ram" 中选择“密度”, 然后单击 0K 按钮。显示分为五个等级的人口密度分布图,如 图 4.7

_images/img_7_xwz.png

图 4.7 地图符号设置

完成上述工作后,选择主菜单 Project ‣ Save As ,并将其作为“省人口普查 .qgs”保存在“空间分析”文件夹中。