在“地图代数”中使用运算符
在“地图代数”中,运算符对输入栅格和数字应用数学运算。
通常将运算符放置到两个输入(操作数)之间以执行一项数学运算(例如,outVar = 3 + 7)。在“地图代数”中,操作数可以是栅格或者数字。要对栅格使用运算符,栅格必须是栅格对象。
下表提供了一份快速参考,指明了相对于 Python 运算符和之前 9.x 版本的“地图代数”运算符而言,如何实现最新的“地图代数”运算符。
操作 | Python 运算符 |
地图代数运算符 |
9.x 版本地图代数运算符 * |
Spatial Analyst GP 工具 |
---|---|---|---|---|
算术 | ||||
加 | + | + | + | |
除 | / |
/ |
/, div | |
整除 | // |
// |
N/A |
N/A |
模 | % | % | 求模 | |
乘法 | * |
* |
* | |
幂 | ** |
** |
N/A | |
减 | - |
- |
- | |
一元减号 | - |
- |
- | |
一元加号 | + |
+ |
N/A |
N/A |
布尔 | ||||
布尔与 | N/A |
& |
&, and | |
布尔求反 | N/A |
~ |
^, not | |
布尔异或 | N/A |
^ |
!, xor | |
布尔或 | N/A |
| |
|, or | |
关系 | ||||
等于 | == | == | ==, eq | |
大于 | > | > | >, gt | |
大于等于 | >= |
>= |
>=, ge | |
小于 | < | < | <, lt | |
小于等于 | <= |
<= |
<=, le | |
不等于 | != |
!= |
^=, <>, ne | |
按位 | ||||
按位与 | & | N/A | && | |
按位补码 | ~ | N/A | ^^ | |
按位异或 | ^ | N/A | !! | |
按位左移 | << | << | << | |
按位或 | | | N/A | || | |
按位右移 | >> | >> | >> |
运算符规则
- 只对数字使用运算符时,结果将为数字。
# outVar will be assigned 10 outVar = 3 + 7
- 对栅格使用运算符时,栅格必须是栅格对象。
outRas = Raster("inraster1") + Raster("inraster2")
- 使用栅格操作数时,结果为栅格对象。
# In the following statement, 4 is added to each cell value in inraster1 outRas = Raster("inraster1") + 4 outRas2 = Raster("inraster") + math.pi
在以上语句中,使用的 pi 来自 Python 数学模块。数学模块还包括以 e 为底的自然对数,math.e,它也可以用于“地图代数”语句中。
- 一些运算符可以放到栅格对象或者数字前。
outRas = -Raster("inraster")
- 当一个或者多个输入(操作数)是栅格时,布尔(~、&、^、|)运算符将执行布尔运算。如果两个输入(操作数)都是数字,则这些运算符将执行“按位”运算。
运算符之间可以不加空格,但是为了增加可读性,建议您加上空格。
工具和运算符可以嵌套以创建复杂的语句。
运算符优先级
优先级值确定运算符的执行顺序。首先处理优先级更高的运算符。如果两个运算符的优先级值相同,则按表达式中从左到右的顺序来处理它们。
可以使用括号限定优先级,不管指定的是什么运算符,总是首先处理最底层括号中的运算。
下表按优先级从低到高的顺序列出了所有“地图代数”运算符。同一行中的运算符具有相同的优先级。