Открытие проекта и обзор наборов данных

Прежде чем вы начнете использовать 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_stations и communities на ту же карту.

    Эти классы пространственных объектов представляют пожарные части и границы микрорайонов в пределах города Торонто. На этом уроке вы запустите инструменты геообработки для этих классов пространственных объектов, используя Python.

  11. База геоданных Toronto.gdb является базой геоданных по умолчанию для проекта. Папка PythonGP также содержит базу геоданных под названием Results.gdb, которая в настоящее время пуста, но будет использоваться для хранения выходных данных некоторых инструментов геообработки.

Запуск инструмента из окна Python

Один из способов запуска Python в ArcGIS Pro - через окно Python. Это хороший способ начать писать код Python, потому что он дает вам некоторые подсказки по синтаксису.

  1. На ленте щелкните вкладку Анализ и в разделе Геообработка щелкните стрелку ниспадающего списка справа от кнопки Python и щелкните Окно Python.

    Откройте окно Python в ArcGIS Pro.

    Щелчок по кнопке Python напрямую открывает Блокнот Python. Это еще один из способов написания кода Python, но на этом уроке мы будем использовать окно Python. См. урок Начало работы с блокнотами в ArcGIS Pro, чтобы узнать об использовании блокнотов.

    Окно Python содержит два раздела. Верхняя часть называется транскриптом, а нижняя часть - строкой ввода. Вы вводите код в раздел строки ввода, и в разделе транскрипт будет отображаться код, который был запущен, а также любые сообщения, такие как распечатанные результаты или сообщения об ошибках.

  2. Введите следующий код в разделе строки ввода окна Python и нажмите Enter:

    import arcpy

    Импортируйте модуль

    Эта строка кода импортирует пакет ArcPy. ArcPy - это пакет Python, который делает большую часть функциональности ArcGIS Pro доступной из Python, включая геообработку.

    Примечание:

    Поскольку вы используете окно Python внутри ArcGIS Pro, вы можете запускать инструменты геообработки без предварительного импорта 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, который позволяет использовать большую часть функций ArcGIS Pro в Python, включая почти все инструменты геообработки. Следующий элемент, management, является псевдонимом набора инструментов Управления данными, в котором находится инструмент Добавить координаты XY. Следующий за ним элемент - это AddXY, имя функции ArcPy, эквивалентной инструменту Добавить координаты XY в ArcGIS Pro.

    Части разделены точками, что в Python называется точечной записью, пробелы отсутствуют. В то время как имя инструмента - Добавить координаты XY в ArcGIS, имя функции в ArcPy - AddXY без пробелов. Имена функций иногда идентичны названию инструмента, но некоторые имена функций являются сокращенными версиями, как это. Имена функций Python не содержат пробелов. Поскольку это функция ArcPy, за ней следуют круглые скобки (). Требуются как открывающая, так и закрывающая скобки. В скобках указаны параметры функции - они совпадают с параметрами инструмента при использовании диалогового окна инструмента.

    В случае инструмента Добавить координаты XY параметры состоят только из имени одного входного класса пространственных объектов.

    Существует альтернативный способ написания синтаксиса для запуска инструментов. Вам могут встретиться примеры кода, написанные обоими способами, поэтому полезно знать оба способа.

  6. Введите следующий код в разделе строки ввода окна Python и нажмите Enter:

    arcpy.AddXY_management("ambulances")

    Запуск строки кода снова запускает инструмент Add 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 Pro, в Окне Python, введите следующий код в разделе строки ввода:

    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. Введите 'fire_buffer' в кавычках для имени out_feature_class.

    строка кода теперь:

    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 метров», «1000 МЕТРОВ» или «1000 Метров» - все эти значения считаются правильными. Как и прежде, вы можете использовать либо одинарные, либо двойные кавычки - и то, и другое правильно.

    Это завершает обязательные параметры. Инструмент готов к запуску. Вы можете продолжать вводить значения для дополнительных параметров, но это не обязательно для запуска инструмента.

  13. В конце строки кода нажмите Enter, чтобы запустить инструмент.

    Инструмент запускается, результат распечатывается в транскрипте окна Python, и полученный класс пространственных объектов добавляется на текущую карту.

    Выходные данные буфера пожарных частей

    Результат буфера 1000 метров в окне Python.

    В транскрипте под строкой кода, которая запустила инструмент, показан результат запуска инструмента. В этом случае результатом работы инструмента Буфер является новый класс пространственных объектов. Напомним, что в примере с инструментом Добавить координаты XY результатом была ссылка на существующий векторный слой, а не на новый класс пространственных объектов.

    Распечатанный результат показывает местоположение только что созданного класса пространственных объектов:

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

    При указании выходного класса пространственных объектов было указано только имя класса пространственных объектов. Почему класс пространственных объектов попадает в файловую базу геоданных Toronto.gdb? Потому что это текущая рабочая область для проекта. Код в окне Python учитывает настройки среды приложения.

    Примечание:
    В пути используются две обратные косые черты (\\) вместо одной обратной косой черты (\). Единственная обратная косая черта в Python используется в качестве escape-символа и может иметь непредвиденные последствия. Вместо двух обратных косых черт вы также можете использовать букву r для необработанных данных перед строкой (то есть 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

    Это показывает подсказки автозаполнения кода для параметра 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, чтобы запустить код.

    Это приводит к ошибке:

    Value is not a member of Full error message.

    Это означает, что 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, но не работает при использовании того же кода Python в редакторе Python вне ArcGIS Pro, например 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. Добавьте классы объектов greenspace и etobicoke на активную карту.
  3. На ленте щелкните Анализ и в группе Геообработка щелкните Инструменты.

    Щелкните Анализ и щелкните Инструменты.

  4. На панели Геообработка в поисковой строке введите Вырезать и нажмите Enter.
  5. Дважды щёлкните инструмент Вырезать.

    Найдите и запустите инструмент Вырезать.

  6. В качестве Входных объектов выберите greenspace.
  7. В качестве Вырезающих объектов выберите etobicoke.
  8. Для Выходные объекты или набор данных перейдите к Results.gdb и назовите класс выходных объектов greenspace_clip.

    Инструмент Вырезать готов к запуску.

  9. Щелкните Запустить.

    Инструмент Вырезать запустится, и результирующий класс пространственных объектов будет добавлен на карту.

  10. На ленте в группе Геообработка щелкните История.

    Открыть историю

    Появится панель История геообработки.

    Вы также можете щелкнуть Открыть историю в нижней части окна инструмента Вырезать, чтобы открыть историю.

  11. В списке История геообработки щелкните правой кнопкой мыши Вырезать и щелкните Отправить в окно Python.

    Код Python для запуска инструмента Вырезать отправляется в окно Python. Этот код называется фрагментом кода, то есть коротким отрезком кода.

    Код Python инструмента Вырезать, отправленный в окно Python из истории геообработки.

    Примечание:
    Другие опции Скопировать команду Python и Сохранить как скрипт Python. Результирующий код тот же, но эти опции полезны, когда вы работаете с редактором Python вне ArcGIS Pro или с Блокнотом.

    Первый и второй параметры являются именами векторных слоев данных и не включают путь. Третий параметр - это имя выходных объектов, которое включает полный путь. Поскольку рабочая область ранее была задана с помощью arcpy.env.workspace, этот путь не нужен. Последний параметр (кластерный допуск, который не отображается в диалоговом окне инструмента) оставлен со значением по умолчанию None и поэтому может быть опущен. Поэтому код можно сократить.

  12. Упростите код:

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

    Упрощенная версия кода из Истории

  13. Запустите код, чтобы убедиться, что он работает.

    Поскольку ранее инструмент Вырезать запускался с теми же настройками, может показаться, что ничего не произошло. Вы можете проверить это, удалив слой greenspace_clip с активной карты и снова запустив инструмент. На этот раз вы заметите, что результирующий класс пространственных объектов был добавлен на карту.

    Теперь вы узнали, как скопировать код Python из истории геообработки после запуска инструмента из диалогового окна инструмента. Это полезно для изучения синтаксиса инструментов, но код может потребовать некоторой очистки, чтобы следовать рекомендациям, например, опустить параметры, которые можно оставить по умолчанию.

Просмотр

  • Код Python можно использовать для запуска инструментов геообработки. Хорошее понимание инструмента геообработки облегчит написание этого кода.
  • Окно Python предоставляет несколько функций, помогающих в написании кода, включая различные подсказки автозаполнения кода и другую помощь по синтаксису.
  • Параметры инструмента состоят из обязательных и дополнительных. Дополнительные параметры, оставленные по умолчанию, могут быть исключены из кода. Когда необходимо использовать дополнительный параметр, есть несколько вариантов, чтобы при необходимости пропустить другие дополнительные параметры.
  • Результаты запуска инструмента из его диалогового окна можно экспортировать в код Python в качестве отправной точки для запуска инструмента с помощью Python.

На этом уроке вы узнали, как запускать инструменты геообработки в окне Python и как получить справку по синтаксису Python. Вы узнали о параметрах инструмента, об обязательных и дополнительных параметрах и о том, как задавать параметры. Вы узнали, как пути к данным и средам геообработки ведут себя в окне Python. Наконец, вы научились копировать код инструмента геообработки, запущенного из Истории геообработки, в окно Python.

Вас также могут заинтересовать книги Python Scripting for ArcGIS Pro и Advanced Python Scripting for ArcGIS Pro автора Dr. Paul A. Zandbergen, опубликованные в Esri Press.