14.8. 执行地图代数表达

QGIS软件及其API提供了一个栅格计算器。GDAL 通过 gdal_calc.py 命令具有类似的功能, 该命令仅在 Processing Toolbox 中接口。图像必须具有相同的维度(行和列中的像素数)才能执行数学运算。 对于不知情的用户来说,用 Pythonnumpy 语法编写的表达输入并不总是直观的。 这里提供了两个例子:对海拔和斜坡数据的查询,以及根据Landsat 8多光谱图像计算植被指数。

14.8.1. 执行多准则查询

目标是划定海拔和斜坡分别大于400 m和20°的区域。

QGIS处理步骤

1.打开 DTM

和斜坡栅格

在QGIS中:

  • 仅打开以下文件:
    • srtm_37_03_l93.tif

    • srtm_37_03_l93_slope.tif

2.处理工具箱激活在菜单栏中:

  • 单击处理,

  • 单击“Toolbox”。

“Processing Toolbox”面板出现在屏幕右侧。

3.在“Processing Toolbox”中查询海拔和斜坡数据:

  • 双击 GDAL /OGR > Miscellaneous > Raster Calculator

在“栅格计算器”窗口中:

  • 设置如下:

  • 输入图层 A: srtm_37_03_l93- Input layer B: srtm_37_03_l93_slope

  • gdalnumeric语法中的计算: logical_and(A > 400,B > 20)

  • 设置输出nodata值: 0

  • 输出光栅类型:字节

  • 计算: alti-sup400_slope-sup20.tif

  • 单击“OK”

4.结果分析

结果是一个二进制栅格数据,其中满足查询的像素被编码为1(白色),其他像素被编码为0(黑色)。 数学表达必须尊重gdalnumeric语法, 例如通过使用+ -/* 运算符或Python numpy库的任何函数(例如 thelogical_and() 函数)。

image20image21image22

海拔> 400 m斜坡> 20°结果

6.相应的GDAL 命令

上面使用的工具相当于在终端中启动以下命令:

gdal_calc --calc "logical_and(A>400,B>20)" --format GTiff --type Byte
--NoDataValue 0
-A srtm_37_03_l93.tif --A_band 1 -B srtm_37_03_l93_pente.tif
--B_band 1
--outfile alti_sup400_pente_sup20.tif

其中:

  • [--calc]: 数学表达式,

  • [--format]: 设置输出格式,

  • [--type]: 设置图像编码,

  • [--NoDataValue]: 设置输出的nodata值,

  • [--A]: 第一个输入栅格(此处为srtm_37_03_l93.tif),

  • [-A_band]: 文件A的栅格带数,

  • [-B]: 第二个输入光栅(此处为srtm_37_03_l93_slope.tif),

  • [--B_band]: 文件B的栅格带数,

  • [--outfile]: 设置要生成的输出文件。

有关更多信息,请参阅以下网页: http://www.gdal.org/gdal_calc.html

表2.18.使用GDAL 栅格计算器进行多标准查询

14.8.2. 植被指数计算

目标是根据Landsat 8多光谱图像计算归一化差异植被指数(NDVI) [ROUSE74][TUCKER79] 。 该指数的计算方法如下:

NIR – R)/(NIR + R)

其中NIR是近红外线,R是红色。

[ROUSE74]

ROUSE JR J., HAAS R.H., SCHELL J.A. 等人,“用ERTS监测大平原植被系统”, 第三届地球资源技术卫星研讨会论文集,第1卷,第309–313页,1974年。

[TUCKER79]

“用于监测植被的红色和摄影红外线性组合”,环境遥感,第8卷,第2期,第127-150页,1979年。

QGIS处理步骤

1.打开Landsat 8图像

在QGIS中:

  • 仅打开以下文件:

    • LC81990262017019LGN00_MS_L93.TIF

提醒您,此文件的组织方式如下:

– 波段1:蓝色,

– 波段2:绿色,

– 波段3:红色,

– 波段4:近红外。

  1. NDVI计算

In the :

在“Processing Toolbox”中:

  • 双击 GDAL /OGR > Miscellaneous > Raster Calculator

在“Raster Calculator”窗口中:

  • 设置如下:

    • 输入图层 A: LC81990262017019LGN00_MS_L93

    • 栅格A的栅格带数量: 4

    • 输入图层 B: LC81990262017019LGN00_MS_L93

    • 栅格B的栅格带数量: 3

    • gdalnumeric语法中的计算:

(A.astype(float) - B)/(A.astype(float) + B)

(A.astype(float)- B)/(A.astype(float)+ B)

注意:在上面的公式中,必须使用 .astype (float) 函数将两个带中的至少一个输入为 float , 才能获得小数值的结果。

  • Set output nodata value: -9999

  • Output raster type: Float32

  • Calculated: LC81990262017019LGN00_NDVI_L93.TIF

  • 单击“OK”

3.结果分析

NDVI是一个以-1到1之间的小数值的栅格编码。高值通常对应于活跃植被。

_images/image74_xay.jpeg

红外假色

_images/image75_xt3.jpeg

NDVI (RGB = NIR, R, G)

RDX(RB =近红外线、R、G)

4.对应

GDAL命令上面使用的工具相当于在终端中启动以下命令:

gdal_calc --calc "(A.astype(float)-B)/(A.astype(float)+B) " --format
GTiff --type Float32
--NoDataValue -9999 -A LC81990262017019LGN00_MS_L93.tif
--A_band 4
-B LC81990262017019LGN00_MS_L93.tif --B_band 3
--outfile LC81990262017019LGN00_NDVI_L93.tif

有关更多信息,请参阅以下网页: mhttp://www.gdal.org/gdal_calc.html 。

表2.19.使用GDAL 栅格计算器计算NDVI