使用 Spatial Analyst 类的概述
类可用于创建对象,即通常所说的实例。对象实例化后,其属性和方法便可供用户使用。Spatial Analyst 类(如邻域类或重映射类)通常用作完整的地理处理工具参数设置的快捷方式,否则,这些参数会使用更加复杂的字符串。
通过类创建和管理参数要比通过字符串容易得多。将类用于参数的好处包括:
- 类可以帮助并自动完成形式参数的各种实际参数的输入。
- 可以通过生成的对象来查询形式参数的各个实际参数。
- 可以轻松修改类的各个实际参数以做进一步分析。
有关在地图代数中使用 Spatial Analyst 类的详细信息,请参阅以下部分:
下面提供了一些可使用类轻松实现的应用示例:
- 确定类类型或各个参数值:
例如,通过查询输入半径类型和搜索距离可确定在反距离权重 (IDW) 插值法中应用的乘方。
- 更改输入值:
例如,您可以根据论坛上公开的输入来轻松更改适宜性模型中的输入重分类值,从而探究不同情景对输出的影响,而无需重新创建重映射表。
- 执行灵敏度分析:
例如,您可以按 5% 的增量以迭代方式更改适宜性模型的重映射表中的 To 和 From 值,从而探究输入条件的细微变化会如何影响输出。
- 执行误差分析:
例如,您可以多次运行模型,每次随意更改形式参数的实际参数,从而探究数据中的误差和不确定性可能产生的影响。
使用 Spatial Analyst 类
一些 Spatial Analyst 地理处理工具参数使用类对象作为输入。通常将参数定义为简单字符串、数据集名称、路径、关键字、字段名称、容差和属性域名称。某些参数则较为复杂,用于定义一系列参数或值。在这种情况下,可使用类(如邻域或重映射表)来定义这些参数,而不必输入复杂的长文本字符串。了解类构造函数的输入要求可以更轻松地创建、查询、更改和保存类对象。
有几种不同的输入类型可用作 Spatial Analyst 类的参数:
- 标量
- 字符串
- Python 列表或列表的列表
- 其他类
为增加可读性,建议将类设置为变量,并在工具中使用变量。例如:
Neighborhood = NbrRectangle(5, 5, "MAP")
outRas = FocalStatistics("inRas", Neighborhood, "MEAN")
但是,如果您愿意,也可以在工具参数中定义类。
outRas = FocalStatistics("inRas", NbrRectangle(5, 5, "MAP"), "MEAN")
使用固定数量的输入创建的类
某些类是使用固定数量的简单标量或字符串参数构造的。例如,创建一个半径为五个地图单位的圆形邻域:
Neighborhood = NbrCircle(5, "MAP")
outRas = FocalStatistics("inRas", Neighborhood, "MAXIMUM")
其中每个类的输入参数都有预先确定的位置。这些类可根据其所处理的工具参数进行分组:
- 模糊类
(FuzzyGaussian、FuzzyLarge、FuzzyLinear、FuzzyMSLarge、FuzzyMSSmall、FuzzyNear、FuzzySmall)
- 水平系数类
- KrigingModel 类
- 邻域类
(NbrAnnulus、NbrCircle、NbrIrregular、NbrRectangle、NbrWedge、NbrWeight)
- 半径类
- 时间类
(TimeWithinDay、TimeSpecialDays、TimeMultipleDays、TimeWholeYear)
- 变换函数类
(TfExponential、TfGaussian、TfLarge、TfLinear、TfLogarithm、TfLogisticDecay、TfLogisticGrowth、TfMSLarge、TfMSSmall、TfNear、TfPower、TfSmall、TfSymmetricLinear)
- 垂直系数类
(VfBinary、VfLinear、VfSymLinear、VfInverseLinear、VfSymInverseLinear、VfCos、VfSec、VfCosSec、VfSecCos、VfTable)
使用 Python 列表创建的类
有些类较为复杂,如 TopoBoundary、TopoLake 和 TopoStream 类。这些类需要一系列输入,并且用于地形转栅格工具中的参数。输入系列在 Python 列表中定义,列表中的输入数量取决于具体情况(也就是分析所需的输入数量)。
例如,TopoBoundary 类构造函数需要包含一个或多个 inFeature 输入的列表。标识为 inFeatures 的列表变成了所生成对象的一个属性。要查询或操作 inFeatures 列表中的任何项目,均可将每个项目视为列表中的一个条目(请参阅查询类)。
inBoundary = TopoBoundary(["inBound1.shp", "inBound2.shp"])
使用列表中的列表创建的类
对于其他工具,根据具体情况来决定输入到一个参数中的输入条目数。此类型的输入参数基于通过列表中的列表所创建的类生成。有三组工具的类基于列表中的列表创建:
- 重分类表(RemapRange、RemapValue)
- 加权重分类表(叠加和总和)(WOTable、WSTable)
- 地形类(子集)(TopoContour、TopoPointElevation、TopoSink)
例如,重映射类要求将表作为输入。该表使用代表 startValue、endValue 和 newValue 这三类的记录列表进行建模。表变成了所生成对象的属性。要查询或操作任何表输入,均可将表输入视为列表中的列表的条目(请参阅查询类)。
# Usage: RemapRange([[startValue, endValue, newValue],...])
myRemapRange = RemapRange([[-3, -1.75, 1], [-1.75, -0.5, 2], [-0.5, 0.75, 3],
[0.75, 2, 4], [2, 3.25, 5], [3.25, 4.5, 6],
[4.5, 5.75, 7], [5.75, 7, 8]])
outReclassRR = Reclassify("inRas", "VALUE", myRemapRange)