006 矢量数据属性表的使用和关联

1 空间属性关系

1.1 数据导入和图层组合

  1. 读取数据
    除了使用关键项的连接之外,还有一种根据属性组合中的空间位置关系进行组合的方法。 在本节中,我们将介绍一种方法,用于将空间关系中的多边形数据属性与任意点数据属性相结合。 我们使用的是 “world earthquake”“wcountry” 数据,首先,启动QGIS并在主菜单 Project ‣ Open 中加载我们所需要的数据。 如 图 4.8 。
    在这里插入图片描述图 4.8 数据及属性显示
  2. 组合层
    选择QGIS的主菜单 Vector ‣ Data Management Tools ‣ Mergr Vector Layer ,弹出 “Merge Vector Layers” 窗口。 选择此窗口的选项卡菜单 Parameters ,然后单击 “Input layers” 右侧的 … 按钮。如果显示多个窗口, 请选中“地震点避难场所缓冲区(EPSG:4326)”和“地震点避难场所缓冲区2(EPSG:4326)”并单击 0K 按钮。

在 “Merged” 中,单击右侧的 … 按钮,然后选择 “Save to file” 。出现 “Save file” 窗口时, 在“保存类型”中选择 “SHP文件(.shp)” 。接下来,指定“地震点_组合层.Shp”应保存在空间分析文件夹中,然后单击 Save 按钮。 然后,选中 “Open output file after running algorithm” ,然后单击 Run 按钮。 在 “Layers” 中创建图层 “Merged” ,并绘制地图。

此时在“空间分析”文件夹中创建Shp文件,并显示名称为 “Merged” 图层面板要更改此图层名称, 请右键单击 Layers 中的 “Merged” ,然后从出现的菜单中选择 Remove Layer 。 可以在 “Layers” 中更改图层的名称,因此将 “Merged” 更改为“地震点_层组合”。 确认新图层后,取消选中“地震点避难场所缓冲区(EPSG:4326)”和 “地震点避难场所缓冲区2(EPSG:4326)”并隐藏它们,如 图 4.9 。
在这里插入图片描述
图 4.9 组合层后的图层显示

1.2 属性组合

作为属性结合的工作,最初将层 “world earthquake” 的属性数据与层 “wcountry” 的属性数据进行结合。 选择主菜单 Vector ‣ Data Management Tools ‣ Join Attributes by Location , 以显示 “Join Attributes by Location” 窗口。在此窗口中,为 Input layer 选择 “world earthquake(EPSG:4326)” , 然后为 Join layer 选择 “wcountry(EPSG:4326)” 。 另外,在 Geometric predicate 中,勾选"intersects"。此外,在 Join type 中 选择 “Take attributes of the first located feature only (one-to-one)” ,如 图 4.10 。
在这里插入图片描述

图 4.10 属性组合设置
对于 “Joined layer” ,单击右侧的 … 按钮并选择 “Save to file” 。 显示 “Save file” 窗口时,在“保存类型”中选择 “SHP文件(.shp)” , 在“空间分析”文件夹中,指定“地震点_属性组合.shp”作为保存目的地, 然后单击 Save 按钮。选中 “Open output file after running algorithm” , 然后单击 Run 按钮。在 “Layers” 中创建一个名为 “Joined layer” 的图层。

此时,在“空间分析”文件夹中创建“地震点_属性组合.shp”, 并在 “Layers” 中将其命名为 "Joined layer "。要更改图层名称, 请在 Layers 中右键单击 “Joined layer” ,从显示的菜单中选择 Remove Layer , 可以在 “Layers” 中更改层名称,因此将 “Joined layer” 更改为“地震点_属性组合”。 右键单击图层“震点_属性组合”以显示菜单,然后选择 Open Attribute Table 。 查看显示的属性表,可以确认组合 “world earthquake” 和 “wcountry” 的属性已被组合,如 图 4.11 。
在这里插入图片描述

图 4.11 属性组合结果显示
此时,从主菜单中选择 Save ,然后在“空间分析”文件夹并保存“空间分析5.Qgs”。 选择 Project ‣ Exit QGIS退出QGIS。

2 属性搜索

2.1 按字符串搜索

  1. 字符串搜索
    属性搜索是一种从属性元组中提取满足任意条件的记录的函数。在这里,我们使用在全球地理基本数据来解释属性搜索。

首先启动QGIS,我们首先加载数据,点击 Layer ‣ Add Layer ‣ Add Vector Layer 加载 “wcountry.shp” 数据, 使用层 “wcountry.shp” 的属性表进行字符串搜索。在搜索前我们打开属性表,先观察下数据的属性。 接下来,使用"wcountry.shp"的属性表中的 “FCNAME” 属性名称,搜索检索所在的“中国”的记录。 右键单击 Layers 的 “wcountry.shp” 以显示菜单,然后选择 “Open Attribute Table” 。 显示 “Attribute Table” 窗口时,单击工具栏上的 Select features using an expression 图标。 当出现 “Select by Expression” 窗口时,双击列表中 Fields and Values 中的 “FCNAME” 。 然后, “FCNAME” 显示在 “Expression” 输入字段中。单击 运算符= 按钮。此外,单击 Fields and Values 中的所有值, 当在 “FCNAME” 输入的数据显示在列表中时,双击“中国”。作为这些操作的结果,在窗口左侧的输入字段中输入“PROVINCENA=‘中国’”。 注意这里的“中国”要是在输入字段中双击获得,而不是自己手动输入,我们自己手动输入是无法进行字符串搜索的。 接下来单击 Select Features 按钮,地图上选择的统计区域颜色会发生变化,如 图 4.12 。
在这里插入图片描述

图 4.12 字符串搜索设置
确认已选择统计区域后,请检查属性表。如果查看"wcountry.shp"的属性表,可以看到在 “FCNAME” 项目中输入“中国”的记录被选中。 要取消此选择,请单击 “Attribute Table” 窗口工具栏中的 Deselect all 图标。完成上述操作后, 单击 “Select by Expression” 窗口中的 Close 按钮。

  1. 模糊搜索
    我们引入模糊字符串搜索作为下一个例子。上述搜索条件是它与字符串“中国”完全匹配。 但是,接下来我们搜索的条件是包含在字符串中的某处名称。

首先还是单击 “Attribute Table” 窗口工具栏上的 Select features using an expression 图标以显示 “Select by Expression” 窗口。 双击此窗口列表中 Fields and Values 中的 “FENAME” ,然后在列表中的"Operators"中双击 LIKE 。 确认 “FENAME LIKE” 表示在窗口左侧的进口字段中,然后输入 “NAME” ,单击 Select Features 按键。 然后,在属性表的字段项 “FENAME” 中,选择含有字符串 “name” 的统计区域,并在相关区域的地图上进行变更, 如 图 4.13 。
在这里插入图片描述

图 4.13 模糊搜索
搜索完成后,单击 “Attribute Table” 窗口工具栏上的 Deselect all 图标,然后单击 “Select by Expression” 窗口中的 Close 按钮。

2.2 数字搜索

  1. 按一个条件搜索
    到目前为止,已经执行了使用字符串的属性搜索,现在我们使用数值之间的条件来执行属性搜索。 为此,使用属于 “wcountry.shp” 的属性数据的来设置属性搜索的条件,可以统计出"面积、人口"。 接下来单击 “Attribute Table” 窗口滚动条中的 Select features using an expression 图标以显示 “Select by Expression” 窗口。 双击此窗口列表中 Fields and Values 中的"POP",然后双击 Expression 中 “Operators>=” 。当窗口左侧的输入字段中 显示 “POP” >= 时,输入 “10000” 。确认此输入字段中显示 “POP”> =10000,然后单击 Select Features 按钮, 选择人口密度为10000人或更高的统计区域,并在地图上受影响区域的颜色会发生变化,如 图 4.14 。
    在这里插入图片描述

图 4.14 数字搜索

  1. 按多种条件搜索
    此外,为了执行复杂的属性搜索,除了人口密度为10000或更大的条件之外,还可以添加面积或更多的条件。 因为根据数据的属性特点,我们选取的条件为人口密度大于10000,面积大于100的国家,我们来看下,根据这样的条件进行搜索会有什么样的结果。 在 “Select by Expression” 窗口的输入字段中输入"POP"> =10000,双击列表"Operators"中的"AND",然后在列表中选择 “Fields and Values” 。 双击 Fields and Values 中的"SHAPE_AREA"。然后,在列表的 Operators 中双击 “Operators> =” ,并在窗口左侧的输入字段中输入"1000"。 确认"POP">10000 AND “SHAPE_AREA”> =1000,然后单击 Select Features 按钮。则该区域的颜色会在地图上发生变化, 如 图 4.15 。
    在这里插入图片描述

图 4.15 按多种条件上搜索
在这种情况下,我们提取了满足两个条件的统计区域,但应使用两个条件中的一个,如人口密度为10000 或更高或面积高于1000的统计区域。 如果要提取满足的区域,请输入 “OR” 而不是 “AND” 。完成搜索后,单击 “Attribute Table” 窗口工具栏中的 Deselect all 图标, 然后单击 “Select by Expression” 窗口中的 Close 按钮。

3 计算线段的长度和基本统计

QGIS 内建的功能可以计算图征的几何性质,像是长度、面积、周长等等。本节我们计算线段的长度与统计。 我们使用的数据是北美铁路网的线段式 shapefile 来计算铁道总长度。 可以在 http://www.qgistutorials.com/downloads/ne_10m_railroads_north_america.zip 下载

3.1 计算及统计

  1. 首先打开QGIS,加载所需要的数据,选择 Layer ‣ Add Vector Layer 进行加载,图层载入后, 会显示所有北美的铁道线段。我们的目标是只计算美国的铁路长度,所以必须要先选择那些位于美国境内的铁路才行。 所以右键点击图层打开 Open Attribute Table ,这个图层含有一个叫做"sov_a3"的属性,其值使用三个英文字母来代表 这段图层位在哪个城市。我们要利用这个属性来选择位于美国境内的铁路,如 图 4.16 。
    在这里插入图片描述

图 4.16 查看属性

  1. 在 Attribute Table 视窗中按下 Select features using an expression 按钮,如 图 4.17
    在这里插入图片描述

图 4.17 运算按钮

  1. 当 Select By Expression 的视窗出现后,在 Fields and Values 分类中找到"sov_a3"属性, 然后点击两下以加入到 Expression 区中,补完这个表达式 “sov_a3” = ‘USA’ ,填好后按下 Select , 然后按 Close ,如 图 4.18 。
    在这里插入图片描述

图 4.18 运算界面

  1. 回到 QGIS 主视窗,现在在美国境内的线段都被选取,并标为黄色了,现在来把选取区域另存新档。 在"ne_10m_railroads_north_america"图层上单击右键然后选择 Export 中的 Save Selected Features As… , 如 图 4.19 。
    在这里插入图片描述

图 4.19 另存新档

  1. 在 Format 中选择 ESRI Shapfile 然后把输出档命名为"usa_railroads.shp"。 这里我们顺便转换一下图层的"CRS",按下 CRS 后边的图标,如 图 4.20 。 QGIS 的内建函数是使用图层的座标参考系统 (CRS) 的预设单位来计算线段长度。单位是“degrees”, 计算线段或面积的结果也会是"degrees"或是"square degrees" ,以此作单位的数值其实并不实用所以这里必须要使用 以"meters"或是"feet"作为单位的座标参考系统来做计算。
    在这里插入图片描述图 4.20 另存新档

  2. 因为我们是要计算长度,这里来选一个等距离投影试试。在 Filter 栏位输入"north america equ" 后,下面结果就会 出现"North_America_Equidistant_Conic EPSG:102010"选择它作为新的 CRS 之后,按下 :guilabel:`OK , 如 图 4.21 。
    在这里插入图片描述

图 4.21 设置CRS

  1. 回到刚才的 Save vector layer as… 视窗,勾选 “Add saved file to map” 和 “Save only selected feature”` , 最后按下 OK ,如 图 4.22 。
    在这里插入图片描述

图 4.22 另存新档

  1. 操作完成后,QGIS 中会出现叫做"usa_railroads"的新图层。现在已经用不到旧图层, 可以取消"ne_10m_railroads_north_america"的勾选,把它隐藏起来了,在"usa_railroads" 图层上按右键, 选择 Open Attribute Table ,如 图 4.23 。
    在这里插入图片描述

图 4.23 新档属性

  1. 接下来就来为所有图征新增一个长度的属性。按下 Toggle editing 钮以进入编辑模式, 在此模式中,按下 Open field calculator 钮,如 图 4.24 。
    在这里插入图片描述图 4.24 编辑模式

  2. 在 Field Calculator 中,先勾选"Create a new field",在"Output field name"中输入 “length_km”。 在 Output field type 中选择 “Decimal number (real)”,精确度 Precision 输入"2", 然后在底下找出 “Geometry” 分类中的" l e n g t h " 并且双击以加入 " E x p r e s s i o n " 区块。因为我们想要以 " m e t e r s " 为单位但图层的 C R S 使用 " k m " 为单位,所以这里公式要改成: " length"并且双击以加入 "Expression" 区块。 因为我们想要以"meters"为单位但图层的 CRS 使用"km"为单位,所以这里公式要改成:" length"并且双击以加入"Expression"区块。因为我们想要以"meters"为单位但图层的CRS使用"km"为单位,所以这里公式要改成:"length / 1000"。 最后按下 OK ,如 图 4.25 。
    在这里插入图片描述图 4.25 编辑设置

  3. 回到 Attribute Table ,新的"length_km"属性就会出现。再次按下 Toggle editing 以储存刚才所做的修改。 如 图 4.26 。
    在这里插入图片描述

图 4.26 新增属性

  1. 现在每个线段都有自己的长度,我们只需简单的加总,就能知道全线段"Total", 接下来选择 Vector ‣ Analysis Tools ‣ Basic Statisticsfor fields , 如 图 4.27 。
    在这里插入图片描述

图 4.27 计算

  1. 然后在 Input Layer 中选择"usa_railroads",在 Field to calculate statistics on 中选择"length_km"。 按下 Run 后,就可以看到多个统计资讯出现,其中的"Sum"数值就是我们这次要找的铁道总长度, 如 图 4.28 。

铁道总长度在不同的投影下会有些不同。实物上,线段、道路等长度一般会在制作资料库时一并测量,并作为要素的其中一个属性。 本节介绍的方法可以当作真实线段长度的近似估计,使用在那些没有这个属性的要素上。
在这里插入图片描述图 4.28 计算结果

4 属性表与CSV表连接

当想要用的资料集可能不是 shapefile,或是任何一种空间资料格式。 这些资料的格式往往是表格或试算表,要把它们加入你的资料分析中, 必须让它们和你手上的空间资料产生关联。操作这个过程称为资料表连接 Table Join 。 这节我们会说明在 QGIS 中如何将资料表连接起来。

我们使用美国加州的人口统计分区 shapefile,与美国人口调查局提供的人口数资料表,做一份加州的人口分布图。 可以在这里下载: http://www.qgistutorials.com/downloads/tl_2013_06_tract.zip

http://www.qgistutorials.com/downloads/ca_tracts_pop.csv

4.1 表连接

  1. 我们先载入人口统计分区的 shapefile文件。选择 Layer ‣ Add Vector Layer ,加载"tl_2013_06_tract.shp"图层, 可直接点 Add , QGIS 就会载入人口统计分区资料,如 图 4.29 。
    在这里插入图片描述图 4.29 加载图层

  2. 图层加载后单击图层右键,进行属性查看。选择 Open Attribute Table 检视 shapefile 中每个分区的属性。 要把表格资料与这份 shapefile 文件相关联,图层中的每个要素都需有个共同属性,其值在每个图征中各不相同。 在这个例子中,"GEOID"属性可以识别每一个分区,这就可以把这份 shapefile 与任何包含同样 ID 的表格资料"link"起来, 如 图 4.30 。
    在这里插入图片描述

图 4.30 属性查看

  1. 用文字编辑器打开"ca_tracts_pop.csv"这份 CSV 文件。你会注意到,文件中的每一列都含有关某个分区的资讯, 其中就有我们在上一步骤看到的识别属性。注意在这份 CSV 中,有个识别属性栏位叫作 “GEO.id2” 。 还会看到 “D001” 这个栏位记录了每个分区的人口数。如 图 4.31 。
    在这里插入图片描述

图 4.31 CSV文件查看

  1. 我们可以不做任何加工,直接汇入这份 CSV 文件。不过,这样一来每个栏位预设的资料型态会是 “String” (文字)。 这样通常没有问题,除了像 “D001” 这样包含人口数字的栏位。如果这些数字栏位被当作文字汇入,我们就不能拿这些栏位做数学计算。 要让 QGIS 把这些栏位当作数字汇入,我们必须建立一个".csvt"的附加文件。这个附加文件只会有一列内容, 用来指定每一栏位的资料型态。我们把这个附加文件命名为"ca_tracts_pop.csvt"储存到原本的".csv"文件所在的目录。 如 图 4.32 。
    在这里插入图片描述

图 4.32 CSV文件

  1. 我们可以把 CSV 文件汇入 QGIS 中了。选择 Layer ‣ Add Layer ‣ Add Delimited Text Layer , 在目录下浏览并选择 CSV 档。注意 File format 要选择 “CSV (comma separated values)” 。这份资料是单纯的表格, 所以我们得注明文件中不包含地理资讯。选择 No geometry (attribute only table) , 再点选 Add ,如 图 4.33 。
    在这里插入图片描述

图 4.33 加载CSV文件

  1. 这样 CSV 文件就被汇入 QGIS 里成为一份表格,接下来选择"tl_2013_06_tract"图层,然后按右键选择 Properties , 在 Layer Properties 视窗中,选择 Joins 分页,按下底端的"+"号按钮,以建立新的资料表连接, 如 图 4.34 。
    在这里插入图片描述图 4.34 Joins分页

  2. 在 Add vector join 视窗中,Join layer 选择"ca_tracts_pop",然后我们需要为 shapefile 和 CSV 档选择用以 连接的独特属性,也就是说 Join field 要填上"GEO.id2"和 Target field 要填上"GEOID" 。最后按下 OK , 如 图 4.35 。
    在这里插入图片描述

图 4.35 连接

  1. 关闭 Layer Properties 视窗,回到 QGIS 主画面。现在 CSV 档中的资料已经与 shapefile 连接在一起了。 在"tl_2013_06_tract"图层上按右键,选择 Open Attribute Table ,现在我们可以看见所有的图征都多了几个新的栏位, 包括"ca_tracts_pop_D001"这个栏位。现在你可以从 CSV 的资料表连结存取每个分区的人口了,现在关掉属性表并回到 QGIS 主视窗,如 图 4.36 。
    在这里插入图片描述

图 4.36 连接新属性

  1. 接下来我们设置一下图层,在"tl_2013_06_tract"图层上按右键选择 Properties ,选择 Symbology 分页, 然后从下拉式选单中选择 Graduated 。由于我们要制作人口分布图,最好的颜色配置当然是基于人口的数量多少来决定。 在行栏位中选择"ca_tracts_pop_D001",然后再从 Color ramp 下拉选单中选择 “Column” 。 接着在 Mode 中选择 “Quantile (Equal Count)” 。按下 Classify 后,就可看到不同的人口数量被指定成不同颜色, 最后按下 OK ,如 图 4.37 。
    在这里插入图片描述

图 4.37 图层设置

  1. 这下我们就看到了一张人口分区普查结果地图。你可以使用 Zoom in 钮查看图层中较小的区域, 如 图 4.38 。
    在这里插入图片描述

图 4.38 放大查看

  1. 精细、准确的加州的人口地图制作完成。也可以试着使用同样的方法针对不同的普查结果制作地图, 如 图 4.39 。
    在这里插入图片描述

图 4.39 效果图

  • 17
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值