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

获得 Image Analyst 许可后可用。

需要 Spatial Analyst 许可。

地图代数允许您通过代数来访问运算符、函数和类。 在其最基本的形式中,将在等号 (=) 之前指定输出栅格,在等号之后指定工具、运算符及其参数。 以下为示例:

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

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

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

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

地图代数基础知识

可通过三种方式使用地图代数:

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

栅格计算器

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

栅格计算器工具用户界面

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

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

如上所述,栅格计算器工具可以集成到 模型构建器 中。 有关详细信息,请参阅以下主题:

Python 窗口

借助 Python 窗口交互式控制台,可以通过 Python 解释程序直接在 ArcGIS AllSource 中运行 Python 代码,而无需脚本文件。 可在该窗口中运行的 Python 代码包括单行代码,也包括复杂的多行代码块。 以下视频提供了 Python 窗口的概览。

要打开 Python 窗口,请单击分析选项卡上地理处理组或视图选项卡上窗口组中的 Python 按钮 显示 Python 窗口

Python 窗口示例

以上语句序列用于导入 ArcPy 站点包、地理处理环境和 Image Analyst 模块,设置工作空间并运行分类栅格工具。 在语句末尾输入回车符后,会立即运行该语句。

Python 窗口的部分功能包括:自动完成内置行、使用变量,以及访问 PythonArcPy 功能。

Python 集成式开发环境

尽管对在 ArcGIS AllSourcePython 窗口中可以输入的语句数量没有限制,但是创建复杂模型可能会比较麻烦。 您也可以通过 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 可用于访问所有可用的 PythonArcPy 功能。

运算符

地图代数支持一系列运算符(例如,+、- 和 *)。 这些运算符同样也存在于 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")

在第一条语句中,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 中地理处理的详细信息,请参阅以下主题:

相关主题