4.4. 计算线段的长度和基本统计¶
QGIS 内建的功能可以计算图征的几何性质,像是长度、面积、周长等等。本节我们计算线段的长度与统计。 我们使用的数据是北美铁路网的线段式 shapefile 来计算铁道总长度。 可以在 http://www.qgistutorials.com/downloads/ne_10m_railroads_north_america.zip 下载
4.4.1. 计算及统计¶
1.首先打开QGIS,加载所需要的数据,选择 Open Attribute Table ,这个图层含有一个叫做"sov_a3"的属性,其值使用三个英文字母来代表 这段图层位在哪个城市。我们要利用这个属性来选择位于美国境内的铁路,如 图 4.16 。
进行加载,图层载入后, 会显示所有北美的铁道线段。我们的目标是只计算美国的铁路长度,所以必须要先选择那些位于美国境内的铁路才行。 所以右键点击图层打开
图 4.16 查看属性¶
2.在 Attribute Table 视窗中按下 Select features using an expression 按钮,如 图 4.17 。

图 4.17 运算按钮¶
3.当 Select By Expression 的视窗出现后,在 Fields and Values 分类中找到"sov_a3"属性, 然后点击两下以加入到 Expression 区中,补完这个表达式 "sov_a3" = 'USA' ,填好后按下 Select , 然后按 Close ,如 图 4.18 。

图 4.18 运算界面¶
4.回到 QGIS 主视窗,现在在美国境内的线段都被选取,并标为黄色了,现在来把选取区域另存新档。 在"ne_10m_railroads_north_america"图层上单击右键然后选择 Export 中的 Save Selected Features As... , 如 图 4.19 。

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

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

图 4.21 设置CRS¶
7.回到刚才的 Save vector layer as... 视窗,勾选 "Add saved file to map" 和 "Save only selected feature"` , 最后按下 OK ,如 图 4.22 。

图 4.22 另存新档¶
8.操作完成后,QGIS 中会出现叫做"usa_railroads"的新图层。现在已经用不到旧图层, 可以取消"ne_10m_railroads_north_america"的勾选,把它隐藏起来了,在"usa_railroads" 图层上按右键, 选择 Open Attribute Table ,如 图 4.23 。

图 4.23 新档属性¶
9.接下来就来为所有图征新增一个长度的属性。按下 Toggle editing 钮以进入编辑模式, 在此模式中,按下 Open field calculator 钮,如 图 4.24 。

图 4.24 编辑模式¶
10.在 Field Calculator 中,先勾选"Create a new field",在"Output field name"中输入 "length_km"。 在 Output field type 中选择 "Decimal number (real)",精确度 Precision 输入"2", 然后在底下找出 "Geometry" 分类中的"$length"并且双击以加入 "Expression" 区块。 因为我们想要以"meters"为单位但图层的 CRS 使用"km"为单位,所以这里公式要改成:"$length / 1000"。 最后按下 OK ,如 图 4.25 。

图 4.25 编辑设置¶
11.回到 Attribute Table ,新的"length_km"属性就会出现。再次按下 Toggle editing 以储存刚才所做的修改。 如 图 4.26 。

图 4.26 新增属性¶
12.现在每个线段都有自己的长度,我们只需简单的加总,就能知道全线段"Total", 接下来选择 图 4.27 。
, 如
图 4.27 计算¶
13.然后在 Input Layer 中选择"usa_railroads",在 Field to calculate statistics on 中选择"length_km"。 按下 Run 后,就可以看到多个统计资讯出现,其中的"Sum"数值就是我们这次要找的铁道总长度, 如 图 4.28 。
铁道总长度在不同的投影下会有些不同。实物上,线段、道路等长度一般会在制作资料库时一并测量,并作为要素的其中一个属性。 本节介绍的方法可以当作真实线段长度的近似估计,使用在那些没有这个属性的要素上。

图 4.28 计算结果¶