ArcGIS Desktop

  • ArcGIS Pro
  • ArcMap

  • My Profile
  • 帮助
  • Sign Out
ArcGIS Desktop

ArcGIS Online

专为贵组织打造的制图平台

ArcGIS Desktop

全面的专业性 GIS

ArcGIS Enterprise

面向企业的 GIS

ArcGIS Developers

用于构建位置感知应用程序的工具

ArcGIS Solutions

适用于行业的免费模板地图和应用程序

ArcGIS Marketplace

获取适用于组织的应用程序和数据

  • 文档
  • 支持
Esri
  • 登录
user
  • 我的个人资料
  • 登出

ArcMap

  • 主页
  • 入门
  • 地图
  • 分析
  • 管理数据
  • 工具
  • 扩展模块

快速浏览:在 Spatial Analyst 中使用“地图代数”

需要 Spatial Analyst 许可。

  • 运行“地图代数”的基础知识
  • 使用工具工作
  • 使用运算符
  • 创建复杂表达式
  • 使用类
  • 用于输出要素、表或文件的“地图代数”功能
  • 关于执行“地图代数”语句的建议
  • 延伸阅读

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

from arcpy.sa import *
outShade = Hillshade("inelevation", 99, 33)

以上语句用于计算山体阴影,即确定太阳在方位角为 99 度且高度角为 33 度时的照明度,并且创建名为 outShade 的 Raster 对象来存储结果。

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

使用地图代数可以快速提高工作效率,并且随着需求的增加,您可以对其很多方面进行探索。以下快速浏览为您提供一些基本的入门知识。

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

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

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

栅格计算器

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

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

上述表达式用于将三个栅格相加。 请注意,运算符遵循定义的优先级顺序。

栅格计算器工具并不能取代其他 Spatial Analyst 工具。需要继续使用其他工具进行相应计算。例如,使用坡度工具执行坡度计算。栅格计算器工具用于执行单行代数语句。

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

  • 什么是 ModelBuilder?
  • ModelBuilder 基本词汇
  • 了解模型元素

Python 窗口

在Python 窗口中,可以高效、便捷地使用地理处理工具和 ArcGIS 中的 Python 函数。可在该窗口中运行的 Python 命令包括单行代码,也包括带逻辑的复杂块。在 Python 窗口中,还可通过自定义或第三方 Python 模块和库来实现其他功能。

要启动 Python 窗口,请单击“标准”工具条上的 Python 窗口按钮 Python 或者在“地理处理”下拉菜单中单击 Python 窗口。

Python 窗口示例

上面的语句序列用于导入 ArcPy 站点包、地理处理环境和 Spatial Analyst 模块;设置工作空间;运行坡度工具;并且永久保存输出。在语句末尾输入回车符后,会立即运行该语句。

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

Python 集成开发环境

尽管对在 Python 窗口中可以输入的语句数量没有限制,但是创建太多复杂的模型可能会比较麻烦。您也可以通过所偏爱的集成开发环境(例如 PythonWin)来访问 Spatial Analyst 模块的工具、运算符、函数以及类。启动首选的 IDE 并输入所需的语句。

以下脚本用于导入 ArcPy、地理处理环境和 Spatial Analyst 模块;设置变量;检出扩展模块;运行坡度工具;保存输出。

# Name: Slope
# Description: Identifies the rate of maximum change
#               in z-value from each cell.
# Requirements: Spatial Analyst Extension
# Import system modules
import arcpy
from arcpy import env
from arcpy.sa import *
# Set environment settings
env.workspace = "C:/data"
# Set local variables
inRaster = "elevation"
outMeasurement = "DEGREE"
zFactor = 0.3043
# Check out the ArcGIS Spatial Analyst extension license
arcpy.CheckOutExtension("Spatial")
# Execute Slope
outSlope = Slope(inRaster, outMeasurement, zFactor)
# Save the output
outSlope.save("C:/output/outslope02")

与 Python 窗口一样,IDE 可用于访问所有可用的 Python 和 ArcPy 功能。

  • 了解有关创建新 Python 脚本模块的详细信息
  • 了解有关编写 Python 脚本的详细信息

使用工具工作

所有输出栅格的 Spatial Analyst 工具均可以代数形式使用。如果数据集名称位于内容列表窗口或当前工作空间中,则可以使用该数据集名称;否则,必须输入完整路径。

# In the following statement, indem is either  
#   in the TOC or in the current workspace
outRas = Aspect("indem")
# In the following statement the full path is specified
outRas2 = Aspect("C:/Data/indem2")

语句的输出可输入到后续语句中。

outRas = Select("inras", "Value > 105")
# outRas is variable defined by the previous statement and is not quoted
outdist = EucDistance(outRas)

使用运算符

“地图代数”支持一系列运算符(例如,+、- 和 *)。这些运算符同样也存在于 Python 中,但针对“地图代数”进行了修改,以便按不同方式来处理 Raster 对象。例如,下面将两个数相加,构成了一个变量:

# set outVar to 14 using the Python + operator
outVar = 5 + 9

为了体现该语句应对栅格起作用(即,使用 Spatial Analyst 运算符),必须将数据集转换为栅格。以下示例使用 Spatial Analyst 的 + 运算符将两个栅格相加:

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 相加。

在单个表达式中连续使用多个布尔(~、&、^、|)运算符和/或关系(<、<=、>、>=、==、!=)运算符时,应使用括号。例如,表达式 (a>2) & (a<5) 需要使用括号。如果不使用括号,则表达式将导致错误:a>2 & a<5。因为使用了括号,下面的表达式将会执行:

outRas = (Raster("a") > 2) & (Raster("a") < 5)
抢先版本:

有些表达式可能不只是需要括号,而是需要重写。例如,形式为 a < b < c 的表达式将不会执行,而添加括号会改变表达式的含义。因此,要成功执行此表达式,需要将其按 (a < b) & (b < c) 形式重写。

使用类

在“地图代数”工具中,类用于具有多个实际参数的形式参数。通过对输入形式参数使用类,可以轻松地访问形式参数的各个实际参数,从而查询、更改和添加其他实际参数。以下示例显示了类的使用:

outRas = FocalStatistics("inRaster", NbrCircle(5, "CELL"), "SUM")

上述语句用于为含有五个像元的圆形邻域中的每个像元计算总和。NbrCircle 是用于创建 NbrCircle 对象的类。

以下示例显示了重映射表类。可以在重映射类中输入任意数量的值。

outReclass = Reclassify("inRaster", "VALUE", RemapRange([[0, 1], [3, 10], [4, 8]]))

在上述语句中,类 RemapRange 用来定义输入值的重分类。inRaster 中值为 0 的像元将被分配给 outReclass 中的 1,而 3 将被分配给 10,4 将分配给 8。

有关在“地图代数”中使用类的详细信息,请参阅 ArcGIS Spatial Analyst extension 类概述。

用于输出要素、表或文件的“地图代数”功能

只有输出栅格的 Spatial Analyst 工具才可以使用代数格式执行。对于输出不是栅格(例如,要素、表或文本文件)的 Spatial Analyst 工具,通过括号将输出指定为工具中的参数。请注意下例中的语法,下例将等值线创建为输出折线要素数据集:

indem = "C:/Data/indem"
Contour(indem, "C:/output/outcontours")

关于执行“地图代数”语句的建议

在如下所示的所有“地图代数”示例中,输出均为 Raster 对象。Raster 对象指向临时栅格数据集,除非明确保存此数据集,否则 ArcGIS 会话结束时会将其删除。要永久保存临时数据集,可对 Raster 对象调用 save 方法(请参阅以下两个示例)。

在实施“地图代数”工具或运算符之前,建议设置相应的分析环境,尤其是当前工作空间、范围、像元大小、像元大小投影方法和掩膜。

  • 了解有关地理处理环境设置的详细信息

以下示例用于演示工作空间环境:

import arcpy 
from arcpy import env 
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data" 
outHillshade = Hillshade("elevation", 180, 75, "SHADOWS", 1)
outHillshade.save("outhillshd01")

上述语句设置了工作空间,因此,outhillshd01 将保存在 C:/sapyexamples/data 中。

建议将“地图代数”工具所有复杂输入的类均设置为变量,并在语句中使用此变量。在下面的语句中,RemapRange 类对象被设置为变量 myRemapRange 并且用作重分类工具的输入。

import arcpy 
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data" 
myRemapRange = RemapRange([[-3, 0, 0], [0, 1.75, 25], [1.75, 3.5, 50], 
                           [3.5, 5.25, 75], [5.25, 7, 100]]) 
outReclassRR = Reclassify("inreclass", "VALUE", myRemapRange)
outReclassRR.save("rclassremran")

延伸阅读

要想更深入地了解 ArcPy,可以浏览以下主题:

  • 什么是 ArcPy?
  • Python 快速浏览
  • Python 基本词汇

要获取有关 Python 中的地理处理的详细信息,可参阅以下主题:

  • 如何通过 Python 使用工具
  • 访问许可和扩展模块
  • 如何通过 Python 使用类
  • 使用环境设置

有关 Python 的详细信息,可访问以下页面:

  • 了解 Python

相关主题

  • 什么是地图代数?
  • Essential Map Algebra vocabulary
  • 基本词汇:使用模型构建器创建工具
  • 基本 Python 词汇
  • 通过 Python 使用工具

ArcGIS Desktop

  • 主页
  • 文档
  • 支持

ArcGIS

  • ArcGIS Online
  • ArcGIS Desktop
  • ArcGIS Enterprise
  • ArcGIS
  • ArcGIS Developer
  • ArcGIS Solutions
  • ArcGIS Marketplace

关于 Esri

  • 关于我们
  • 招贤纳士
  • Esri 博客
  • 用户大会
  • 开发者峰会
Esri
分享您的想法。
Copyright © 2021 Esri. | 隐私政策 | 法律声明