使用 Python 运行地理处理工具

打开工程和查看数据集

在开始使用 Python 运行地理处理工具前,您将下载数据集、打开新工程,并查看要使用的数据集。

  1. 下载本教程数据,并将内容提取到您的计算机上的某一位置。

    .zip 文件包含名为 PythonGP 的文件夹。

    在本教程中,数据显示在 C:\Lessons\PythonGP\ 位置。 您可以使用其他文件夹,但是请确保按照以下说明调整路径。

  2. 启动 ArcGIS Pro
  3. ArcGIS Pro 中,单击最近的工程旁边的打开其他工程

    打开其他工程。

  4. 打开工程窗口中,浏览到您从 PythonGP.zip 文件解压缩的文件夹,单击 Python Geoprocessing.aprx 将其选中,然后单击确定

    工程随即打开。 当前地图显示加拿大多伦多的城市边界。 您需要将几个要素类添加至此地图。

  5. 如果目录窗格未显示,请单击视图选项卡,然后单击目录窗格
  6. 目录窗格停靠在地图的右侧。
  7. 目录窗格中,展开文件夹,然后展开 PythonGP
  8. 展开 Toronto.gdb 文件地理数据库。

    Toronto 地理数据库展开以显示要素类。

    地理数据库包含多个要素类。

  9. 右键单击 ambulances 要素类,然后单击添加到当前地图

    此要素类表示多伦多的救护车调度位置。

  10. fire_stationscommunities 要素类添加至同一地图。

    这些要素类分别表示多伦多市内消防站和社区边界。 在本教程中,您将使用 Python 在这些要素类上运行地理处理工具。

  11. Toronto.gdb 地理数据库是工程的默认地理数据库。 PythonGP 文件夹还包含一个名为 Results.gdb 的地理数据库,该数据库当前为空,但将用于存储某些地理处理工具的输出。

在 Python 窗口中运行工具

ArcGIS Pro 中运行 Python 的方法之一是 Python 窗口。 这是开始编写 Python 代码的好方法,因为它为您提供了一些语法提示。

  1. 在功能区上,单击分析选项卡,在地理处理部分中单击 Python 按钮右侧的下拉箭头,然后单击 Python 窗口

    在 ArcGIS Pro 中打开 Python 窗口

    单击 Python 按钮将直接打开 Python Notebook。 这是另一种编写 Python 代码的方法,但在本教程中,将使用 Python 窗口。 有关使用笔记本的信息,请参阅 ArcGIS Pro 中的笔记本入门教程。

    Python 窗口包含两个部分。 顶部被称为脚本,底部被称为提示。 您在提示部分键入代码,脚本部分将显示已运行的代码以及任何消息,例如打印结果或错误消息。

  2. Python 窗口的提示部分键入以下代码,然后按 Enter 键:

    import arcpy

    导入

    此代码行用于导入 ArcPy 包。 ArcPyPython 包,它具有 Python 中的大部分可用 ArcGIS Pro 功能,包括地理处理功能。

    注:

    由于在 ArcGIS Pro 中使用 Python 窗口,因此无需先导入 ArcPy 即可运行地理处理工具。 但是,最佳做法是始终在代码顶部使用 import arcpy,以确保相同的代码在 ArcGIS Pro 外部可以正常运行。

    您将使用的第一个工具是添加 XY 坐标工具。 您将打开要素类的属性表以查看运行该工具的结果。

  3. 内容窗格中,右键单击 ambulances 图层,然后单击属性表
  4. 组织 ArcGIS Pro 界面,轻松查看地图、ambulances 图层属性表和 Python 窗口。

    界面的组织方式的确是偏好问题,但通常情况下,地图和表位于顶部,Python 窗口位于下方。

  5. Python 窗口的提示部分键入以下代码,然后按 Enter 键:

    arcpy.management.AddXY("ambulances")

    输入代码以将 XY 字段添加到 ambulances 要素类。

    当按下 Enter 键时,将运行代码,并且 POINT_X 和 POINT_Y 字段将添加到 ambulances 要素类的属性表中。

    X 和 Y 坐标已添加到表中。

    运行代码行会运行添加 XY 坐标工具,与从其工具对话框运行该工具一样。 您现在运行的代码将显示在 Python 窗口的脚本部分中,运行该工具的结果显示在下方。 在这种情况下,该工具不会生成新的要素类,而是更新现有要素类的属性表。 该工具返回的结果是对当前地图中现有 ambulances 要素图层的引用。

    代码行 arcpy.management.AddXY("ambulances") 有多个不同部分。 首先是 ArcPy 模块 arcpy,它可以在 Python 中使用 ArcGIS Pro 的大部分功能,包括几乎所有的地理处理工具。 下一个元素 management添加 XY 坐标工具所在的数据管理工具箱的工具箱别名。 下一个元素是 AddXY,它是 ArcPy 函数的名称,相当于 ArcGIS Pro 中的添加 XY 坐标工具。

    各部分使用点分隔(在 Python 中称为点注记)不使用空格。 在 ArcGIS 中该工具的名称是添加 XY 坐标,而 ArcPy 中的函数名称是 AddXY,其中不含空格。 函数名称有时与工具名称相同,但某些函数名称是缩写版本,类似此内容。 Python 函数名称中不使用空格。 由于这是 ArcPy 函数,因此后跟括号 ()。 必须使用左括号和右括号。 括号内是函数参数 - 这些参数与使用工具对话框时的工具参数相同。

    对于添加 XY 坐标工具,参数仅包含单个输入要素类的名称。

    另提供了一种可以编写运行工具语法的方法。 您将看到以两种方式编写的代码示例,因此了解这两种方式将非常有用。

  6. Python 窗口的提示部分键入以下代码,然后按 Enter 键:

    arcpy.AddXY_management("ambulances")

    运行代码行将再次运行“添加 XY”工具。 由于先前结果已被覆盖,因此您看到的结果不会有任何差异。

    这两种注记可以互换使用:

    arcpy.<toolboxalias>.<toolname>
    arcpy.<toolname>_<toolboxalias>

    第二种注记使用下划线,而不是点。 这意味着 arcpy.<toolname>.<toolboxalias> 不正确,会产生错误。

  7. Python 窗口的提示部分键入以下代码,然后按 Enter 键:

    arcpy.AddXY.management("ambulances")

    由于无法使用此注记找到 AddXY 函数,因此将出错。

    语法错误

    Python 窗口有多个内置功能可以帮助您编写正确代码。

  8. 键入以下代码并在点处暂停:

    arcpy.

    在点后暂停时,会按字母顺序显示建议的长列表。 这些被称为代码自动完成提示。

    代码自动完成提示

    您可以滚动列表或继续输入字符。 当键入时,建议列表将相应更新。

  9. 继续键入:

    arcpy.man

    这将列表限制为 ArcPy 中以字母“man”开头的代码元素。

    代码自动完成提示仅限于 man。

  10. 将光标悬停在条目 management 上。

    随即显示一个带有工具箱全名的小弹出窗口。

    代码自动完成提示仅限于 man 和工具箱名称。

  11. 在列表中单击 management

    这将添加工具箱别名,后跟一个点:

    arcpy.management.

  12. 键入字母 a,将列表滚动到 AddXY,然后单击 AddXY() management

    单击 AddXY。

    这会添加工具名称,并自动添加一对括号:

    输入要素的提示

    将指针置于括号之间,将显示一个弹出窗口,其中包含地图上两个点要素类的名称。 代码行下方是一个弹出窗口,其中包含该工具的简要说明。 其中包括工具语法,即:

    management.AddXY(in_features)

    这与您在该工具帮助页面看到的语法相似。 可以在键入代码时轻松查看语法。 还对第一个(也是唯一的)工具参数进行了简要说明。

    代码行上方的弹出窗口中包含对第一个工具参数值的建议。 该工具的输入要素仅能包含点要素。 建议值包含打开地图中的所有点要素图层。 在本示例中,点要素图层是 ambulances 和 fire_stations。 数据图层 communities 不会出现,因为它是面要素图层。 这些代码自动完成提示可帮助您编写正确的代码,因为它们仅显示有意义的输入要素。

  13. 单击弹出窗口中的 fire_stations 条目。

    其他语法 GP

    这会将要素图层的名称添加到代码行中,并自动添加引号。

    arcpy.management.AddXY('fire_stations')

    提示:
    如果将指针从 Python 窗口移开,弹出窗口就会消失。 如需重新显示弹出窗口,首先将指针放在括号外的代码行中,然后再将指针放回括号内。

    代码行现已完成。

  14. Enter 键运行代码行。
  15. 内容窗格中,右键单击 fire_stations 图层,然后单击属性表

    POINT_X 和 POINT_Y 字段已添加到要素类中。

    消防站现在已有坐标。

  16. 关闭属性表。

接下来,您将使用代码自动完成提示来获取使用更复杂工具参数的地理处理工具的正确语法。

了解工具参数

“添加 XY 坐标”工具仅使用单个参数,这导致代码非常短。 大多数地理处理工具有多个参数,包括必需参数和可选参数。 您可以将“缓冲区”工具视为具有更多工具参数的工具示例。

您将首先在帮助页面上查看该工具的语法。

  1. 浏览到以下 URL:
  2. 向下滚动到参数部分,然后单击对话框选项卡。

    缓冲区工具帮助参数

    此表提供了工具参数的详细说明,包括它们的数据类型。 熟悉工具参数可以轻松在 Python 代码中使用该工具。

  3. 单击 Python 选项卡。

    Python 的缓冲区工具帮助参数

    这显示了 Python 中“缓冲区”工具的语法。 “缓冲区”工具位于“分析工具”工具箱中,因此代码以 arcpy.analysis 开头。 括号中是“缓冲区”工具的参数。 这些与工具对话框中的参数相同,顺序相同。 每个参数都有一个名称(例如 in_features),参数之间使用逗号分隔,后跟一个空格。 参数命名遵循 Python 中变量名称的约定:仅小写字母,单词之间使用下划线分隔以确保易读性。

    地理处理工具具有必需参数和可选参数。 必需参数位于可选参数之前。 在语法中,您可以通过使用大括号 { } 来标识可选参数。 通过阅读语法,您可以确定“缓冲区”工具具有三个必需参数,后跟五个可选参数。

    当工具参数为可选参数时,意味着有一个默认值。 如果您没有为可选参数指定值,则将使用默认值。

    您将首先仅使用必需参数运行“缓冲区”工具。

  4. ArcGIS ProPython 窗口中,在提示部分键入以下代码:

    arcpy.Buf

  5. 单击弹出列表中的 Buffer() analysis 条目。

    键入 arcpy.Buff,然后单击“Buffer() analysis”。

    您还可以使用键盘上的向上和向下箭头突出显示列表中的项目。 突出显示某个条目时,按 Tab 键以添加该项目。

    自动完成提示为 Buffer_analysis,但代码是使用以下语法添加的:

    arcpy.analysis.Buffer()

    回想一下,arcpy.analysis.Buffer()arcpy.Buffer_analysis() 是指同一个工具的不同方式。 两者皆正确。

    当指针位于括号内时,工具语法显示在下方,第一个参数的建议要素图层显示在上方。

    缓冲区语法弹出窗口

    “缓冲区”工具的第一个参数称为 in_features。 此参数在语法弹出窗口中以粗体显示。 该参数的说明如下所示。 完成工具参数后,此显示将更新。

  6. 在弹出窗口中,单击 fire_stations

    这会将要素图层的名称添加到代码行中,并自动添加引号。

    arcpy.analysis.Buffer('fire_stations')

  7. 接下来,键入一个逗号,后跟一个空格。

    arcpy.analysis.Buffer('fire_stations', )

    在语法提示中输出要素。

    在语法弹出窗口中,下一个参数 out_feature_class 现在以粗体显示。 没有为名称提供任何建议,因为这是一个输出。

  8. 在 out_feature_class 名称的引号内键入 'fire_buffer'

    现在,代码行为:

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer')

    编写要素类名称时可以使用单引号或双引号。 从建议的要素图层列表中进行选择时,自动完成提示偏好使用单引号,但您可以在单行代码中在两种引号样式之间切换,但是您需要始终使用相同的引号将每个字符串括起来。 例如,以下为正确示例:

    arcpy.analysis.Buffer('fire_stations', "fire_buffer")

    而以下内容不正确且会产生语法错误:

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer")

  9. 将最后一个单引号更改为双引号。

    突出显示的错误引号不匹配

    第二个工具参数以橙色突出显示,表示语法错误。 这很有帮助,因为您知道即使您尚未尝试运行此行代码,它仍会导致错误。

  10. 将双引号改回单引号。
  11. 接下来,键入一个逗号,后跟一个空格。

    缓冲区距离或字段语法提示

    第三个参数是用于创建缓冲区的距离。 这可以是您输入的值或输入要素属性表中的字段。 代码自动完成建议显示了 fire_stations 要素图层的字段。 但是,在这种情况下,您将键入一个数值。

  12. 键入 "1000 meters",包括引号。

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer', "1000 meters")

    距离是数值,但还需要一个线性单位。 因此,该值是一个字符串,由一个数字、一个空格和一个线性单位组成。 虽然 Python 在大多数情况下是区分大小写的,但单位的大小写在这里并不重要。 因此,您可以使用“1000 meters”、“1000 METERS”或“1000 Meters”,所有这些都被认为是正确的。 和以前一样,您可以使用一对单引号或双引号,两者皆正确。

    这样,必需参数已完成。 工具即可运行。 您可以继续输入可选参数的值,但这不是工具运行所必需的。

  13. 在代码行的末尾,按 Enter 键运行该工具。

    工具运行,结果将打印在 Python 窗口的副本中,并将生成的要素类添加到当前地图中。

    输出消防站缓冲区

    Python 窗口中的结果为 1000 米缓冲区。

    在脚本中,运行该工具的代码行下方是工具的运行结果。 在这种情况下,“缓冲区”工具的结果是一个新的要素类。 回想一下,在“添加 XY 坐标”工具的示例中,结果是对现有要素图层的引用,而不是新要素类。

    打印的结果显示了新建要素类的位置:

    <Result 'C:\\Lessons\\PythonGP\\Toronto.gdb\\fire_buffer'>

    指定输出要素类时,仅提供要素类的名称。 为什么要素类最终会显示在文件地理数据库 Toronto.gdb 中? 因为这是工程的当前工作区。 Python 窗口中的代码遵循应用程序的环境设置。

    注:
    路径中使用两个反斜杠 (\\) 而不是单个反斜杠 (\)。 Python 中的单个反斜杠用作转义字符,可能会产生意想不到的后果。 除了两个反斜杠,您还可以在字符串之前使用字母 r 表示 raw(即 r"C:\Lessons\PythonGP\Toronto.gdb")或使用单个正斜杠(即 "C:/Lessons/PythonGP/Toronto.gdb")。 所有三种注记均被视为正确注记,可以互换使用。

    您将仅使用三个必需参数运行“缓冲区”工具。 接下来,您将使用可选参数之一再次运行它。

  14. 再次查看“缓冲区”工具的语法:

    arcpy.analysis.Buffer(in_features, out_feature_class, buffer_distance_or_field, {line_side}, {line_end_type}, {dissolve_option}, {dissolve_field}, {method})

    名为 dissolve_option 的参数可以指定如何处理重叠的缓冲区面。 此参数的默认值是 NONE,这意味着将维护所有单独缓冲区,不管是否存在任何重叠。 您将此值设置为 ALL,这意味着所有输出要素都将被融合,从而消除所有重叠。

    您将使用快捷方式来检索上一行代码,而无需重新键入之前的代码。

  15. 将指针放在提示中,按键盘上的向上箭头。

    这将检索用于运行“缓冲区”工具的上一行代码。 这适用于任何先前的代码行。 您可以使用向上向下箭头滚动浏览多行代码。 找到感兴趣的代码行后,可以在提示中进行更改,然后按 Enter 键再次运行代码。

  16. 将指针放在第三个参数的末尾,最后一个引号和右括号之间。
  17. 键入一个逗号,后跟一个空格。

    线侧可选参数帮助

    这显示了 line_side 参数的代码自动完成提示。 此参数的默认值为 Full,无需更改。 您可以跳过该参数,而不是指定此值。 您可以通过指定一个空字符串来跳过该参数。

  18. 键入双引号。

    将自动添加第二个引号。 现在的代码如下:

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer', "1000 meters", "")

    line_side 参数的值设置为 "",此为空字符串。 这意味着将使用此参数的默认值。

    下一个参数是 line_end_type,也可以跳过。

  19. 将指针放在第四个参数的末尾,最后一个引号和右括号之间。
  20. 键入一个逗号,后跟一个空格,然后是一个双引号。

    将自动添加第二个引号。 现在的代码如下:

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer', "1000 meters", "", "")

    现在您可以指定 dissolve_option 参数的值。

  21. 键入一个逗号,后跟一个空格,然后是一个引号。
  22. 从显示的选项列表中,选择将所有输出要素融合为单个要素

    融合所有输出。

    这将使用值 ALL 作为字符串填充参数。 请注意自动完成提示提供更长描述的方式,但代码显示了 'ALL'。 这是因为参数关键字是 ALL,而这是您将在工具文档中看到的内容。 较长的描述是关键字标注,与您在工具对话框中看到的此参数的选项相匹配。 手动输入代码时,您需要将参数关键字输入为 Python 字符串,例如 'ALL'"ALL"

    现在的代码如下:

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer_diss', "1000 meters", "", "", 'ALL')

    最后,在这种情况下,更改输出要素类的名称会很有帮助,以便将其与未融合的先前版本区分开来。

  23. 将输出要素类的名称从 'fire_buffer' 更改为 'fire_buffer_diss'

    包含溶解选项的缓冲区已为运行准备就绪

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer_diss', "1000 meters", "", "", 'ALL')

    工具现已为运行准备就绪。

  24. Enter 键运行工具。

    Python 窗口中的结果

    生成的要素类将添加到活动地图中,并在代码行下方打印输出要素类的名称和路径。 缓冲区已融合,所有重叠均已移除。

    您可能想了解必须跳过可选参数的原因。 原因是在工具的语法中,参数具有预定义的顺序。 dissolve_option 参数是该顺序中的第六个参数。 当参数没有通过名称显式引用时,需要保留此顺序。 您将看到在未保留此顺序时将发生什么。

  25. 将指针放在提示中,按键盘上的向上箭头以检索上一行代码。
  26. 通过移除两个跳过的参数来修改代码行。 代码应如下所示:

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer_diss', "1000 meters", 'ALL')

  27. Enter 键运行代码。

    这会导致错误:

    值不是完整错误消息的成员。

    这意味着 ALL 将被用作第四个参数的值,即 line_side。 此参数唯一有效的值是 Full,所以在此处使用 ALL 会报错。

    使用空字符串 ("") 跳过可选参数有多种替代方法。 您也可以使用数字符号 ("#") 或值 None。 因此,以下几行都是正确的,可以互换使用:

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer_diss', "1000 meters", "", "", 'ALL')

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer_diss', "1000 meters", "#", "#", 'ALL')

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer_diss', "1000 meters", None, None, 'ALL')

    数字符号必须使用引号括起来,即 "#",而不是 #。 不带引号的数字符号用于 Python 中的注释,因此不能在此处使用。

    另一方面,None 的值在使用时不带引号。 None 为关键字,是它自己在 Python 中的数据类型。 虽然这与空字符串不同,但它在此处具有相同效果。 这可能会导致混乱,因为某些工具参数将 "NONE" 作为其可能值之一。 None 的值用于跳过可选参数,实际上意味着使用默认值。 "NONE" 的值用于使用字符串将参数值设置为该特定值。

您已经了解了如何使用自动完成提示来获得正确的语法以在 Python 窗口中运行地理处理工具。 现在您将看到如何按名称指定多个参数以及如何向 Python 窗口添加多行输入。

按名称指定工具参数

您可以通过参数名称指定参数,而不跳过可选参数(即使用空字符串、数字符号或 None 保留其默认值)。

  1. 将指针放在提示中,按键盘上的向上箭头。
  2. 修改这行代码如下:

    arcpy.analysis.Buffer('fire_stations', 'fire_buffer_diss', "1000 meters", dissolve_option='ALL')

    为 dissolve_option 参数命名。

    dissolve_option 参数设置为 'ALL'

  3. Enter 键运行代码。

    该工具运行正常,未发生错误。

    您已经看到了几种使用可选参数的解决方案,这些可选参数需要一个不同于默认值的值:

    • 跳过可以通过使用空字符串 ("")、数字符号 ("#") 或 None 关键字保留为默认值的可选参数,直到找到感兴趣的可选参数。
    • 通过名称引用感兴趣的可选参数,忽略所有其他可以保留为默认值的可选参数。

    所有这些解决方案都是正确的,选择使用哪个选项仅为偏好问题。 您可以坚持一种特定的样式,但了解其他样式是很好的做法,因为可以在其他人编写的代码中看到所有这些样式。

    通过名称引用工具参数可用于可选参数,但也可以对所有参数应用相同的方法,例如:

    arcpy.analysis.Buffer(in_features='fire_stations', out_feature_class='fire_buffer_diss', buffer_distance_or_field="1000 meters", dissolve_option='ALL')

    按照惯例,当通过名称引用工具参数时,= 运算符周围不使用空格,尽管空格的使用对代码的运行没有影响。 另外,请注意,命名一个参数后,就必须命名它后面的所有参数。

    请注意,所有这些名称是如何完全按照工具的语法帮助中所写的方式引用参数名称的,这是其运行的必要条件。

    虽然这会明显增加代码长度,但由于在代码内部对参数进行了解释,因此可以更轻松地查看和理解代码。 对于参数较少的相对简单的工具,这些解释可能没有必要。 但是当您查看具有许多参数的更复杂工具的现有代码时,通过这些解释,您可以更容易地理解代码,而无需查找语法。

    使用参数名称的一个缺点是代码行可能很长,甚至超过 Python 代码的建议最大长度(79 个字符)。 解决方案是将代码行拆分为多行。

    arcpy.analysis.Buffer(in_features='fire_stations',
                          out_feature_class='fire_buffer_diss',
                          buffer_distance_or_field="1000 meters",
                          dissolve_option='ALL')

    为了便于阅读,会将代码行分成多行,但它仍然作为一行代码运行。 这种样式使用所谓的隐式续行。 Python 要求左括号后跟右括号。 如果右括号未显示在第一行中,接下来的几行将被视为同一行代码的一部分,直到出现右括号为止。 额外的空白区用于对齐目的,不被视为缩进。

    接下来,您将在 Python 窗口中创建这些多行。

  4. 将以下代码添加到 Python 窗口(但不要按 Enter 键)。

    arcpy.analysis.Buffer(in_features='fire_stations', out_feature_class='fire_buffer_diss', buffer_distance_or_field="1000 meters", dissolve_option='ALL')

    一行长代码

    下一步是将代码分成多行。 通常情况下,您通过按 Enter 键来执行此操作。 但是,在 Python 窗口中,这会导致运行代码行。 要在不运行代码的情况下添加一行,需要改为按 Shift+Enter 键。

  5. 将指针放在第一个参数 in_features='fire_stations', 后面的逗号后,然后按 Shift+Enter 键。
  6. 在第二个参数的名称前添加空格,使其与第一个参数对齐。

    已添加第一行和间距的长代码行

  7. 将指针放在第二个参数后面的逗号后,然后按 Shift+Enter 键。
  8. 将指针放在第三个参数后面的逗号后,然后按 Shift+Enter 键。

    现在每个参数都显示在一个新行上,但是由于它们都在括号内,因此 Python 认为此块为一行代码。

    不同行上的所有参数

    对齐工具参数可提高易读性。

  9. 按两次 Enter 键以运行该工具。

    不同 Python 编辑器处理隐式续行的方式略有不同。 例如,在编辑器中编写脚本(如 IDLE、PyCharm)时,无需手动输入第一组空格;即可自动执行多行对齐。

    通过这种方式将参数分成多行似乎是为了提高易读性而进行的额外工作。 在 Python 窗口中,这种易读性增益可能不明显,但是当您在脚本编辑器中编写较长的脚本时,易读性可能会得到显著提高。 了解隐式续行也很有帮助,因为您会看到它的使用示例。

设置工作空间

至此的示例中使用了 Toronto.gdb 地理数据库作为工作空间。 工作空间为您将在代码中使用的任何数据集提供了默认位置,包括地理处理工具的输入和输出数据集。 使用 Python 窗口时,工作空间由 ArcGIS Pro 的环境设置控制。 可以在 Python 窗口中确认当前工作空间。

  1. 在提示部分中键入以下代码,然后按 Enter 键:

    print(arcpy.env.workspace)

    这将返回以下路径:

    C:\\Lessons\\PythonGP\\Toronto.gdb

    打印当前环境。

    如需更改工作区,提供了多个选项可供选择。 首先,可以更改 ArcGIS Pro 工程的工作空间。 这在使用 Python 窗口时非常适用,但当在 ArcGIS Pro 外部的 Python 编辑器中使用相同的 Python 代码(如 IDLE、PyCharm)时,此操作不起作用。 其次,您可以使用任何输入和输出的完整路径作为工具参数。 虽然此操作可行,但这可能会导致代码中重复内容增加且路径过长。 这会降低代码的可读性和可靠性。 第三,可以使用 Python 代码设置工作空间,这是最佳做法。

    您将添加一行代码来设置工作空间。

  2. 在提示部分中键入以下代码:

    arcpy.env.workspace =

    接下来,您需要将工作空间作为 Python 字符串提供。 您可以将其键入,但也可以从目录窗格中拖入路径。

  3. 单击目录窗格中的 Results.gdb 并将其拖到 Python 提示中。

    将结果地理数据库拖动到提示中,以获取其路径。

    路径将添加到提示中。

    路径将添加到提示中。

    除了工作空间之外,您还可以将要素类和其他数据元素拖到 Python 窗口内的代码中。 能够拖动这些元素非常便于操作,因为结果是具有正确格式的完整路径。 这样可以节省时间并避免拼写错误。

  4. Enter 键运行代码行。

    这将设置工作空间并覆盖应用程序级别的工作空间。 这意味着从此时起在 Python 窗口中运行的任何代码都将使用此工作空间。 它不会更改环境下设置的工作空间,因此从其工具对话框运行的任何工具仍将使用以前的工作空间。

    接下来,您将再次运行“缓冲区”工具以查看更改工作空间的效果。

  5. 将指针放在提示中,按键盘上的向上箭头以检索缓冲区工具的最后一次运行。

    设置工作空间并再次运行“缓冲区”。

  6. 将指针放在代码行的末尾,按两次 Enter 键。
  7. 展开 Results.gdb

    新要素类将添加到此地理数据库中。

    Results 地理数据库中的新要素类

    请注意,输入要素类是 fire_stations。 此要素类不在当前工作空间 (Results.gdb) 中。 但是,fire_stations 是当前地图中的要素图层。 在 Python 窗口中运行地理处理工具时,可以使用当前地图中的要素图层以及磁盘上的要素类作为输入。 这意味着了解正在使用的工作空间至关重要。

  8. 在提示部分中键入以下代码,然后按 Enter 键:

    arcpy.management.AddXY("fountains")

    这会导致错误:

    ERROR 000732: Input Features: Dataset fountains does not exist or is not supported
    Failed to execute (AddXY).

    要素类 fountains 位于 Toronto 地理数据库中,该数据库不再是 Python 窗口的工作空间。 要素类尚未添加到活动地图中,因此无法找到。

    要使用不在工作空间中的要素类,需要先将其添加到活动地图或使用完整路径。 您将添加完整路径。

  9. 向上箭头检索上一行代码。
  10. 删除要素类名称 "fountains"

    代码现在应该如下所示:

    arcpy.management.AddXY()

  11. 目录窗格中,展开 Toronto.gdb 并将 fountains 要素类拖到 Python 提示符中。

    将 fountains 要素类拖动到工具上。

    fountains 要素类的完整路径将添加到工具参数中。

    路径被添加到工具中。

  12. 将指针放在代码行的末尾,按 Enter 键。

    “添加 XY 坐标”工具运行时不会出现错误。 使用完整路径会覆盖仅针对这一行代码的工作空间。

    在大多数脚本中,您首先会从在脚本顶部设置工作空间。 还有一种常用的附加设置。 ArcGIS Pro 工程的选项之一是允许地理处理覆盖现有数据集。 这样可以简化多次运行相同工具的过程。 在 Python 中,您可以通过运行以下代码来设置此属性:

    arcpy.env.overwriteOutput = True

    使用地理处理工具的典型脚本通常这样开始:

    import arcpy
    arcpy.env.workspace = <path to workspace as a string>
    arcpy.env.overwriteOutput = True

    <path to workspace as a string> 将替换为工作空间的实际路径。

    使用 Python 窗口时,导入和环境由 ArcGIS Pro 控制,这意味着不需要这些行。 但是,Python 编辑器中的独立脚本(如 IDLE 和 PyCharm)需要使用导入和设置环境,因此最好包含它们。

从历史记录中导出代码

最后,还有另一种方法可以帮助您编写代码以运行地理处理工具。 您可以从其工具对话框运行工具,并将该运行的代码从“历史记录”窗格导出到 Python 窗口。

  1. 目录窗格中,浏览到 Toronto.gdb 地理数据库。
  2. greenspaceetobicoke 要素类添加到活动地图。
  3. 单击在功能区中的分析,然后单击地理处理组中的工具

    单击分析,然后单击工具。

  4. 地理处理窗格的搜索框中,输入 裁剪,并按 Enter 键。
  5. 双击裁剪工具。

    搜索并运行“裁剪”工具。

  6. 对于输入要素,选择 geenspace
  7. 对于裁剪要素,选择 etobicoke
  8. 对于输出要素或数据集,浏览至 Results.gdb 并将输出要素类命名为 greenspace_clip

    “裁剪”工具以为运行准备就绪。

  9. 单击运行

    “裁剪”工具随即运行并将结果要素类添加到地图中。

  10. 在功能区上的地理处理组中,单击历史记录

    打开历史记录

    将出现地理处理历史窗格。

    您也可以单击“裁剪”工具窗口底部的打开历史记录来打开历史记录。

  11. 地理处理历史记录列表中,右键单击裁剪,然后单击发送到 Python 窗口。

    运行“裁剪”工具的 Python 代码将被发送到 Python 窗口。 这段代码被称为代码片段,即一小段代码。

    裁剪从“地理处理历史记录”发送到 Python 窗口的 Python 代码。

    注:
    其他选项是复制 Python 命令另存为 Python 脚本。 生成的代码是相同的,但是当您使用 ArcGIS Pro 外部的 Python 编辑器或使用 Notebook 时,这些选项将非常有用。

    第一个和第二个参数是要素数据图层的名称,不包含路径。 第三个参数是输出要素的名称,并且包含完整路径。 由于先前使用 arcpy.env.workspace 设置了工作空间,因此不需要此路径。 最后一个参数(拓扑容差,未显示在工具对话框中)保留为默认值 None,因此可以省略。 因此可以缩短代码。

  12. 将代码简化为:

    arcpy.analysis.Clip("greenspace", "etobicoke", "greenspace_clip")

    历史记录中代码的简化版本

  13. 运行代码以验证它是否有效。

    由于之前已使用相同设置运行了“裁剪”工具,它可能看起来没有变化。 要此进行测试,可以从活动地图中移除 greenspace_clip 图层,并再次运行该工具。 这次您会注意到生成的要素类已添加到地图中。

    现在您已经了解从工具对话框运行工具后从地理处理历史记录中复制 Python 代码的方式。 这对于学习工具的语法非常有用,但代码可能需要进行一些清理以遵循最佳做法,例如省略可以保留为默认值的参数。

查看

  • Python 代码可用于运行地理处理工具。 深入了解地理处理工具可以简化此代码的编写过程。
  • Python 窗口提供了多种功能来帮助编写代码,包括各种代码自动完成提示和其他语法帮助。
  • 工具参数由必需参数和可选参数组成。 保留其默认值的可选参数可以从代码中省略。 当需要使用可选参数时,利用几个选项可以在必要时跳过其他可选参数。
  • 从对话框运行工具的结果可以导出为 Python 代码,并作为使用 Python 运行工具的起点。

在本教程中,您学习了如何在 Python 窗口中运行地理处理工具,以及如何获得 Python 语法帮助。 您已了解工具参数、必需和可选参数以及如何指定参数。 您已经了解了数据路径和地理处理环境在 Python 窗口中的行为方式。 最后,您已学习如何将已从地理处理历史运行的地理处理工具的代码复制到 Python 窗口。

您也可能对由 Esri Press 出版的 Paul A.Zandbergen 博士的适用于 ArcGIS ProPython 脚本适用于 ArcGIS Pro 的高级 Python 脚本感兴趣。