需要 Spatial Analyst 许可。
获得 Image Analyst 许可后可用。
在“地图代数”中,运算符对输入栅格和数字应用数学运算。
通常将运算符放置到两个输入(操作数)之间以执行一项数学运算(例如,outVar = 3 + 7)。 在地图代数中,运算对象可以是栅格或数字。 要对栅格使用运算符,栅格必须是 Raster object。
下表提供了一份快速参考,指明了相对于 Python 运算符而言,如何实现最新的“地图代数”运算符。
操作 | Python 运算符 | 地图代数运算符 | 地理处理工具 | |
---|---|---|---|---|
算术 | ||||
加 | + | + | 加 | |
除 | / | / | 除 | |
整除 | // | // | N/A | |
求模 | % | % | 求模 | |
乘 | * | * | 乘 | |
幂 | ** | ** | 幂 | |
减 | - | - | 减 | |
一元减号 | - | - | 取反 | |
一元加号 | + | + | N/A | |
布尔 | ||||
布尔与 | N/A | & | 布尔与 | |
布尔求反 | N/A | ~ | 布尔非 | |
布尔异或 | N/A | ^ | 布尔异或 | |
布尔或 | N/A | | | 布尔或 | |
关系 | ||||
等于 | == | == | 等于 | |
大于 | > | > | 大于 | |
大于等于 | >= | >= | 大于等于 | |
小于 | < | < | 小于 | |
小于等于 | <= | <= | 小于等于 | |
不等于 | != | != | 不等于 | |
按位 | ||||
按位与 | & | N/A | 按位与 | |
按位补码 | ~ | N/A | 按位非 | |
按位异或 | ^ | N/A | 按位异或 | |
按位左移 | << | << | 按位左移 | |
按位或 | | | N/A | 按位或 | |
按位右移 | >> | >> | 按位右移 |
运算符规则
- 只对数字使用运算符时,结果将为数字。
# outVar will be assigned 10 outVar = 3 + 7
- 对栅格使用运算符时,栅格必须是 Raster 对象。
outRas = Raster("inraster1") + Raster("inraster2")
- 使用栅格操作数时,结果为 Raster 对象。
# In the following statement, 4 is added to each cell value in inraster1 outRas = Raster("inraster1") + 4 outRas2 = Raster("inraster") + math.pi
在以上语句中,使用的 pi 来自 Python math 模块。 math 模块还包括自然对数的底 math.e,它也可以用于“地图代数”语句中。
- 一些运算符可以放到 Raster 对象或者数字前。
outRas = -Raster("inraster")
- 当一个或者多个输入(运算对象)是栅格时,布尔(~、&、^、|)运算符将执行布尔运算。 如果两个输入(操作数)都是数字,则这些运算符将执行“按位”运算。
提示:
运算符之间可以不加空格,但是为了增加可读性,建议您加上空格。
工具和运算符可以嵌套以创建复杂的语句。
多维栅格运算符规则
- 当运算符与多维栅格和数字一起使用时,结果将是所含变量和维数与输入相同的多维 Raster 对象。
# In the following statement, 100 is added to each cell in # each slice of in_multidem_raster out_multidem_raster = in_multidem_raster + 100
- 当运算符与多维栅格和非多维栅格一起使用时,结果将是所含变量和维数与输入相同的多维 Raster 对象。
如果输入 Raster 对象不重叠,则不会返回任何结果。
# In the following statement, the cell values from in_raster are added to # the cell values in each slice of in_multidem_raster. out_multidem_raster = in_multidem_raster + in_raster
- 当运算符与两个多维栅格一起使用时,结果将是仅包含输入之间共用的变量和维数的多维 Raster 对象。 例如,如果一个多维栅格包含 1995-2015 年的每日温度数据,而另一个多维栅格包含 2001-2005 年的每日温度数据,那么与这两个多维栅格一起使用的运算符的结果将仅包括 2001-2005 年的每日温度数据。
如果输入多维 Raster 对象没有共用变量和维数,则不会返回任何结果。
# In the following statement, the cell values in each slice from in_multidem_raster1 # are added to the cell values in each slice from in_multidem_raster2, only where variables and # dimensionality overlap. out_multidem_raster = in_multidem_raster1 + in_multidem_raster2
运算符优先级
优先级值决定运算符的执行顺序。 优先级较高的运算符将首先进行处理。 如果两个运算符的优先级值相同,则按表达式中从左到右的顺序来处理它们。
可以使用括号限定优先级,不管指定的是什么运算符,总是首先处理最底层括号中的运算。
下表按从最低优先级到最高优先级的顺序列出了所有地图代数运算符。 同一行中的运算符具有相同的优先级。