目录

上一个主题

4.3. 属性搜索

下一个主题

4.5. 属性表与CSV表连接


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

4.4. 计算线段的长度和基本统计

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

4.4.1. 计算及统计

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

_images/5_xbg.png

图 4.16 查看属性

  1. Attribute Table 视窗中按下 Select features using an expression 按钮,如 图 4.17

_images/6_x83.png

图 4.17 运算按钮

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

_images/7_x26.png

图 4.18 运算界面

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

_images/9_xw0.png

图 4.19 另存新档

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

_images/10_xp9.png

图 4.20 另存新档

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

_images/11_x1j.png

图 4.21 设置CRS

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

_images/12_xin.png

图 4.22 另存新档

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

_images/14_xmd.png

图 4.23 新档属性

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

_images/15_xop.png

图 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

_images/16_xct.png

图 4.25 编辑设置

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

_images/17_xlz.png

图 4.26 新增属性

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

_images/18_x6s.png

图 4.27 计算

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

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

_images/19_xdv.png

图 4.28 计算结果