需要 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
运算符优先级
优先级值确定运算符的执行顺序。首先处理优先级更高的运算符。如果两个运算符的优先级值相同,则按表达式中从左到右的顺序来处理它们。
可以使用括号限定优先级,不管指定的是什么运算符,总是首先处理最底层括号中的运算。
下表按优先级从低到高的顺序列出了所有“地图代数”运算符。同一行中的运算符具有相同的优先级。