构建复杂语句
地图代数的一个强大之处体现在可以使用单个语句创建由多个运算符和工具组成的语句。凭借在单个语句中输入多个运算符和工具,使您可以更加轻松地构建复杂交互功能,进而缩减总的处理时间。复杂表达式不仅限于 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)
相关主题
5/10/2014