在ArcGIS Desktop中计算地形坚固性指数?


15

有谁知道如何在不访问命令行ArcInfo Workstation的情况下在ArcGIS Desktop中计算地形坚固指数

“地形粗糙度指数(TRI)是Riley等人(1999)开发的一种测量方法,用于表达数字高程网格相邻单元之间的高程差量。该过程实质上是计算中心单元的高程差值然后将其周围的八个像元进行平方,然后对八个高程差值中的每一个进行平方,使它们全部为正,然后对平方进行平均,然后通过取该平均值的平方根得出地形起伏指数,对应于平均海拔变化在网格上任何一点与其周围区域之间。” -来自Jeffrey Evansaml arcscript


Answers:


18

我建议您在ArcGIS外部查看)使用免费的gdal软件非常容易:http ://www.gdal.org/gdaldem.html

gdaldem TRI input_dem output_TRI_map

或者,如果您希望在saga gis中使用它,请访问http : //www.saga-gis.org/saga_modules_doc/ta_morphometry/ta_morphometry_16.html


11
+1我总是很高兴看到非ArcGIS解决方案来解决ArcGIS问题:-)。这是一个原则问题,而不是对ArcGIS的对抗。人们应该避免被单一软件解决方案所束缚:这不仅在职业上存在风险,而且在知识上令人窒息。
Whuber

我知道我要求使用arcgis特定的解决方案,但是由于它的直接性,我接受了这一解决方案。GDAL实用程序易于获取和安装,被普遍认为是同类中最好的,并且生成此特定产品的命令是对简单性的定义。
马特·威尔基2011年

18

让我们做一点(只是一点点)代数。

令x为中心平方中的值;令x_i,i = 1,..,8索引相邻正方形中的值;令r为地形坚固性指数。此配方说r ^ 2等于(x_i-x)^ 2的总和。我们可以轻松计算出两件事:(i)邻域中的值之和,等于s = Sum {x_i} + x;(ii)值的平方和,等于t = Sum {x_i ^ 2} + x ^ 2。(这些是原始网格及其正方形的焦点统计信息。)

扩大平方给

r ^ 2 =总和((x_i-x)^ 2}

= Sum {x_i ^ 2 + x ^ 2-2 * x * x_i}

= Sum {x_i ^ 2} + 8 * x ^ 2-2 * x * Sum {x_i}

= [Sum {x_i ^ 2} + x ^ 2] + 7 * x ^ 2-2 * x * [Sum {x_i ^ 2} + x-x]

= t + 7 * x ^ 2-2 * x * [Sum {x_i} + x] + 2 * x ^ 2

= t + 9 * x ^ 2-2 * x * s

例如,考虑一个社区

1 2 3
4 5 6
7 8 9

这里,x = 5,s = 1 + 2 + ... + 9 = 45,t = 1 + 4 + 9 + ... + 81 = 285。

(1-5)^ 2 +(2-5)^ 2 + ... +(9-5)^ 2 = 16 + 9 + 4 +1 + 1 + 4 + 9 + 16 = 60 = r ^ 2

代数等价说

60 = r ^ 2 = 285 + 9 * 5 ^ 2 -2 * 5 * 45 = 285 + 225-450 = 60,进行检查。

因此,工作流程为:

给定DEM。

  • 计算s = [DEM]的总和(在3 x 3平方邻域内)。

  • 计算DEM2 = [DEM] * [DEM]。

  • 计算t = [DEM2]的总和(超过3 x 3平方邻域)。

  • 计算r2 = [t] + 9 * [DEM2]-2 * [DEM] * [s]。

返回 r = Sqrt([r2])。

这包括9个电网运营的全盘,所有这一切都是快。它们可以在栅格计算器(ArcGIS 9.3和更早版本),命令行(所有版本)和模型构建器(所有版本)中轻松实现。

顺便说一句,这不是“平均海拔变化”(因为海拔变化可以是正值也可以是负值):它是均方根海拔变化。它等于http://arcscripts.esri.com/details.asp?dbid=14156中描述的“地形位置索引” ,(根据文档)等于x-(s-x)/ 8。在上面的示例中,TPI等于5-(45-5)/ 8 = 0,而我们看到的TRI是Sqrt(60)。


1
谢谢比尔。我很高兴看到工具或操作原理的细节。由此,只要有时间和智力上的适当投资,任何人都可以使用他们现有的工具制造一种新的设备来完成这项工作。像这样的信息将使GIS.se成为长期有用的服务。
马特·威尔基

1
+1很棒的解释。我想这意味着陡峭而光滑的表面可能比平坦但颠簸的表面具有更高的TRI。
Kirk Kuykendall

1
@柯克这是正确的。有多种方法可以消除局部斜率的影响,以便根据需要获得“相对”坚固性的指标。尽管我没有弄清楚细节,但我相信从r2-减去(c * a)^ 2的一些通用倍数,其中c是像元大小,a是斜率(上升/运行,而不是角度或%)-应该可以解决问题。
whuber

与往常一样,@ whuber您的答案中包含很多知识!!请问一个问题:这是否意味着无法计算位于栅格最边缘的像元的TRI?由于它们没有被周围的相邻单元包围?
marco

1
@marco即使在边界单元处也可以估计TRI。如问题中所指出的,应通过将此处给出的值除以9来表示平均值而不是总和。在边界单元格中,公式和分母中的值“ 9”需要替换为3X3邻域内的非空值的数量:边缘单元为6,角单元为4。可以从原始值的指标网格的焦点总和中获得此类值的网格(在所有非NoData单元中均具有1,在其他位置均具有0)。使用该网格代替公式中的常数“ 9”。
ub

3

Riley et al。,(1999)TRI是平方和的平方根。这非常接近未缩放的方差。如果要实现Riley的TRI,请遵循@whuber概述的方法(@ user3338736提供的方法将度量标准推广到窗口中的最大值,并且不代表每个单元的单元格变化)。

我在Geomorphometry&Gradient Metrics ArcGIS Toolbox中有一个TRI的变体,它是指定窗口的变体。我发现这更加灵活和合理。还有其他一些表面配置指标,包括皱纹和解剖。


谢谢杰弗里。由于某种原因,除了Firefox中的标题外,该页面为空白,以为在Chrome中还可以;可能是我的扩展程序之一。我很高兴地报告至少这些脚本在10.2.2中仍然保持不变(无论如何我都测试过)。
马特·威尔基2014年

1

-编辑:以下信息不正确。请查看作者解释正确过程的信息。

TRI(Riley 1999)和TPI(Jenness 2002)相似,但不同。

要使用ArcGIS 10.x计算TRI和TPI ...

步骤1:使用“焦点统计”工具从DEM中创建2个新的栅格数据集。

栅格1“ MAX”)邻域:矩形,高度:3,宽度:3,单位:像元,统计信息类型:最大值

栅格2“ MIN”)邻域:矩形,高度:3,宽度:3,单位:像元,统计信息类型:最小值

步骤2:使用栅格计算器对刚创建的2个栅格数据集执行以下功能。

对于TRI:SquareRoot(Abs((Square(“%MAX%”)-Square(“%MIN%”))))

对于TPI:(“%Input DEM%”-“%MIN%”)/(“%MAX%”-“%MIN%”)

这是从我为TRI建立的模型中导出的示例Python代码。

# -*- coding: utf-8 -*-
# ---------------------------------------------------------------------------
# script.py
# Created on: 2014-03-06 08:56:13.00000
#   (generated by ArcGIS/ModelBuilder)
# Usage: script <Input_raster> <TRI_Raster> 
# Description: 
# ---------------------------------------------------------------------------

# Import arcpy module
import arcpy

# Check out any necessary licenses
arcpy.CheckOutExtension("spatial")

# Script arguments
Input_raster = arcpy.GetParameterAsText(0)

TRI_Raster = arcpy.GetParameterAsText(1)
if TRI_Raster == '#' or not TRI_Raster:
    TRI_Raster = "C:\\Users\\Documents\\ArcGIS\\Default.gdb\\rastercalc1" # provide a default value if unspecified

# Local variables:
MIN = Input_raster
MAX = Input_raster

# Process: 3x3Max
arcpy.gp.FocalStatistics_sa(Input_raster, MAX, "Rectangle 3 3 CELL", "MAXIMUM", "DATA")

# Process: 3x3Min
arcpy.gp.FocalStatistics_sa(Input_raster, MIN, "Rectangle 3 3 CELL", "MINIMUM", "DATA")

# Process: Raster Calculator
arcpy.gp.RasterCalculator_sa("SquareRoot(Abs((Square(\"%MAX%\") - Square(\"%MIN%\"))))", TRI_Raster)

这不是问题中描述的TRI。实际上,根本不能将其视为测量“坚固性”,因为当您仅移动垂直基准面时,它就会发生变化。例如,您的3x3邻域的TRI的值为(1,2,...,9)将为sqrt(9 ^ 2-1 ^ 2)= 8.9,但是将100加到这些值上(这只会更改基准面而不会完全改变表面的形状)得出sqrt(109 ^ 2-101 ^ 2)= 41。
ub

0

这听起来很像我最近在我的一个项目中使用的过程“地形位置索引”。ESRI支持页面上有一个ArcScript,ESRI资源中心页面上有一个“ 地形”工具箱,而Jenness Enterprises页面上有有关该过程的更多信息。


2
TPI是与粗糙度完全不同的指标。请不要让我们交替使用它们。我相信地形位置指数是传统计算为[dem-focusmean(dem)]。
Jeffrey Evans
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.