网格式影像的基本分析与样式设定

许多的科学观测与研究产生的是网格式影像(Raster)资料。这种资料以点阵图的方式呈现,点阵中的每个像素都有自己的特定数值。只要使用一些数学运算,就可以拿这些数值进行有趣的分析。QGIS 中的
Raster Calculator 功能具有许多基本的指令可供使用,在本教学中,会展示基本的 影像计算 功能操作,以及一些设定网格式影像样式的选项。

内容说明

我们要使用人口密度的网格资料,呈现 1990 到 2000 年间,人口密度具有大幅度改变的地方。

你还会学到这些

  • 在 QGIS 中一次读取多个资料集。

取得资料

这边要使用的是 Gridded Population of the World (GPW) v3 资料库中,以 ASCII 格式储存的、1990 年和 2000 年的全球网格化人口资料。

以下说明如何搜寻与下载相关资料。

  1. 前往 Population Density Grid, v3 download page.Data Attributes 中选择 .ascii format, 1° resolution1990 year,然后按 Download. 。接下来你可能要建立一个免费帐号然后登入,或是直接使用底下的 Guest Download 来下载。接者以同样的方式取得 2000 year 年的资料。
../_images/1127.png

完成后会有 2 个 zip 档。

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

gl_gpwv3_pdens_90_ascii_one.zip

gl_gpwv3_pdens_00_ascii_one.zip

资料来源 [GPW3]

操作流程

  1. 打开 QGIS,选择 Layer ‣ Add Raster Layer...
../_images/269.png
  1. 移到下载档案的资料夹,按住 Ctrl 键后点选两个 zip 档,这样就可以一次读取它们。
../_images/337.png
  1. 每个 zip 档都有 2 个网格档。有 a 的那个档表示人口数量有经过调整以符合联合国的统计数值。本教学使用调整过后的资料。选择 glds00ag60.asc 图层,然后按下 OK.
../_images/427.png
  1. 这个图层并没有定义 CRS,因此我们得手动选择 EPSG:4326 作为这个以经纬度为单位的图层之座标参考系统。
../_images/528.png
  1. 由于我们选择了两个 zip 档,因此同样的步骤要做两次。重复以上步骤,这次选择 glds90ag60.asc 加到专案中。
../_images/626.png
  1. 再一次选 EPSG:4326 作为 CRS.
../_images/725.png
  1. 现在两个图层都读到 QGIS 内了。网格式影像会使用灰阶来呈现,颜色越深表示像素值越低,而颜色越浅表示像素值越高。
../_images/824.png
  1. 影像中的每个像素都有自身值,在这两个档案中,这个值就是人口密度。选择 Identify Features 后在影像的任一处点一下,就可以看到这个像素的人口密度值。
../_images/922.png
  1. 为了适当的呈现人口密度分布的图样,得调整一下样式才行。在图层名字上按右键选择 Properties ,或是直接在图层名字上按两下,都可以进到图层属性的视窗。
../_images/1023.png
  1. Style 分页下,把 Render type 换成 Singleband pseudocolor. ,然后按下位于 Generate a new color map 中的 Classify 钮。会有 5 个新颜色和值跑出来,最后按下 OK.
../_images/1128.png
  1. 回到 QGIS 主画面,就可以看到影像使用类似温度分布图的概念着色。顺便也对另一个影像执行相同步骤。
../_images/1224.png
  1. 我们的分析目标是找出在 1990 年到 2000 年间有剧烈的人口变动的地方,方法则是计算这两个影像的每个像素数值的差异。选择 Raster ‣ Raster calculator.
../_images/1322.png
  1. Raster bands 的选择框中, 可以点两下以选择某个图层。这里的波段命名方式是图层名称加上「@」再加上波段编号,由于我们的影像都只有 1 个波段, 所有每个影像都只会有「编号 1」。在影像计算的功能中,可以针对像素进行基本的数学运算, 为了找出人口密度差异,必须要在 2000 年的资料中减掉 1990 年的资料, 所以计算式要输入 glds00ag60@1 - glds90ag60@1 。把输出档命名为 pop_density_change_2000_1990.tif 勾选 Add result to project ,最后按 OK.
../_images/1421.png
  1. 操作完成后,新图层会被加入到 QGIS 中。
../_images/1520.png
  1. T虽然灰阶看起来还不错,但我们还是可以改一个更能表达资讯的样式。在 pop_density_change_2000_1990 图层上按右键后进入 Properties.
../_images/1619.png
  1. 这次我们要把在同一个范围之内的像素值设成相同颜色。在设定之前,先到 Metadata 分页内看一下这个影像的属性,尤其是最大值和最小值。
../_images/1718.png
  1. 切到 Style 分页下,把 Render type 换成 Singleband pseudocolor ,在 Band Rendering 里把 Color interpolation 调成 Discrete . 之后按下 Add entry 4 次以建立 4 个类别,点一下类别的数值就可以进行更改。在这里,色彩对应的规则是「像素值比这个类别的值低的所有像素,都会被设成这个类别的颜色」。因为我们的影像的像素最小值比 -2000 还高一点,所以我们把第一个类别的值设成 -2000, 这样这个颜色代表的就是「没有资料值」(No Data Values)。照如下的方式把所有类别都设定完成,然后按下 OK.
../_images/1818.png
  1. 现在人口变多或变少的地方就清楚的显示出来了。接下来按下 Zoom In 钮在欧洲附近拉一个矩形,缩进去看看细节。
../_images/1916.png
  1. 选择 Identify 后在影像红色含蓝色处点看看,就可以确认刚刚的样式设定是没问题的。
../_images/2013.png
  1. 最后再让我们多做一步,把人口密度呈现 negative 的地方筛选出来。开启 Raster ‣ Raster calculator.
../_images/2117.png
  1. 输入如下所示的表示式,如果像素值符合表示式,输出的像素值就是 1 ,如果不符合,就会是 0。这样我们就可以得到新的影像档,像素值为 1 时表示负增长,值为 0 时则没有负增长。 把输出档命名为 negative_pop_change_2000_1990 勾选 Add result to project. ,最后按 OK.
pop_density_change_2000_1990@1 < -10
../_images/2216.png
  1. 新图层产生后,以右键进入 Properties,在 Transparency 分页中的 Additional no data value 的地方打上 0 ,这样的话值为 0 的像素也会被设成透明。最后按下 OK.
../_images/2313.png
  1. 最后,就只剩下所有的负人口增长区是灰黑色的了。
../_images/2411.png