,欢迎也在微信公众号查看。
Python脚本使ArcGIS Pro中的工作流自动化成为可能。ArcGIS pro中采用的是Python3。在本例中,将首先介绍Python 语法的一些基础知识,然后编写代码来确定工作空间中的所有矢量图层的记录数量,最后可以将代码导出到 Python 脚本,该脚本可以在 ArcGIS Pro 外部打开、修改和运行。
一、设置工程和查看数据集
1.下载数据,并解压。
https://www.arcgis.com/home/item.html?id=b2a7ac0eba3344cc9d143e08bd9299f4
2.创建一个新工程,名为PythonStart,点击Map选项卡下的Add Data, 加载解压后的数据。
3. 右键单击 ambulances图层,单击属性表,在打开的表下面可看到有48 条记录。关闭属性表。
4.在Geoprocessing窗格中搜索并打开Get Count工具,设置参数。Input Rows: ambulances。该功能返回图层记录数量。
5.利用Python实现计数功能。在view选项卡下单击Python window. 在出现的窗口中输入以下代码,并按Enter键。
arcpy.management.GetCount("ambulances")
ArcPy 是 Python 包,它具有 Python 中的大部分可用 ArcGIS Pro 功能。GetCount() 是 ArcPy 的功能,可运行数据管理工具工具箱中的获取计数地理处理工具。
6.鼠标定位在有代码的任意位置,右键单击清除脚本。
二、在 Python 窗口中运行代码
1.在Python窗口中输入以下语句print("GIS is cool"),并按下enter键。需要注意Python 使用单引号和双引号来标识字符串,两者用法相同。print("GIS is cool") 和 print('GISis cool') 均正确,但是 print("GIS is cool') 会导致错误。Python 中的引号始终是直引号(而不是弯引号)。当您在 Python 窗口或其他编码环境输入编码时,其将被自动格式化。有时,如果您复制已在文字处理软件中格式化或编写的代码,则直引号可能被会替换为弯引号。例如,print(“GIS is cool”) 会导致错误。:
2. 输入以下代码行:
x = 37,然后按 Enter 键
y = 73
x * y
在代码行中,x 是一个变量。变量就像用于存储值的容器。在此示例中,该值为整数 37,但它也可以是其他数字、文本或数据集名称。由于该变量被分配了一个值,因此代码行被称为赋值。在变量赋值中使用单个等号表示变量被设置为等于该值。已分配变量,稍后这些变量可以用于代码。
Python 区分大小写,因此 X 与 x 不同。
当在 Python 窗口中继续运行代码行时,先前运行的所有代码及其结果将显示在脚本中。可以清除脚本,但这不会清除已分配的任何变量的值,重新启动您的 ArcGIS Pro 会话可将其清除。
3. 右键单击脚本,然后单击清除脚本。
4.编写华氏温度 (F) 和摄氏温度 (C) 之间的转换代码。公式为:F = 9/5 * C + 32。
Python window中输入:
temp_c = 17
temp_f = temp_c * 9 / 5 + 32
print(temp_f)
代码的第一行将数字值分配给变量 temp_c。第二行使用变量 temp_c 执行计算,并将结果分配给新变量 temp_f。第三行打印变量 temp_f 的值。第三行也可以写成 temp_f,但通常会使用 print() 函数,因为它提供了更好的格式化选项。
5.清除脚本。
三、获取在 Python 窗口中编写代码的帮助
1.在英文输入状态下,在python窗口中输入pri,会出现带有字母 F 的蓝色图标,这称为自动完成或代码完成。将光标悬停在 print() 弹出窗口上方,将显示该函数的语法帮助。单击 print() 弹出窗口。在 print() 函数的括号中输入一个引号,将自动添加第二个引号。
2.输入arc, 随即显示包含 ArcPy 包的弹出窗口,使用带有字母 P 的红色图标表示。单击 arcpy 弹出窗口。在 arcpy. 后,输入get. 在选项列表中单击 GetCount()management。GetCount() 后的单词 management表示 GetCount() 为 management 工具组的一部分。
arcpy.management.GetCount()
3. 将光标放在括号之间时,将显示两个弹出窗口。下方的弹出窗口显示“获取计数”工具的语法。语法显示唯一参数名为 in_rows,它由输入表视图或栅格图层组成。上方的弹出窗口显示活动地图中ambulances 图层的名称。这是“获取计数”工具 in_rows 参数的代码完成提示。换句话说,Python 窗口可以识别出活动地图中的图层是工具的有效参数。您可以选择使用此图层或输入其他内容。单击 ambulances 弹出窗口。
四、使用 for 循环进行迭代
接下来,将尝试迭代,即多次重复相同的步骤。您将创建一个值列表,并对列表的每个元素执行相同的计算。
1. 清除脚本。
2. 输入以下代码行并按 Enter 键:
templist_c = [17, 19, 24, 21, 16]
此代码将创建一个 Python 列表,其中包含五个相同类型的元素。在本例中,它们是摄氏温度值。列表是Python 中非常常见的数据类型。列表由一系列由括号 [] 包围的元素组成,这些括号有时称为方括号,并且这些元素之间使用逗号分隔。
3. 输入以下代码行并按 Enter 键:
for temp_c in templist_c:
请注意,当在代码行末尾按 Enter 键时,该代码不会运行,但提示符将移至下一行。代码行以冒号结尾,这表示将要跟随更多代码,并且代码行本身不能单独运行。
代码行是for 循环的起点,具有以下一般结构:
for :
for 循环允许您遍历现有列表的元素,并对每个元素重复相同的步骤。包含 for 关键字的代码行以冒号结尾。下一行代码将缩进,并且后续同样缩进的所有代码行将在每次迭代中运行。重复的代码块可以通过缩进来识别。由于使用冒号,Python 窗口可以识别 for 循环,因此下一代码行将缩进。
4.输入以下代码行并按 Enter 键:
temp_f= temp_c * 9 / 5 + 32
此代码应缩进。如果不慎删除了缩进,则可以在开始出添加四个空格来缩进此行。四个空格是代码块的默认缩进级别。
5. 输入以下代码行并按 Enter 键:
print(temp_f)
6. 将光标停留在代码的空行上,按 Enter 键。结果将会被打印出来。
7. 清除脚本。
五、创建并遍历要素类列表
1. 运行以下代码行:
count = arcpy.management.GetCount("ambulances")
print(count)
2. 运行以下代码行:
count =arcpy.management.GetCount("F:/ArcGIS/data/PythonStart/ambulances.shp")
print(count)
步骤1和2的结果是相同的。关于路径的使用,有一些注意事项。首先,如果将数据提取到另一个文件夹,则需要修改此路径。其次,由于该路径为字符串,将在两侧使用引号。另请注意,路径中使用正斜杠 (/) 代替常规反斜杠 (\)。Python中的反斜杠用作转义字符,这可能会改变其后的字符含义。在字符串中使用反斜杠时,可能会导致意外的结果。第三,由于.shp 文件扩展名为名称的一部分,因此要素类名为 ambulances.shp。仅使用 ambulances 会返回错误,因为文件夹中没有名为 ambulances 的要素类。可以设置工作空间,而不是指定完整路径。工作空间是影响地理处理操作的几种环境设置之一。除了工作空间之外,环境还包括默认的输出坐标系、用于栅格数据处理的默认像元大小等。
3. 运行以下代码行:
arcpy.env.workspace = "F:/ArcGIS/data/PythonStart"
count = arcpy.management.GetCount("ambulances.shp")
print(count)
打印相同的结果。
尽管设置工作空间需要一个额外的代码行,但是使用工作空间通常是有效的,因为所有随后的 ArcPy 代码行都会自动使用它。第二行代码不再需要完整路径。如果代码中未设置工作控件,则将使用工程的默认工作控件。
完成确定文件夹中每个要素类的要素数量的原始任务的最后一步是:添加代码以在工作空间中创建 shapefile 列表,然后在该列表的每个元素上运行“获取计数”工具。设置工作空间后,您可以使用 ArcPy 函数在此工作空间中创建要素类列表。
4. 输入以下代码行并按 Enter 键:
fc_list = arcpy.ListFeatureClasses()
ListFeatureClasses() 函数将创建要素类列表。通过将其分配给变量,可以在其他任务中使用该列表。要检查列表的内容,可以打印其值。
运行以下代码行:
print(fc_list)
5. 输入以下代码行并按 Enter 键
for fc in fc_list:
count =arcpy.management.GetCount(fc)
print(count)
结果将打印工作空间中每个 shapefile 的要素数量。
6. 右键单击 Python 窗口脚本中的代码,然后单击保存脚本,名为count_features.py。
六、在 Python 编辑器中运行脚本
在ArcGIS Pro 外部运行 Python 代码需要Python 代码编辑器,也称为集成开发环境 (IDE)。在本部分中,将使用一个名为 IDLE 的 IDE,它代表 IntegratedDeveLopment Environment(请注意大写 L)。IDLE 将随 Python一起安装,因此如果你的计算机装有 Python,则它也具有 IDLE。还有许多其他 Python IDE(包括 PyCharm 和 Spyder),但是 IDLE 是一个不错的起点。类似 PyCharm 和 Spyder 的IDE 需要通过其他步骤进行下载、安装和配置,而 IDLE 是任何 Python 安装的一部分并可以使用。
1.找到刚才保存的count_features.py 文件并单击Edit with IDLE (ArcGIS Pro)。
2.在 IDLE 的顶部菜单中,单击run,然后单击 Python Shell。可在里面进行代码输入。
3.返回到 count_features.py 脚本的脚本窗口。删除代码,只留下如下代码,并保存。
4. 单击运行,然后单击run model。出现以下错误:NameError: name 'arcpy' is not defined。发生错误的原因是您使用的是 ArcPy 包,但是正在 ArcGIS Pro 外部运行代码。要使用包,需要将其导入脚本的顶部。
5.在顶部插入一行代码import arcpy,保存并重新运行。结果与在 ArcGIS Pro 中运行代码的结果相同,但是 ArcGIS Pro 无需打开即可运行脚本
七、运行 Python 代码的方法比较
方法 |
优点 |
缺点 |
ArcGIS Pro 中的 Python 窗口 |
|
|
Python 编辑器 (IDE) |
|
|