三、Arcpy基础【ArcGIS Python系列】

2023-11-24 16:19:53 浏览数 (2)

时间: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的相对路径的作用相同)例如你可以这样指定工作空间:

代码语言:javascript复制
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>)
代码语言:javascript复制
import arcpy
arcpy.env.workspace = "C:/Data"
arcpy.analysis.Clip("streams.shp", "study.shp", "result.shp")

两种方法都是正确的。

小tips:

  1. Python区分大小写,Clip不等于clip
  2. 在代码行中空格对执行没有影响,但是对可读性有影响

    0 人点赞