获得 Image Analyst 许可后可用。
需要 Spatial Analyst 许可。
地图代数允许您通过代数来访问运算符、函数和类。 其最基本的格式是,输出栅格位于等号 (=) 左边,工具、运算符及其参数位于等号右边。 例如:
from arcpy.ia import *
elevationPlus100 = Plus("inelevation", 100)
上述语句会将 100 个单元添加到高程数据集,并创建名为 elevationPlus100 的 Raster 对象来存储结果。
地图代数可以执行简单语句,但在创建复杂语句和模型时可实现该语言的强大功能。由于地图代数已集成到 Python 中,因此,Python 和 ArcPy 的所有功能及其扩展(模块、类、函数和属性)均可供建模者使用。
使用地图代数可以快速提高工作效率,并且随着需求的增加,您可以对其很多方面进行探索。以下快速浏览为您提供一些基本的入门知识。
运行“地图代数”的基础知识
使用“地图代数”的方法有三种:
- 栅格计算器工具
- Python 窗口
- 偏好的 Python 集成开发环境 (IDE)
栅格计算器
栅格计算器工具可执行“地图代数”表达式。 此工具具有易于使用的计算器界面,只需单击界面中的按钮便可创建大部分“地图代数”语句。 栅格计算器可作为独立工具使用,也可在模型构建器中使用。 因此,通过该工具可将“地图代数”的功能集成到模型构建器中。
在上述表达式中,通过将第二个栅格和第三个栅格相乘,并将结果与第一个栅格相加来结合三个栅格。 请注意,运算符遵循定义的优先级顺序。
栅格计算器工具并不能取代其他 Image Analyst 或 Spatial Analyst 工具。 需要继续使用其他工具进行相应计算。 例如,使用加权总和工具叠加多个加权栅格。 栅格计算器工具用于执行单行代数语句。
由于栅格计算器是地理处理工具,因此,它也可以像所有工具一样集成在模型构建器中。 有关详细信息,请参阅以下主题:
Python 窗口
在Python 窗口中,可以高效、便捷地使用地理处理工具和 ArcGIS 中的 Python 函数。可在该窗口中运行的 Python 命令包括单行代码,也包括带逻辑的复杂块。在 Python 窗口中,还可通过自定义或第三方 Python 模块和库来实现其他功能。
要启动 Python 窗口,请单击分析选项卡上地理处理组或视图选项卡上窗口组中的 Python 按钮 。
上面的语句序列用于导入 ArcPy 站点包、地理处理环境和 Image Analyst 模块,设置工作空间并运行分类栅格工具。 在语句末尾输入回车符后,会立即运行该语句。
Python 窗口的部分功能包括:自动完成内置行、使用变量,以及访问 Python 和 ArcPy 功能。
Python 集成开发环境
尽管在 ArcGIS Pro 中对在 Python 窗口中可以输入的语句数量没有限制,但是创建太多复杂的模型可能会比较麻烦。 您也可以通过所偏爱的集成开发环境(例如 PythonWin)来访问 Image Analyst 模块的工具、运算符、函数以及类。 启动首选的 IDE 并输入所需的语句。
以下脚本用于导入 ArcPy、地理处理环境和 Image Analyst 模块;设置变量;检出扩展模块;运行分类栅格工具;保存输出。
# Name: Image Classification
# Description:
# Requirements: Image Analyst Extension
# Import system modules
import arcpy
from arcpy import env
from arcpy.ia import *
# Check out the ArcGIS Image Analyst extension license
arcpy.CheckOutExtension("ImageAnalyst")
# Set environment settings
env.workspace = "C:/data"
# Set local variables
inRaster = "Landsat8_Redlands.tif"
classification_file = "LandCover.ecd"
# Execute Classify Raster
outLandCover = ClassifyRaster(inRaster, classification_file)
# Save the output
outLandCover.save("C:/data/Landcover.tif")
与 Python 窗口一样,IDE 可用于访问所有可用的 Python 和 ArcPy 功能。
使用运算符
“地图代数”支持一系列运算符(例如,+、- 和 *)。这些运算符同样也存在于 Python 中,但针对“地图代数”进行了修改,以便按不同方式来处理 Raster 对象。例如,下面将两个数相加,构成了一个变量:
# set outVar to 14 using the Python + operator
outVar = 5 + 9
为了体现该语句应对栅格起作用(即,使用“地图代数”运算符),必须将数据集转换为栅格。 以下示例使用“地图代数”的 + 运算符将两个栅格相加:
outRas = Raster("inras1") + Raster("inras2")
运算符可以接受栅格和数字的混合形式。例如,以下示例将常数值 8 与输入栅格中的所有像元相加:
outRas = Raster("inras1") + 8
创建复杂表达式
可将工具和运算符连在一起构成一条语句。以下示例执行每个表达式中的多个工具和运算符:
outRas = Slope("indem" * 2) / 57
outdist = EucDistance(ExtractByAttributes("inras", "Value > 105"))
可以使用括号控制处理顺序。考虑下面两个示例,它们使用了相同的运算符,但是由于使用括号而得到了不同的结果:
outRas1 = (Raster("inras1") + Raster("inras2")) / Raster("inras3")
并且
outRas2 = Raster("inras1") + Raster("inras2") / Raster("inras3")
在第一条语句中,inras1 与 inras2 相加,然后将结果除以 inras3。第二条语句中没有括号,inras2 将除以 inras3,然后将结果与 inras1 相加。
关于执行“地图代数”语句的建议
在如下所示的所有“地图代数”示例中,输出均为 Raster 对象。Raster 对象指向临时栅格数据集,除非明确保存此数据集,否则 ArcGIS 会话结束时会将其删除。要永久保存临时数据集,可对 Raster 对象调用 save 方法(请参阅以下两个示例)。
以下示例用于演示工作空间环境:
import arcpy
from arcpy import env
from arcpy.ia import *
env.workspace = "C:/data"
outLandCover = ClassifyRaster("Landsat8_Redlands", "LandCover.ecd")
outLandCover.save("RedlandsLandcover")
上述语句设置了工作空间,因此,RedlandsLandcover 将保存在 C:/data 中。
更多阅读材料
要想更深入地了解 ArcPy,可以浏览以下主题:
要获取有关 Python 中的地理处理的详细信息,可参阅以下主题: