快速浏览:在 Image Analyst 中使用地图代数

获得 Image Analyst 许可后可用。

需要 Spatial Analyst 许可。

地图代数允许您通过代数来访问运算符、函数和类。 其最基本的格式是,输出栅格位于等号 (=) 左边,工具、运算符及其参数位于等号右边。 例如:

from arcpy.ia import *
elevationPlus100 = Plus("inelevation", 100)

上述语句会将 100 个单元添加到高程数据集,并创建名为 elevationPlus100Raster 对象来存储结果。

地图代数可以运行简单语句,但在创建复杂语句和模型时可实现该语言的强大功能。 由于地图代数已集成到 Python 中,因此,Python 和 ArcPy 的所有功能及其扩展(模块、类、函数和属性)均可供建模者使用。

随着需求的增加,您可以地图代数的很多方面进行探索。 以下快速浏览为您提供一些基本的入门知识。

运行“地图代数”的基础知识

使用“地图代数”的方法有三种:

  • 栅格计算器工具
  • Python 窗口
  • 偏好的 Python 集成开发环境 (IDE)

栅格计算器

栅格计算器工具可执行“地图代数”表达式。 此工具具有易于使用的计算器界面,只需单击界面中的按钮便可创建大部分“地图代数”语句。 栅格计算器可作为独立工具使用,也可在模型构建器中使用。 因此,通过该工具可将“地图代数”的功能集成到模型构建器中。

栅格计算器用户界面
栅格计算器用户界面

在上述表达式中,通过将第二个栅格和第三个栅格相乘,并将结果与第一个栅格相加来结合三个栅格。 请注意,运算符遵循定义的优先级顺序

栅格计算器工具并不能取代其他 Image AnalystSpatial Analyst 工具。 需要继续使用其他工具进行相应计算。 例如,使用加权总和工具叠加多个加权栅格。 栅格计算器工具用于执行单行代数语句。

由于栅格计算器是地理处理工具,因此,它也可以像所有工具一样集成在模型构建器中。 有关详细信息,请参阅以下主题:

Python 窗口

Python 窗口中,可以高效、便捷地使用地理处理工具和 ArcGIS 中的 Python 函数。可在该窗口中运行的 Python 命令包括单行代码,也包括带逻辑的复杂块。在 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")

在第一条语句中,inras1inras2 相加,然后将结果除以 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 中的地理处理的详细信息,可参阅以下主题:

相关主题