获得 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 窗口交互式控制台,可以通过 Python 解释程序直接在 ArcGIS AllSource 中运行 Python 代码,而无需脚本文件。 可在该窗口中运行的 Python 代码包括单行代码,也包括复杂的多行代码块。 以下视频提供了 Python 窗口的概览。
要打开 Python 窗口,请单击分析选项卡上地理处理组或视图选项卡上窗口组中的 Python 按钮 。
以上语句序列用于导入 ArcPy 站点包、地理处理环境和 Image Analyst 模块,设置工作空间并运行分类栅格工具。 在语句末尾输入回车符后,会立即运行该语句。
Python 窗口的部分功能包括:自动完成内置行、使用变量,以及访问 Python 和 ArcPy 功能。
Python 集成式开发环境
尽管对在 ArcGIS AllSource 的 Python 窗口中可以输入的语句数量没有限制,但是创建复杂模型可能会比较麻烦。 您也可以通过 IDE 来访问 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"
# Run 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
为了体现该语句应对栅格起作用(即,要使用地图代数运算符),必须将数据集转换为 Raster 对象。 以下示例使用地图代数 + 运算符将两个栅格相加:
outRas = Raster("inras1.tif") + Raster("inras2.tif")
运算符可以接受栅格和数字的混合形式。 例如,以下示例将常数值 8 与输入栅格中的所有像元相加:
outRas = Raster("inras1.tif") + 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 中地理处理的详细信息,请参阅以下主题: