需要 Spatial Analyst 许可。
获得 Image Analyst 许可后可用。
可通过地图代数在单个语句中创建包含多个运算符和工具的语句。 凭借在单个语句中输入多个运算符和工具,您可以更加高效地构建复杂交互功能,进而缩减总的处理时间。 复杂表达式不仅限于 ArcGIS Spatial Analyst 扩展模块的工具提供的功能;它们还可以包括其他工具箱中的工具。 构建复杂语句时,需要遵守一组为确保语句正确执行而设定的特定交互规则。
复杂语句规则
使用下面的规则列表来引导您创建有效的复杂语句。
- 在复杂语句中,只有等号左侧的输出内容才会成为栅格对象。
- 表达式的执行顺序由圆括号和使用的运算符的优先级决定。 有关运算符优先级的详细信息,请参阅运算符优先级表。
outRaster = Raster("inras1") + Raster("inras2") / Raster("inras3")
-
在上述语句中,inras2 除以 inras3,然后将结果与 inras1 相加。
- 可使用圆括号来控制执行顺序。 圆括号可嵌套使用,此时无论运算符的优先级值如何,都将首先处理最内层圆括号内的表达式。
outRas = Raster("inras1") / (Raster("inras2") + Raster("inras3"))
在上述语句中,inras1 除以 inras2 与 inras3 之和。
- 在单个表达式中连续使用多个布尔(~、&、^、|)运算符或关系(<、<=、>、>=、==、!=)运算符时,应使用括号。 例如,在以下表达式 (a>2) & (a<5) 中需要使用圆括号。
outRas = (Raster("a") > 2 ) & ( Raster("a") < 5)
抢先版本:
有些表达式可能不是需要括号,而是需要重写。 例如,形式为 a < b < c 的表达式将不会执行,而添加括号会改变表达式的含义。 因此,要成功执行此表达式,需要将其按 (a < b) & (b < c) 形式重写。
- 运算符、变量、数字和工具都可以在复杂语句中使用。
outRas = Sin("inras1") + Raster("inras2") + 8
const = 10 outRas = Raster("inras1") + 2 * const
- 在使用运算符创建的语句中适用于圆括号的所有规则,同样适用于使用工具和运算符创建的语句中的圆括号。 将首先处理最内层嵌套的圆括号内的工具或运算符。
num = 10 outRas = (ZonalStatistics((Raster("inras2") + Raster("inras3")), "Value", "valueras", "MAXIMUM") - num ) / 8
在上述语句中,inras2 与 inras3 之和用作分区统计工具的输入。 然后减去 num 的值后再相除。
- 在一系列语句中,前一个语句的输出可用作后一个语句的输入。
outAdd = Raster("inras1") + Raster("inras2") outRas = FocalStatistics(outAdd, NbrCircle(5, "Map"), "MEAN")
在上述示例中,outAdd 是由 inras1 与 inras2 之和创建的栅格对象。 由于 outAdd 是一个变量,因此在用作后续焦点统计工具的输入时,不需要加引号。
- 无论结果是栅格还是要素类,任何工具之间都可以相互嵌套。 所需的嵌套工具输出将用作外层工具的输入。
在此示例中,等值线列表工具的输出用作欧氏距离工具的输入。outdistance = EucDistance(ContourList("elevation", "#", [1500]))
在上述示例中,“分析”工具箱选择工具的输出用作欧氏距离工具的输入。dist = EucDistance(arcpy.Select_analysis("schools", "#", "Pop>2000"))
注:
由于嵌套工具创建的输出仅为大型工作流的一个中间阶段,那么输出参数可由混列线符号 "#" 替换,以便工具为此临时输出创建唯一路径和名称。 有关混列线符号使用的详细信息将在帮助主题“在 Python 使用工具”的工具输出部分进行讨论。
- 要使用表达式中某一工具的可选输出,必须使用数据集名称或表示该数据集的变量。
在上述示例中,可选输出回溯链接栅格是工作空间中名为“out_bklink”的输出。costDist = CostDistance("source", "in_cost", 15000, "out_bklink") costOut = CostPath("dest", costDist, "out_bklink")
在上述示例中,回溯链接栅格在执行工具之前由变量定义。 该变量指向输出回溯链接栅格数据使用的位置和名称。bklink = "C:/results/out_bklink" costDist = CostDistance("source", "in_cost", 15000, bklink) costOut = CostPath("dest", costDist, bklink)