时间:2023年8月24日 阅读时间:15~20分钟 在阅读本篇和后续篇章时,推荐要有一点点Python基础。 代码练习notebook为4.2.3-arcpy基础(代码练习).ipynb
1.地理数据处理基础知识
ArcGIS中的地理处理允许您执行空间分析和建模以及自动执行GIS任务。典型的地理处理工具获取输入数据(要素类、栅格或表),执行地理处理任务,然后生成输出数据作为结果。ArcGIS包含数百种地理处理工具。地理处理工具的示例包括用于创建缓冲区、用于向表添加字段以及用于对地址表进行地理编码的工具。
地理处理通过创建组合了一系列工具的序列来支持工作流的自动化。一个工具的输出实际上成为下一个工具的输入。通过使用模型(model builder)和脚本,可以在ArcGIS中地理处理工具的自动化工作流。
2.从导入ArcPy开始
ArcPy 包含许多模块、类和函数,这使得可以在 Python 脚本中使用 ArcGIS Pro 中的所有地理处理工具。
代码语言:javascript复制import arcpy
执行上述语句后,就可以运行随 ArcGIS Pro 安装的工具箱中的所有地理处理工具。包括用于处理数据的模块 (arcpy.da
)、地图脚本模块 (arcpy.mp
)、用于图像分析和解释的模块 (arcpy.ia
) 以及用于地图代数和栅格分析的模块(arcpy.sa
)。导入 ArcPy 后,您就可以开始使用其模块、函数和类。
在脚本中导入 ArcPy 不仅会导入 ArcPy 的功能,还会执行两项重要检查:ArcPy 的可用性和许可证的可用性。如果输出RuntimeError: NotInitialized
错误消息,请参照4.2.1-arcpy介绍和安装.md安装ArcGIS Pro。
3.设置工作区
首先得理解Python中绝对路径和相对路径的区别,简单提示一下:
绝对路径(Absolute Path)
是从文件系统的根目录开始的完整路径。它包含了从根目录到目标文件或目录的所有目录层级。在不同的操作系统中,根目录的表示方式可能不同。例如,在Windows系统中,绝对路径可以以盘符(如C:)开始,而在Linux或Mac系统中,绝对路径以斜杠(/)开始。在代码中如果是反斜杠 "",应该改为 “/”(正斜杠)或'''(两个反斜杠)。或者写成r"C:/data1"。相对路径(Relative Path)
是相对于当前工作目录的路径。当前工作目录是指运行Python程序时所在的目录。相对路径指定了从当前工作目录到目标文件或目录的路径。相对路径可以是简单的文件名或目录名,也可以是包含目录层级关系的路径。
ArcPy中的工作空间
指定的就是工作目录
,对应的可以使用相对路径
引用。独立的 Python 脚本默认情况有一个当前工作目录
,默认情况下该目录是脚本的位置。当设置 arcpy.env.workspace
时,ArcGIS Pro 将会在该路径下查找和操作数据。
tip: 您可以使用
os.getcwd()
获取当前工作目录,并且可以使用os.chdir("/path")
更改当前工作目录。这样我们就能够在工作目录中使用相对路径指定路径了,保证了代码的可移植性。
arcpy.env.workspace
本质是一个Python类
注意理解env
是一个Python类(class),workspace 是该类的一个属性(property)。arcpy.env.workspace
对应arcpy.<class>.<property>
,所以arcpy.<classname>.<property> = <value>
就是工作空间的属性值。
例如,你有一个名为 "C:Data" 的文件夹,其中包含了你要使用的地理数据,你可以通过以下方式将它设置为工作空间:
代码语言:javascript复制import arcpy
arcpy.env.workspace = r"C:Data"
# 创建地理数据库
arcpy.CreateFileGDB_management(arcpy.env.workspace, "myGDB.gdb") # 在工作空间下创建名为myGDB.gdb的地理数据库
在这个例子中,arcpy.env.workspace
被设置为 "C:Data",这意味着在执行地理处理脚本时,ArcGIS Pro 将会在该文件夹下查找和操作数据。
使用 arcpy.env.workspace
的好处是,它可以确保地理处理脚本在不同的环境中都能正常工作,无论是在 Windows 还是其他操作系统上。它提供了一种统一的方式来设置工作空间,使得脚本可以在不同的计算机上或不同的工作目录中运行,而不需要手动更改路径。(此方法和python的相对路径的作用相同)例如你可以这样指定工作空间:
import os
# 在整个脚本前指定一次绝对路径
data_dir = r'C:Users<用户名>DocumentsPython_Githubarcgis-notebooks-tutorialhurricane_analysisdata'
# 以后路径都是用相对路径 利用os.path.join处理路径能避免许多问题
hurricanes_raw_dir = os.path.join(data_dir,'hurricanes_raw')
# 利用mkdir创建检查和创建目录
if not os.path.exists(hurricanes_raw_dir):
os.mkdir(os.path.join(data_dir,'hurricanes_raw'))
总而言之,arcpy.env.workspace
是一个用于设置地理处理脚本工作空间的变量,它确保脚本能够在不同的环境中正确访问和操作数据。
4.使用地理处理工具
ArcPy 使您可以访问 ArcGIS Pro 中的所有地理处理工具。打开软件能看到有很多地理处理工具:
image-20230824120611163
(1)调用工具的方法两种方法
- 作为python函数调用:
arcpy.<toolname_toolboxalias>(<parameters>)
例如调用裁剪工具:
代码语言:javascript复制import arcpy
arcpy.env.workspace = "C:/Data"
arcpy.Clip_analysis("streams.shp", "study.shp", "result.shp")
- 还可以通过使用与工具箱别名匹配的模块来使用工具。首先将工具箱作为模块调用,然后将工具作为该模块的函数调用,最后是工具的参数。
arcpy.<toolboxalias>.<toolname>(<parameters>)
import arcpy
arcpy.env.workspace = "C:/Data"
arcpy.analysis.Clip("streams.shp", "study.shp", "result.shp")
两种方法都是正确的。
小tips:
- Python区分大小写,Clip不等于clip
- 在代码行中空格对执行没有影响,但是对可读性有影响