计算线段的长度和统计资讯

(Unfinished) QGIS 内建的功能可以计算图征的几何性质,像是长度、面积、周长等等。

内容说明

使用北美铁路网的线段式 shapefile 来计算美国的铁道总长度。

你还会学到这些

  • 使用表达式选择图征。
  • 把图层重新投影到专案的座标参考系统 (CRS) 上。
  • 查阅某图层中某个属性的统计资讯。

取得资料

Natural Earth 上有属于公领域资料的铁路资料库, North America supplement 也在此提供下载。

为了方便起见,你也可以直接用下面的连结下载:

ne_10m_railroads_north_america..zip

资料来源 [NATURALEARTH]

操作流程

  1. 选择 Layer ‣ Add Vector Layer.
../_images/118.png
  1. 选择 the ne_10m_railroads_north_america.zip 并按下 OK.
../_images/215.png
  1. Select layers to add... 对话框中,选择 ne_10m_railroads_north_america.shp
../_images/38.png
  1. 图层载入后,会显示所有北美的铁道线段。我们的目标是只计算美国的铁路长度,所以必须要先选择那些位于美国境内的铁路才行。以右键点选此图层,然后 Open Attribute Table.
../_images/45.png
  1. 这个图层含有一个叫做 sov_a3 的属性,其值使用三个英文字母来代表这段图征位在哪个城市。我们要利用这个属性来选择位于美国境内的铁路。
../_images/55.png
  1. Attribute Table 视窗中按下 Select features using an expression 的按钮。
../_images/65.png
  1. 以表示 Select By Expression 的视窗出现后, 在 Functions list 中的 Fields and Values 的分类中找到 sov_a3 属性,然后按两下以加入到 Expression 区中,补完这个表达式 "sov_a3" = 'USA' ,好了以后按下 Select 然后 Close.
../_images/75.png
  1. 回到 QGIS 主视窗,现在在美国境内的线段都被选取,并标为黄色了。
../_images/85.png
  1. 现在来把选取区域另存新档吧。在 ne_10m_railroads_north_america 图层上按右键然后选择 Save Selection As....
../_images/95.png
  1. 选择 Browse 然后把输出档命名为 usa_railroads.shp. 。这里我们顺便转换一下图层的 CRS,请按下在 CRS 旁边的 Browse

注解

QGIS 的内建函数是使用图层的座标参考系统 (CRS) 的预设单位来计算线段长度。因为 EPSG:4326 这个 CRS 使用 degrees 当作单位, 计算线段或面积的结果也会是 degrees 或是 square degrees ,以此作单位的数值其实并不实用 所以这里必须要使用以 meters 或是 feet 作为单位的专案座标参考系统来做计算。

../_images/105.png
  1. 因为我们是要计算长度,这里来选一个等距离投影试试。在 Filter 栏位输入 north america equ 后,底下的结果就会出现 North_America_Equidistant_Conic EPSG:102010 选择它作为新的 CRS 之后,按下 OK.
../_images/119.png
  1. 回到刚才的 Save vector layer as... 视窗,勾选 Add saved file to map ,最后按下 OK.
../_images/125.png
  1. 操作完成后,QGIS 中会出现叫做 usa_railroads 的新图层。现在已经用不到旧图层,可以取消 ne_10m_railroads_north_america 的勾选,把它隐藏起来了。
../_images/135.png
  1. usa_railroads 图层上按右键,选择 Open Attribute Table.
../_images/145.png
  1. 接下来就来为所有图征新增一个长度的属性看看。按下 Toggle editing 钮以进入编辑模式,在此模式中,按下 Open field calculator 钮。
../_images/155.png
  1. Field Calculator 中,先勾选 Create a new field,在 Output field name 中输入 length_km 。 在 Output field type 中选择 Decimal number (real),精确度 Precision to 2. 然后在底下的 Function list 框中,找出位于 Geometry 分类中的 $length 并且点两下以加入 Expression. 区块。因为我们想要以 meters 为单位但图层的 CRS 使用 km 为单位,所以这里公式要改成: $length / 1000。最后按下 OK.
../_images/165.png
  1. 回到 Attribute Table,新的 length_km 属性就会出现。再次按下 Toggle editing 以储存刚才所做的修改。
../_images/174.png
  1. 现在每个线段都有自己个长度了,我们只需简单的加总,就能知道全线段 Total 选择 Vector ‣ Analysis Tools ‣ Basic Statistics.
../_images/185.png
  1. 然后在 Input Vector layer 中选择 usa_railroads,在 Target field 中选择 length_km 。按下 OK 后,就可以看到许多的统计资讯出现,其中的 Sum 数值就是我们这次要找的铁道总长度。

注解

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

../_images/193.png