地形湿度指数(TWI)获取教程
一、思路简介:
由于地形湿度指数的计算公式是:
所以分别计算“单位等高线长度集水面积”a(网上教程成为SCA,单元栅格汇流面积)和“坡度”(β)即可。
二、步骤简介:
1.下载DEM影像(地理空间数据云平台),酌情影像拼接。
2.在ArcGIS平台的“地形分析”和“水文分析”模块完成数据预处理;

3.部分过程在栅格计算器Raster Calculator中完成。
三、具体步骤是(大部分来源于其他教程,本教程勘误和提升):
1.对DEM填洼Fill操作
2.用fill后的DEM文件计算得到Slope
3.计算a
思路:a=Flow_Accumulation*分辨率的平方(汇水面积)/flow_width(流向宽度)
(1)基于DEM_fill计算水流方向(Flow Direation),得到:
(2)基于Flow Direation汇流累积量Flow Accumulation
(3)单位面积的汇流量(a),或称SCA
在Raster Calculator中输入代码计算a:
###!!!注意,所有30 * SquareRoot(2)中间是有 * 的,但是CSDN编辑的规则是* A=A的斜体,我已修正,如果遗漏了,请自行添加!!
“Flow_Accumulation” * 900 / Con( “Flow_Direction” == 1,30,Con(“Flow_Direction” == 4,30,Con(“Flow_Direction” == 16,30,Con(“Flow_Direction” == 64,30,Con(“Flow_Direction” == 2,30* SquareRoot(2),Con(“Flow_Direction” == 8,30* SquareRoot(2),Con(“Flow_Direction” == 32,30* SquareRoot(2),Con(“Flow_Direction” == 128,30* SquareRoot(2)))))))))
其中,900是栅格分辨率的平方(30m分辨率),当流向Flow_Direction不同时,取值不同。
但是,有人觉得"Flow_Accumulation"为0时没意义,至少应为1,所以SCA2的代码为:
Con(“Flow_Accumulation” == 0,1,“Flow_Accumulation”) * 900 / Con( “Flow_Direction” == 1,30,Con(“Flow_Direction” == 4,30,Con(“Flow_Direction” == 16,30,Con(“Flow_Direction” == 64,30,Con(“Flow_Direction” == 2,30* SquareRoot(2),Con(“Flow_Direction” == 8,30* SquareRoot(2),Con(“Flow_Direction” == 32,30* SquareRoot(2),Con(“Flow_Direction” == 128,30* SquareRoot(2)))))))))
4.计算TWI。
分子a和分母slope已经齐全,可以在Raster calculator中计算TWI了。
主要注意,坡度本来计算出来的是°degree,要将它转换为弧度,所以*π/180
代码为:
Ln(SCA2/Tan(Con(“Slope”<=0, 0.00001, Con(“Slope”>0, “Slope”*3.1415926/180)))
结语:
其他网上的代码有各种各样的问题:(1)Con()的c没大写;(2)Con()表达式没有用嵌套,使得参数太多不能运行;(3)Sqrt不能用,应修改为Squareroot(2)等等,本文目前没有发现Bug,所有中间过程罗列如下: