ArcGIS Pro 中的 Notebooks 入门

设置工程并查看数据集

在开始编写 Python 代码前,您需要下载数据集、创建新工程,并查看要使用的数据集。

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

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

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

  2. 启动 ArcGIS Pro。 如果收到系统提示,请使用您获得许可的 ArcGIS 组织帐户登录。
    注:

    如果您没有 ArcGIS Pro 的访问权限或者 ArcGIS 组织帐户,请参阅软件访问权限选项

  3. 单击打开其他工程

    打开其他工程

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

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

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

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

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

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

    这些面表示多伦多市内的多个社区。

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

    这些要素类分别表示多伦多市内消防站和绿地的位置。 您将使用这些要素类通过 Python 运行各种地理处理工具。

  11. NotebookStart 文件夹也包含名为 Notebooks Getting Started.gdb 的地理数据库,这是工程的默认地理数据库,目前为空。

创建 notebook 并运行 Python 代码

在此部分,您将在 ArcGIS Pro 中创建 notebook,然后使用它运行一些 Python 代码。

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

    在 ArcGIS Pro 中打开一个新的 Python notebook。

    单击 Python 按钮也可打开新的 notebook,但在此下拉菜单中可以看到有 Python NotebookPython 窗口两个选项可供选择。 Python 窗口是在 ArcGIS Pro 中运行 Python 代码的另一种方式。

    可能需要花费一些时间来显示新 Notebook,等待期间屏幕上会显示初始化内核。 这表示 ArcGIS Pro 已准备好在 Notebook 中运行代码。 内核是在后台运行的软件,将运行您在 Notebook 中输入的 Python 代码。

    笔记本在打开后将作为新视图在 ArcGIS Pro 的主窗口中显示。

    新 Notebook 将以 .ipnyb 文件格式存储在工程主文件夹中。 新文件夹也会显示在目录窗格的 Notebooks 文件夹下。

  2. 单击 Notebook 中的空单元格。

    单击新 Notebook 时,它将显示在 ArcGIS Pro 中,且单元格会变为绿色。

    轮廓变为绿色。

  3. 键入以下代码行:

    print("Hello Notebook!")

    添加代码以输出 Hello Notebook!

    此代码将调用以括号括起单个输入参数的输出函数。 此参数为字符串,因为它括在引号内。 字符串是可在 Python 中使用的一种重要且有用的数据类型。

  4. 在单元格上方的工具栏中,单击运行按钮。

    单击“运行”按钮。

    将运行单元格中的代码,并将结果输出到单元格下方。 输出函数运行字符串值 "Hello Notebook!" 并将其输出。 不会输出引号,因为引号不是字符串的一部分,而是仅作为字符串的标识。 数字 1 会显示在单元格左侧的括号内。 随即在单元格下方添加一个新的空单元格。

    Hello Notebook 将显示在单元格下方,且会添加一个新的单元格。

    您也可以通过按下 Ctrl+Enter 键来运行当前选定的单元格。

    可通过在每一行后按 Enter 键,在单个单元格内添加多行代码。 如果您习惯于在 Python 窗口或 Python 编辑器的交互式窗口中运行代码,这可能会与您的习惯不符,因为在上述两个窗口中按 Enter 键的结果是运行代码行。

  5. Hello Notebook! 代码下方的单元格中,输入下列代码行:

    a = 5
    b = 7
    c = 9
    print(a * b * c)

    此代码创建三个变量 abc,并分配变量值,使其等于数值 579。 最后一行输出各个变量值相乘的结果。

    此单元格设置了三个变量及求解三个变量乘积的行

  6. Ctrl+Enter

    第二次运行单元格后的结果

    运行单元格后,值 315 显示在其下方。 单元格左侧括号内显示的数字 2 表示这是第二次运行单元格。

  7. 在 notebook 的顶部,单击插入菜单,然后单击在下方插入单元格

    在下方插入单元格

    在当前选定的单元格下方插入一个新单元格。

  8. 在新单元格中,输入以下代码行:

    a * b * c

    依您看,运行此单元格将产生什么样的结果?

  9. 运行单元格并观察结果。

    结果是否与您的预期相符?

    变量 abc 的值一经设定会存储在内存中,因此可以用于其他单元格。

    a 乘以 b 乘以 c

    运行单元格时,将输出存储在 abc 中的值的乘积。

    不需要输出语句,因为在 Notebook(Python 窗口)和 Python 解释程序中,Python 可对简单表达式进行求值并输出其值。

  10. 如果您通过按 Ctrl+Enter 键运行单元格,将在其下方插入新单元格。

    如果您是通过按“运行”按钮运行单元格的,其下方应该已存在一个新单元格。

  11. 在新单元格中,输入以下代码行:
    a * t

    依您看,运行此单元格将产生什么样的结果?

  12. 运行单元格并观察结果。

    结果是否与您的预期相符?

    变量已设置为数值 5,但新变量 t 尚未设置。 这会导致出错。 在 Python 中,必须先为变量分配值,才能使用变量。

    错误指出:尚未定义名称 t。

  13. 按如下所示编辑单元格中的代码:

    a * "t"

    依您看,运行此单元格将产生什么样的结果?

  14. 运行单元格并观察结果。

    结果是否与您的预期相符?

    多次运行字符串 t 的结果

    t 放在引号内,表示在 Python 中将其标识为字符串。 Python 以字符串 t 对表达式求解五次,得到的新字符串为 'ttttt'

  15. 添加新单元格并输入下列代码:

    t = 10
    a * t

    依您看,运行此单元格将产生什么样的结果?

  16. 运行单元格。

    结果是否与您的预期相符?

    设置 t 并将 a 与 t 相乘

    因为已在单元格第一行中将变量 t 定义为等于数值 10,因此 Python 能够将其与存储在变量 a 中的值相乘。

您已在 ArcGIS Pro 中打开一个新 notebook,添加并运行一些基本 Python 代码。 接下来,您将使用 notebook 函数管理单元格中的代码。

管理单元格中的代码。

Notebooks 中的代码将在单元格中运行。 单元格运行后,其顺序通过单元格旁的数字指示。 Notebooks 提供了用于管理单元格的工具。 现在,您可以浏览使用 Python 在 notebook 中进行工作的各个方面。

  1. 在下一个空单元格(如果需要,添加一个新的空单元格),输入下列代码行并运行单元格。

    mylist = [1, 2, 3, 4, 5]

    发生了什么?

    此代码定义了新变量并设置了变量值,但未输出任何结果。

    已定义变量 mylist。

    变量 mylist 是一个列表,因为它由方括号表示。 列表是 Python 中的一种重要数据类型,其中包含一系列元素。 这里的元素为数值,但是列表也可以包含其他数据类型。 列表中的元素以逗号分隔。

  2. 在下一个空单元格中,输入下列代码行并运行单元格。

    mylist[-1]

    发生了什么?

    变量 mylist 位于索引位置 -1

    系统会对列表中的元素建立索引,索引编号从零开始。 您可以使用元素的索引编号获得特定索引。 索引编号 -1 表示第一个元素从列表的末尾(即,最后一个元素)开始。 这会返回数值 5

    可以看到,运行单元格后,单元格输入和输出提示符显示一个数字。 此数字从 1 开始,并随着单元格的增加而增加。 您每运行一次单元格,此数字增加一次,包括再次运行之前已经运行过的单元格。 这些数字旨在帮助您跟踪单元格的运行顺序。

  3. 通过添加更多元素来更改定义 mylist 变量的单元格中的代码,但不要运行单元格。

    mylist = [1, 2, 3, 4, 5, 6, 7, 8]

    重新定义 mylist 的代码尚未运行。

  4. 单击此单元格下方的单元格,使用代码 mylist[-1] 并单击运行按钮。

    结果是否与您的预期相符?

    再次运行返回最后一个项目的代码。

    结果为数值 5。 为什么不是数值 8

    Notebook 中的代码逐个单元格输入,上一次使用的变量会存储在内存中。

    除非您使用重新定义 mylist 变量的代码来运行单元格,否则 mylist 值仍然是存储在内存中的值 [1, 2, 3, 4, 5],该列表中位置 -1 处的值仍然为 5

  5. 单击使用代码 mylist = [1, 2, 3, 4, 5, 6, 7, 8] 的单元格,并运行它。
  6. 单击使用代码 mylist[-1] 的单元格,并运行它。

    现在,列表最后一个位置上的值为 8

    更新列表变量并输出最后一个索引位置。

    运行各个单元格的替代方法是:选择多个单元格并一起运行它们,或者在 notebook 中运行所有单元格,方法是单击单元格菜单,然后单击运行全部

    建议将属于同一单元格的代码行组织在一起。 例如,将前两个单元格合并成一个单元格会非常有意义。 您可以手动将代码从一个单元格复制到另一个单元格,然而,也可以合并单元格。

  7. 单击定义 mylist 变量的单元格。

    单元格中包含 mylist = [1, 2, 3, 4, 5, 6, 7, 8]

  8. 单击编辑菜单,然后单击合并下方单元格

    合并下方单元格

    结果是包含合并代码行的单个单元格。 结果下方的单元格已被移除。 将在两个合并的单元格的代码行之间添加一个空行,但是,如果需要,您可以编辑单元格来将其移除。

  9. 运行合并的单元格。

    运行合并的单元格。

    编辑菜单提供了多个在 notebook 中管理单元格的其他有用方法。 您可以复制和粘贴、删除、分割和合并单元格,以及相对于其他单元格上下移动所选单元格。

    其他工具提供在查看插入单元格菜单选项下。

    一些最常用的工具也会以按钮形式提供在 notebook 工具栏中。

    Notebook 工具栏

    其中包括:

    • 在下方插入单元格
    • 剪切选定单元格
    • 复制选定单元格
    • 将单元格粘贴到下方
    • 上移所选单元格
    • 下移所选单元格

    可在命令选项板上找到更多工具。

  10. 单击命令选项板按钮。

    单击命令选项板按钮。

    将显示命令列表。

    可通过单击命令列表运行命令。 命令将应用至笔记本中的所选单元格或全部单元格,具体取决于运行的命令。

  11. 命令选项板中,单击清除所有单元格的输出

    单击清除所有单元格的输出。

    所有代码保持不变,但所有输出均会被移除。 输入和输出提示符为空白,因为尚未运行任何单元格。 运行单元格时,提示符从 1 开始。

    命令选项板还会显示许多任务的快捷键。

  12. 单击命令选项板按钮并向下滚动到在下方插入单元格

    命令选项板:在下方插入单元格

    此命令的键盘快捷键列在其右侧。 Notebook 单元格处于命令模式下时,快捷键为字母 B

  13. 单击选项板外部且属于 notebook 内部的某一位置可隐藏命令选项板
  14. 单击第二个单元格左侧的空白处,使其变为蓝色。

    单击单元格左侧以在命令模式下选择。

    请确保不要单击代码部分的内部,这会单元格变为绿色。

    单元格边框为蓝色,表示单元格处于命令模式下。

  15. 按下键盘上的 B 键。

    将在所选单元格下添加一个新单元格。

    将在所选单元格下插入一个新单元格。 如果单元格为绿色,则需要将字母 b 添加到单元格中的代码。

    这些快捷键不区分大小写,因此添加 b 和 B 是一样的。

    无需记忆这些命令,但是有经验的程序员会记忆其中一些命令并运用在工作中以提高工作速度。 对于最基本的任务,Notebook 中的按钮和菜单选项非常好用。

    如果要查找适用于特定任务的命令,可以使用命令选项板顶部的搜索栏搜索它。

  16. 打开命令选项板,然后在搜索框中输入 run

    搜索运行命令选项板。

    这会过滤列表中名称包含 run 的工具。 一些命令有快捷键。 例如,运行选定单元格的快捷键为 Ctrl +Enter

  17. 单击选项板外部且属于 notebook 内部的某一位置可隐藏命令选项板
  18. 关闭 notebook。

    关闭 notebook。

您已经了解如何在 notebook 单元格中输入和编辑 Python 代码,以及如何与 notebook 进行交互以运行和管理代码。 接下来,将使用 notebook 在 ArcGIS Pro 中运行地理处理工具。

在 notebook 中运行地理处理工具

您已对在 notebook 中输入代码进行了一些练习,现在可以使用一些地理处理工具。 将打开一个新的 notebook。

  1. 单击分析选项卡,然后在地理处理组中,单击 Python
    单击分析,然后单击 Python。

    新 notebook 随即打开。

  2. 目录窗格中,展开 Notebooks 部分。
  3. 右键单击新笔记本 New Notebook (1).ipynb,然后单击重命名

    重命名 notebook。

  4. 输入 geoprocessing_demo,然后按 Enter 键。

    新 notebook 已重命名。 在目录窗格中,可以看到名称后自动添加了 .ipynb 文件扩展名。 Notebook 选项卡现在显示 geoprocessing_demo

    对于接下来的步骤,并排显示地图和笔记本会非常有用。

  5. geoprocessing_demo notebook 选项卡拖动至下方显示的停靠目标。

    将 notebook 选项卡停靠在地图下方。

    Notebook 已停靠在地图下方。 现在,在 notebook 中使用 Python 来处理地图中的要素时,可以查看代码的结果。

  6. 在空单元格中,输入下列代码行并运行单元格:

    import arcpy

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

    由于是在 ArcGIS Pro 中使用此 notebook,因此,如果您未导入 ArcPy,使用地理处理工具的代码不会产生错误。 但是,建议您始终在地理处理代码的顶部包括 import arcpy,以便其在 ArcGIS Pro 以外可正常运行。

  7. 在同一单元格中,添加新行并输入以下代码:

    arcpy.GetCount_management("fire_stations")

    此代码使用 ArcPy 运行获取计数工具,以确定 fire_stations 要素类中的要素数。

  8. 运行单元格。

    “获取计数”工具在 notebook 中运行

    GetCountArcPy 的功能,可运行数据管理工具工具箱中的获取计数地理处理工具。

    结果显示在代码单元格下方。 要素类中有 84 行(要素)。 结果与您使用 ArcGIS Pro 中的工具对话框运行工具时看到的消息非常相似。Notebooks 集成在 ArcGIS Pro 的地理处理框架中。 这表示在 notebook 中运行某一工具与使用工具对话框运行此工具类似。 在 notebook 中运行的任何工具也同时会显示在历史窗格中。

  9. 在功能区上,单击分析选项卡。 在地理处理组中,单击历史记录

    工具会显示在地理处理历史中。

    工具会显示在地理处理历史中。

  10. 关闭历史窗格。
  11. arcpy.GetCount 代码更改为如下所示:

    arcpy.GetCount_management("ambulances")

  12. 运行单元格。

    此代码失败,并显示消息。 在消息的末尾,显示以下信息:

    ExecuteError: Failed to execute. Parameters are not valid.
    ERROR 000732: Input Rows: Dataset ambulances does not exist or is not supported
    Failed to execute (GetCount).

    代码为什么失败,用于获取消防站计数的代码在什么情况下正常运行?

    要素类 fire_stations 是活动地图中的图层。 在 notebook 中,当使用地理处理工具的图形用户界面以交互方式运行地理处理工具时,您可以通过活动地图中的图层名称参考数据集。

    要素类 ambulances 未显示在活动地图的图层中,它也不是工程的默认地理数据库中的要素类。 对于不在活动地图或默认地理数据库中的要素类,您可以通过指定指向此要素类的完整路径来参考它。

    接下来,将查找指向 ambulances 要素类的路径。

  13. 目录窗格中,展开数据库部分,然后展开 Toronto.gdb
  14. 右键单击 ambulances,然后单击复制路径

    复制路径

    即会复制 ambulances 要素类的文件路径。 该路径还包含要素类名称。

    此示例中的路径如下:

    C:\Tutorials\NotebookStart\Toronto.gdb\ambulances

    您的计算机上的路径可能与此不同,具体取决于您解压缩此数据 .zip 文件的位置以及方式。 例如,您可能未将数据放入 C 盘上的文件夹或名称为 Tutorials 的文件夹中。 在下一步中,您应该使用您的计算机上的路径。

  15. 单击笔记本单元格并高亮显示 ambulances。 粘贴复制的路径。
    arcpy.GetCount_management("C:\Tutorials\NotebookStart\Toronto.gdb\ambulances")

    差不多做好运行准备了。 路径看起来没问题,但并非如此。 还缺少一些内容。

  16. 单击恰好位于左括号之后、第一个引号之前的位置,然后输入字母 r
    arcpy.GetCount_management(r"C:\Tutorials\NotebookStart\Toronto.gdb\ambulances")

    您需要添加字母 r,告诉 Python 此路径是原始字符串。 Windows 计算机使用反斜线 (\) 作为路径分隔符。 在 Python 中,反斜线字符位于字符串中其他字符旁边时将作为转义符,对制表符、换行符或其他特殊字符进行编码。 这就意味着,当路径中 \NotebookStart 旁边出现 \N 时,Python 读取字符串时会认为其中包含换行符。 在字符串之前放置字母 r 旨在告诉 Python 忽略转义符。

  17. 运行单元格。

    获取计数工具运行并返回消息,指示要素类中有 48 个要素。

    您也可以在 Python 代码中使用正斜线 (/) 作为路径分隔符,或者使用双反斜线字符。

    以下是在 Python 中编写此路径的正确方式:

    r"C:\Tutorials\NotebookStart\Toronto.gdb\ambulances"
    "C:/Tutorials/NotebookStart/Toronto.gdb/ambulances"
    "C:\\Tutorials\\NotebookStart\\Toronto.gdb\\ambulances"

    如果您使用正斜线 (/) 或者双反斜线 (\\) 作为路径分隔符,则无需在路径字符串前添加字母 r。

    对于习惯以反斜线分隔 Windows 路径的用户,这在最初会显得有些奇怪,但是了解这一点很重要。

    避免一定要为工具指定全路径的方法是设置工作空间。

  18. 编辑代码,在以 import arcpyarcpy.GetCount 开头的两行之间添加新行。 添加下列行:
    arcpy.env.workspace =

    添加用于定义工作空间的行开头。

    此行将设置环境类 arcpy.env 的属性,使其等于某个值。 接下来,剪切 Toronto.gdb 的路径并将其粘贴到此代码之后,以设置路径。

  19. arcpy.GetCount 行剪切地理数据库的路径,其中包括扩展名 .gdb,然后将其粘贴到等号之后。
    arcpy.env.workspace = r"C:\Tutorials\NotebookStart\Toronto.gdb

    环境设置几乎就完成了

    请记住,您的路径可能与此处显示的有所不同。 请使用您自己计算机上的路径。

    还有一些内容需要进行更改。 您是否能找到?

    如果现在运行代码,您会遇到与如下所示类似的语法错误:

    EOL 语法错误

    EOL 表示行尾,消息表示 Python 在处理第 2 行中的字符串时达到代码的行尾。 路径字符串需要另外一个引号才能结束。

  20. 添加引号以结束字符串。

    行现在应该如下所示:

    arcpy.env.workspace = r"C:\Tutorials\NotebookStart\Toronto.gdb"

    字符串现在已结束

    第二行现在完整且正确。 您能看出还有哪些内容需要更改吗?

  21. ambulances 前面的反斜线字符更改为引号。

    ambulances 是一个字符串,因此已准备好运行。

    代码现在已准备好运行。

  22. 运行单元格。

    它应该可以正确运行且会报告 ambulances 要素类中的要素数。

    Toronto 地理数据库中有多个要素类。 现在,您可以获取其中任何要素类的计数。

  23. 在 notebook 中插入一个新行,将 GetCount 行复制并粘贴到新行,将名称更改为 bikeways,然后运行单元格。
    arcpy.GetCount_management("bikeways")

    获取 bikeways 的计数。

    您可能想要知道地理数据库中每个要素类的计数。 可以复制单元格并编辑要素类的名称,然而,Python 也允许您获取所有要素类的列表,然后对其运行 GetCount 函数。

  24. 在 notebook 中插入新单元格并添加下列代码:
    # List the feature classes in a workspace
    # works on the current workspace or a path
    fc_list = arcpy.ListFeatureClasses()
    # Print the list
    print(fc_list)
    
    # use a loop to set the variable fc to be
    # equal to each feature class name in the list
    for fc in fc_list:
        # Run Get Count on the current fc from the list
        # Set the variable count equal to the result of Get Count
        count = arcpy.GetCount_management(fc)
        # Print out the name of the feature class and the count
        print(fc, count)

    用于列出工作空间中的要素类并返回其要素计数的代码

    此代码还包括备注,用于解释每个步骤的作用。 备注是出现在 # 号之后的文本。 备注行不会运行,这些行旨在帮助了解代码的作用。

    您先前已使用列表并列出索引。 此代码创建一个名为 fc_list 的新变量,并将其设置为等于在当前工作空间 Toronto.gdb 中运行 arcpy.ListFeatureClasses 的结果。 先前的列表包含整数。 此时,列表包含使用要素类名称的字符串。

    接下来,代码将输出列表。 并非必须输出列表,但是建议输出,以确保获得预期变量结果。 如果存在问题,这可帮助您了解变量中的内容。

    代码的下一部分用于 for 循环。 For 循环将使用一组输入以及一个缩进的代码块,并且针对每个输入运行代码块。

    在这里,输入是列表的名称,变量 fc 会依次设置为每个变量名称,缩进代码块形式的代码会逐一运行它们。

    代码块创建名称为 count 的变量,并将其设置为等于针对列中的当前项目调用 GetCount 的结果。

    代码块随即输出要素类名称(fc 变量的内容)和计数(count 变量的内容)。

    代码(不包括备注)仅有几行。

    
    fc_list = arcpy.ListFeatureClasses()
    print(fc_list)
    for fc in fc_list:
        count = arcpy.GetCount_management(fc)
        print(fc, count)

  25. 运行单元格。

    结果显示地理数据库中要素类的列表及其要素计数。

    运行代码的结果

使用 notebook 运行分析

接下来,将使用 notebook 进行一些 GIS 分析工作。 假设您想要了解怡陶碧谷行政区内哪些区域距离消防站最远。 则可以使用 notebook 中的地理处理工具表示这些区域。

  1. 在当前单元格下插入一个新单元格。
  2. 将光标放在单元格中,然后开始输入以下内容:

    arcpy.

  3. Tab 键。

    按 Tab 键以查看选项。

    随即显示所有可用 ArcPy 选项的列表。

    您可以向下滚动鼠标并单击项目以从此列表中选择项目,也可以继续输入。

  4. 键入大写 B

    列表将过滤为含 B 的选项。

  5. 单击 Buffer_Analysis

    单元格现在显示 arcpy.Buffer_analysis

    在此过程的开始输入一些代码,然后按 Tab 键以查看并选择相符选项(这称为 Tab 自动补全),该功能有助于查找并快速访问所需命令。

  6. 当光标仍位于代码行末尾时,按 Shift+Tab 键。

    缓冲分析签名

    随即显示包含 Buffer_analysis 工具语法提示的窗口。 您可以单击箭头按钮将其展开,以阅读完整主题。

  7. 单击“关闭”按钮以关闭签名窗口。
  8. 输入左括号。

    缓冲括号。

    从而也会添加右括号,并将光标置于左右括号之间。 可以在此处添加 Buffer_analysis 工具的参数。

  9. 输入引号。

    缓冲引号。

    会添加第二个引号。 Python 需要将字符串括在引号内,因此会添加匹配的引号,并将光标置于引号之间。

    Buffer_analysis 工具的三个必要参数为:输入要素类、输出要素类和缓冲距离。 还有其他可选参数,但只有上述三个为必需的参数。

    您将缓冲 fire_stations 要素类,命名输出要素类 fire_buffer,使工具以 1000 米的距离建立消防站缓冲区。

  10. 按如下所示完成代码行:
    arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1000 METERS")

    以 1000 米建立缓冲区。

    工具的三个参数为字符串。 工具可仅使用要素类的名称来查找 fire_stations 要素类,因为它是地图上的图层,且您已经将工作空间设置为 Toronto.gdb。 工具可仅使用名称 "fire_buffer" 编写输出要素类,因为已设置工作空间。 工具包含一个内置逻辑,用于检测缓冲距离值和字符串形式测量单位 "1000 METERS"

  11. 运行该工具。

    在地图上建立 1000 米缓冲区

    输出要素即会添加至地图。

    结果将显示落在距消防站 1000 米(即 1 千米)以内的区域,以及以外的区域。 同时打开 notebook 和地图,以便于查看不同选择的结果。

  12. 将缓冲距离更改为 1750 米,并再次运行单元格。
    arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1750 METERS")

    在地图上建立 1750 米缓冲区

    注:

    如果收到错误消息,“ExecuteError: 无法执行。 参数无效”,提到 fire_buffer 已经存在,然后您的 ArcGIS Pro 环境设置、地理处理选项未设置为允许覆盖现有要素类。 要修复此问题,在单元格的 arcpy.Buffer_analysis 行前插入新行。 在新的行中,添加以下代码:

    arcpy.env.overwriteOutput = True

    这将允许缓冲区工具覆盖以前的输出。 单元格现在应包含:

    arcpy.env.overwriteOutput = True
    arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1750 METERS")

    运行单元格。

    这些缓冲区以外的区域距离消防站更远,因此消防车对火灾报警电话的响应时间也会更长。 要查找受影响的区域,而非不受影响的区域,您可以使用擦除工具从怡陶碧谷行政区中移除缓冲区内的区域。

  13. 添加另一个单元格并输入下列代码:
    arcpy.PairwiseErase_analysis("etobicoke", "fire_buffer", "no_service")

    此代码会针对 etobicoke 要素类调用 PairwiseErase_analysis 工具,从中擦除 fire_buffer 要素类中的区域,并将结果写入名为 "no_service" 的新要素类。

    成对擦除擦除工具的替代版本,将使用一组不同的库且与擦除使用不同的方式来处理折点拓扑关系。 如果有关于输入数据集质量方面的任何问题,在运行成对擦除之前,应该先对数据运行成对整合。 在此处比较简单的情况下,不需要运行成对整合。

  14. 运行单元格。
  15. 内容窗格中,取消选中 fire_buffergreenspaceetobicokeboundary 图层。
  16. 右键单击 no_service 图层,然后单击缩放至图层

    图层 no_service 将显示距离消防站较远的地方。

    图层 no_service 将显示距离消防站较远的地方。

  17. 单击 arcpy.PairwiseErase_analysis 单元格,在 Notebook 窗格中,单击编辑菜单,然后单击合并上方单元格

    将当前单元格与其上方的单元格合并。

    即会合并单元格。

    单元格已合并。

    通常情况下,NotebooksPython 代码的优点在于可让您快速运行工具序列。 在这里,序列中仅包含两个工具,但也体现了此概念。

  18. 将距离值从 1750 更改为 2500,并运行单元格。

    更改距离并再次运行。

  19. 关闭新的 fire_buffer 图层以查看新的 no_service 图层。

    您可能需要缩放至图层,才能看到仍然很小的区域。

    对于消防服务而言,得到的区域可能是受影响最大的区域。 通过在 notebook 中以单个单元格的方式运行多行代码可获得更新后的结果。 如果您已在工具的图形用户界面中使用过此工具,则需要再次运行缓冲区工具和成对擦除工具才能获得更新后的结果。

    仅两个工具所节省的时间非常有限,但是包含更长工具序列的工作流会节省很多时间。 此外,对于针对多个输入运行同一流程的情况,在循环中运行一个或多个工具的功能,会让 Python 非常有用。

  20. 保存工程。

在 notebook 中或以外运行 Python 代码

您已经了解了如何创建 notebook 以及如何在 notebook 中编写和运行 Python 代码。 使用 Notebooks 会带来很多好处,并非仅限于本教程中演示的这些:

  • Notebooks 是一种可快速开始编写 Python 代码的方法,无需配置和安装 Python 编辑器。
  • 可以在 ArcGIS Pro 中直接与数据和地图进行交互。 这可让您快速查看运行代码的结果。
  • Notebooks 集成在 ArcGIS Pro 的地理处理框架中。 这可让运行工具的体验与使用其对话框运行工具的体验几乎相同。 结果将添加到活动地图,且已运行的工具会出现在地理处理历史中。
  • ArcGIS Pro 中的 Notebooks 包括几个代码补全要素,以帮助您编写正确的代码。
  • Notebooks 也可以在 ArcGIS Pro 以外的环境中运行,这包括某些 Python 编辑器和 Jupyter Notebook。
  • Notebooks 包括内置可视化工具(例如,地图微件以及其他工具)。
  • 所有内容均存储为 .ipynb 文件,可共享给他人。
  • Notebooks 可以托管在 ArcGIS EnterpriseArcGIS Online 中。 这样即可将 .ipynb 文件共享给组织中的其他人员使用。

Notebooks 中运行 Python 代码也会有一些不足之处:

  • Notebooks 缺少其他 Python IDE 中的某些功能,例如,语法检查、调试和其他功能。
  • 代码补全助手需要键盘快捷键,这与其他 Python 编辑器相比,不够直观且不够完整。
  • 不是所有 Jupyter Notebook 功能都可在 ArcGIS Pro 中正常运行(但是我们会持续进行改进)。

还有多种其他方法可运行 Python 代码,这包括在 Notebooks 中运行代码、使用命令行运行脚本或计划从操作系统运行脚本。 其他教程中介绍了这些内容。

您已经了解如何在 ArcGIS Pro 中使用 Notebooks 编写和运行 Python 代码。 您已经了解变量和循环,这是 Python 中两个非常重要的概念。 您还学习了如何在 Python 中设置环境,以及如何在 Python 中使用标准 ArcGIS 地理处理工具。 这是有关如何在 ArcGIS Pro 中使用 Python 的系列教程的第二部分,后续还会有更多精彩课程。

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