Начало работы с блокнотами в ArcGIS Pro
Настройка проекта и обзор наборов данных
Перед написанием кода Python надо загрузить наборы данных, создать проект и просмотреть наборы данных, которые будут использоваться.
- Загрузите данные для этого руководства и извлеките содержимое в папку на своем компьютере.
Файл .zip содержит папку с именем NotebookStart.
В этом руководстве данные находятся в папке C:\Tutorials\NotebookStart\. Можно использовать другую папку, но тогда надо будет соответственно менять все пути в последующих инструкциях.
- Запустите ArcGIS Pro. Если будет предложено, войдите под лицензированной учетной записью организации ArcGIS.
Примечание:
Если у вас нет доступа к ArcGIS Pro или учетной записи организации ArcGIS, см. варианты доступа к программному обеспечению.
- Щелкните Открыть другой проект..
- В окне Открыть проект перейдите к папке, которую вы извлекли из файла NotebookStart.zip, щелкните Notebooks Getting Started.aprx, чтобы выбрать его, и нажмите ОК.
Откроется проект. На текущей карте показаны границы города Торонто в Канаде. Вы добавите на эту карту несколько классов пространственных объектов.
- Если панель Каталог не видна, щелкните вкладку Вид и затем Панель Каталог.
- Закрепите панель Каталог в правой части карты.
- В панели Каталог разверните Папки и разверните NotebookStart.
- Разверните базу геоданных Toronto.gdb.
База геоданных содержит несколько классов пространственных объектов.
- Щелкните правой кнопкой мыши класс etobicoke и нажмите Добавить к текущей карте.
Эти полигоны представляют несколько сообществ в городе Торонто.
- Добавьте классы объектов fire_stations и greenspace на ту же карту.
Эти классы пространственных объектов представляют местоположения пожарных станций и зеленых насаждений в пределах города Торонто соответственно. Вы будете использовать эти классы пространственных объектов для запуска различных инструментов геообработки с помощью Python.
Создайте блокнот и запустите код Python
В этом разделе вы создадите блокнот в ArcGIS Pro и будете использовать его для запуска кода Python.
- На ленте щелкните вкладку Анализ и в группе Геообработка щелкните стрелку ниспадающего списка для кнопки Python и щелкните Python Notebook.
Нажатие кнопки Python также открывает новый блокнот, но раскрывающееся меню позволяет вам увидеть, что у вас есть выбор между блокнотом Python Notebook и окном Python. Окно Python — это еще один способ запуска кода Python в ArcGIS Pro.
Появление нового блокнота может занять некоторое время, и пока вы ждете, на экране может появиться сообщение Инициализация Kernel. Это означает, что ArcGIS Pro готовится к запуску кода в блокноте. Ядро — это программное обеспечение, работающее в фоновом режиме, которое будет запускать код Python, который вы вводите в блокнот.
Блокнот откроется в новом виде в главном окне ArcGIS Pro.
Новый блокнот хранится в виде файла .ipnyb в домашней папке проекта. Новый блокнот также появится в папке Блокноты в панели Каталог.
- Щелкните внутри пустой ячейки блокнота.
Контур становится зеленым.
- Введите следующую строку кода:
print("Hello Notebook!")
Этот код вызывает функцию печати для одного входного параметра в скобках. Этот параметр является строкой, поскольку он заключен в кавычки. Строки — это важный и полезный тип данных, с которым вы можете работать в Python.
- На панели инструментов над ячейкой нажмите кнопку Запустить.
Код в ячейке запускается, и результат печатается под ячейкой. Функция печати работает со строковым значением "Hello Notebook!" и печатает его. Кавычки не печатаются, потому что они не являются частью строки — они только идентифицируют ее как строку. Число 1 появляется в скобках слева от ячейки. Ниже добавляется новая пустая ячейка.
Вы также можете запустить текущую выделенную ячейку, нажав Ctrl+Enter.
Вы можете добавить несколько строк кода в одну ячейку, нажимая клавишу Enter после каждой строки. Это может показаться нелогичным, если вы привыкли запускать код в окне Python или в интерактивном окне редактора Python, где нажатие клавиши Enter приводит к запуску строки кода.
- В ячейке под кодом Hello Notebook введите следующие строки кода:
a = 5 b = 7 c = 9 print(a * b * c)
Этот код создает три переменные, a, b и c, и присваивает их значениям числа 5, 7 и 9. Последняя строка печатает результат умножения переменных.
- Нажатие Ctrl+Enter
После запуска ячейки под ней появляется значение 315. Число 2 появляется в скобках слева от ячейки, чтобы указать, что это второй запуск ячейки.
- В верхней части блокнота откройте меню Вставка и выберите Вставить ячейку под.
Новая ячейка добавляется ниже текущей выбранной ячейки.
- В новой ячейке введите следующую строку кода:
a * b * c
Как вы думаете, что будет, когда вы запустите ячейку?
- Запустите ячейку и посмотрите на результат.
Совпал ли результат с вашими ожиданиями?
Значения переменных a, b и c сохраняются в памяти после их установки, поэтому их можно использовать и в другой ячейке.
Результат умножения значений, хранящихся в a, b и c, печатается при запуске ячейки.
Выражение печати не требуется, поскольку в блокноте, окне Python и в интерпретаторе Python Python проводит оценку простых операторов выражения и печатает их значение.
- Если вы запустили ячейку, нажав Ctrl+Enter, вставьте новую ячейку под ней.
Если вы запустили ячейку, нажав кнопку запуска, под ней уже должна быть новая ячейка.
- В новой ячейке введите следующую строку кода:
a * t
Как вы думаете, что будет, когда вы запустите ячейку?
- Запустите ячейку и посмотрите на результат.
Совпал ли результат с вашими ожиданиями?
Переменной a присвоено числовое значение 5, но новая переменная t еще не задана. Это вызывает ошибку. В Python вы не сможете использовать переменные, пока не присвоите им значения.
- Отредактируйте код в ячейке следующим образом:
a * "t"
Как вы думаете, что будет, когда вы запустите ячейку?
- Запустите ячейку и посмотрите на результат.
Совпал ли результат с вашими ожиданиями?
Поместив t в кавычки, вы идентифицировали его для Python как строку. Python оценивает это выражение как повторить пять раз строку t, в результате чего получается новое строковое значение 'ttttt'.
- Добавьте новую ячейку и введите следующий код:
t = 10 a * t
Как вы думаете, что будет, когда вы запустите ячейку?
- Запустите ячейку.
Совпал ли результат с вашими ожиданиями?
Поскольку первая строка в ячейке определяла переменную t как равную числу 10, Python смог умножить ее на значение, хранящееся в переменной a.
Вы открыли новый блокнот в ArcGIS Pro, добавили и запустили базовый код Python. Далее вы будете использовать функции блокнота для управления кодом в ячейках.
Управление кодом в ячейках
Код в Notebooks запускается в ячейках. Порядок, в котором были запущены ячейки, обозначается числами рядом с ячейками после их запуска. В Notebooks есть инструменты для управления ячейками. Сейчас вы изучите эти аспекты работы с Python в блокноте.
- В следующей пустой ячейке (при необходимости добавьте новую) введите приведенную ниже строку кода и запустите ячейку.
mylist = [1, 2, 3, 4, 5]
Что же произошло?
Этот код определяет новую переменную и задает ее значение, но ничего не печатает.
Переменная mylist представляет собой список, на что указывают квадратные скобки. Списки — важный тип данных в Python, состоящий из последовательности элементов. В данном случае эти элементы являются числами, но списки также могут содержать другие типы данных. Элементы в списке разделяются запятыми.
- В следующей пустой ячейке введите следующий код и запустите ячейку.
mylist[-1]
Что же произошло?
Элементы в списке индексируются, начиная с нулевого индекса. Вы можете получить определенные элементы в списке, используя их порядковый номер. Номер индекса -1 означает первый элемент с конца списка, другими словами, последний элемент. Это возвращает число 5.
Как вы видели, подсказки ввода и вывода ячейки показывают число после того, как ячейка была запущена. Это число начинается с 1 и увеличивается для дополнительных ячеек. Число увеличивается каждый раз, когда вы запускаете ячейку, в том числе при повторном запуске ранее запущенной ячейки. Числа помогают отслеживать порядок, в котором запускались ячейки.
- Измените код в ячейке, определяющей переменную mylist, на следующий, добавив дополнительные элементы, но не запускайте ячейку.
mylist = [1, 2, 3, 4, 5, 6, 7, 8]
- Щелкните ячейку ниже ячейки с кодом mylist[-1] и нажмите кнопку Запустить.
Соответствует ли случившееся тому, что вы ожидали?
Результатом является цифра 5. Почему не 8?
Код в блокноте вводится ячейка за ячейкой, а все ранее использовавшиеся переменные сохраняются в памяти.
Пока вы не запустите ячейку с кодом, который переопределяет переменную mylist, значение mylist по-прежнему будет хранящимся в памяти значением [1, 2, 3, 4, 5], а значение в позиции -1 в этом списке по-прежнему равно 5.
- Щелкните ячейку mylist = [1, 2, 3, 4, 5, 6, 7, 8] и запустите ее.
- Щелкните ячейку mylist[-1] и запустите ее.
Теперь значение последней позиции списка равно 8.
В качестве альтернативы запуску отдельных ячеек можно выбрать несколько ячеек и запустить их вместе или запустить все ячейки блокнота, щелкнув меню Ячейка и выбрав Запустить все.
Бывает удобно организовать строки кода, которые составляют одно целое, в одной ячейке. Например, имеет смысл объединить две предыдущие ячейки в одну. Вы можете вручную копировать и вставлять код из одной ячейки в другую или вы можете объединить ячейки.
- Щелкните ячейку, определяющую переменную mylist.
В этой ячейке mylist = [1, 2, 3, 4, 5, 6, 7, 8].
- Нажмите меню Редактировать и нажмите Слить ячейки под.
В результате получается одна ячейка с объединенными строками кода. Результаты под ячейками были удалены. Между строками кода из двух объединенных ячеек добавляется пустая строка, но вы можете отредактировать ячейку, чтобы удалить ее, если хотите.
- Запустите объединенную ячейку.
Меню Редактировать предоставляет множество других полезных способов управления ячейками в блокноте. Вы можете копировать и вставлять ячейки, удалять их, разделять и объединять, а также перемещать выбранную ячейку вверх или вниз относительно других ячеек.
Дополнительные инструменты доступны в пунктах меню Вид, Вставка и Ячейка.
Некоторые из наиболее часто используемых инструментов также доступны в виде кнопок на панели инструментов блокнота.
К ним относятся:
- Вставить ячейку под
- Вырезать выбранные ячейки
- Копировать выбранные ячейки
- Вставить выбранные ячейки
- Переместить выбранные ячейки вверх
- Переместить выбранные ячейки вниз
Дополнительные инструменты можно найти в Панели выбора команд.
- Нажмите кнопку Панель выбора команд.
Появится список команд.
Вы можете запустить команду, щелкнув ее. Команда применяется к выбранным в блокноте ячейкам или ко всем ячейкам, в зависимости от команды.
- В Панели выбора команд щелкните очистить выходные данные всех ячеек.
Весь код остается прежним, но все выходные данные удалены. Подсказки входных и выходных данных пусты, так как ни одна из ячеек не была запущена. Когда вы запускаете ячейку, подсказки снова начинаются с 1.
Панель выбора команд также показывает клавиши быстрого доступа для многих задач.
- Нажмите кнопку Панель выбора команд и прокрутите вниз, чтобы вставить ячейку под.
Сочетание клавиш для этой команды указано справа от нее. Клавишей быстрого доступа является буква B, когда ячейка блокнота находится в режиме прямого ввода команд.
- Скройте Панель выбора команд, щелкнув за пределами панели, но внутри блокнота.
- Щелкните слева от второй ячейки, чтобы она стала синей.
Убедитесь, что вы нажимаете не внутри раздела кода, что приведет к тому, что ячейка станет зеленой.
Граница ячейки синего цвета означает, что она находится в режиме прямого ввода команд.
- Нажмите клавишу B на клавиатуре.
Новая ячейка вставляется ниже выбранной ячейки. Если бы ячейка была зеленой, вы бы добавили букву b к коду в ячейке.
Клавиши быстрого доступа не чувствительны к регистру, поэтому b и B это одно и тоже.
Нет необходимости запоминать эти команды, но опытные программисты запоминают и используют некоторые из них для ускорения своей работы. Для большинства основных задач кнопки и опции меню блокнота работают хорошо.
Если вы ищете команду для определенной задачи, вы можете найти ее с помощью строки поиска в верхней части Панели выбора команд.
- Откройте Панель выбора команд и введите запуск в окне Поиск.
Это отфильтровывает список инструментов, в названии которых есть слово запуск. Некоторые команды имеют клавиши быстрого доступа. Например, сочетание клавиш для запуска выбранных ячеек — Ctrl + Enter.
- Скройте Панель выбора команд, щелкнув за пределами панели, но внутри блокнота.
- Закройте блокнот.
Вы узнали, как вводить и редактировать код Python в ячейках блокнота и как взаимодействовать с блокнотом для запуска кода и управления им. Далее вы будете использовать блокнот для запуска инструментов геообработки в ArcGIS Pro.
Запуск инструментов геообработки в блокноте
Теперь, когда вы попрактиковались в написании кода в блокноте, пришло время использовать некоторые инструменты геообработки. Вы начнете с нового блокнота.
- Щелкните вкладку Анализ и в группе Геообработка щелкните Python.
Откроется новый блокнот.
- В панели Каталог разверните раздел Блокноты.
- Щелкните правой кнопкой мыши новую записную книжку, New Notebook (1).ipynb, и выберите Переименовать.
- Введите geoprocessing_demo и нажмите Enter.
Новый блокнот переименован. В панели Каталог вы можете увидеть, что расширение файла .ipynb было автоматически добавлено к имени. Вкладка блокнота теперь называется geoprocessing_demo.
В следующих шагах будет полезно видеть карту и блокнот рядом.
- Перетащите вкладку блокнота geoprocessing_demo в место для прикрепления, которое появилось ниже.
Блокнот закреплен под картой. Теперь вы сможете видеть результаты своего кода, когда в блокноте используете Python для работы с классами пространственных объектов на карте.
- В пустой ячейке введите следующую строку кода и запустите ячейку:
import arcpy
Эта строка кода импортирует пакет ArcPy. ArcPy - это пакет Python, который делает большую часть функциональности ArcGIS Pro доступной из Python, включая геообработку.
Поскольку вы используете этот блокнот в ArcGIS Pro, код, использующий инструменты геообработки, не выдаст ошибку, если вы не импортировали ArcPy. Тем не менее, рекомендуется всегда включать import arcpy в начале кода геообработки, чтобы он работал и вне ArcGIS Pro.
- В той же ячейке добавьте новую строку и введите следующий код:
arcpy.GetCount_management("fire_stations")
Этот код использует ArcPy для запуска инструмента Посчитать строки, который определяет количество объектов в классе объектов пожарных станций fire_stations.
- Запустите ячейку.
GetCount — это функция ArcPy, которая запускает инструмент геообработки Посчитать строки, расположенный в наборе инструментов Инструменты управления данными.
Результат появится под ячейкой кода. В классе объектов 84 строки (объекта). Эти результаты очень похожи на сообщения, которые вы видите после запуска инструмента с помощью диалогового окна инструмента в ArcGIS Pro. Notebooksинтегрированы в среду геообработки ArcGIS Pro. Это означает, что запуск инструмента в блокноте аналогичен запуску инструмента с помощью диалогового окна инструмента. Любой инструмент, который вы запускаете в блокноте, также появляется на панели История.
- Щелкните вкладку Анализ на ленте. В группе Геообработка щелкните История.
Инструмент появится в истории геообработки.
- Закройте панель История.
- Отредактируйте строку кода arcpy.GetCount следующим образом:
arcpy.GetCount_management("ambulances")
- Запустите ячейку.
Этот код не выполняется с сообщением об ошибке. В конце сообщения появляется следующая информация:
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 — это слой на активной карте. В блокноте вы можете обратиться к набору данных по имени слоя в активной карте, как если бы вы запускали инструмент геообработки в интерактивном режиме, используя его графический пользовательский интерфейс.
Класс объектов скорой помощи ambulances не представлен в виде слоя в активной карте, а также не является классом объектов в базе геоданных по умолчанию для проекта. Вы можете сослаться на класс пространственных объектов, которого нет в активной карте или в базе геоданных по умолчанию, указав полный путь к нему.
Далее вы найдете путь к классу объектов скорой помощи ambulances.
- В панели Каталог разверните раздел Базы данных и разверните Toronto.gdb.
- Щелкните правой кнопкой мыши ambulances и нажмите Копировать путь.
Путь к файлу класса объектов скорой помощи будет скопирован. Этот путь содержит также имя класса объектов.
Путь в этом примере следующий:
C:\Tutorials\NotebookStart\Toronto.gdb\ambulances
Путь на вашем компьютере будет другим, в зависимости от того, куда и как вы распаковали .zip файл с данными. Вы могли не поместить данные в папку на диске C или, например, в папку Tutorials. На следующем шаге вы должны использовать путь к папке на своем компьютере.
- Щелкните в ячейке блокнота и выделите ambulances. Вставьте скопированный путь.
arcpy.GetCount_management("C:\Tutorials\NotebookStart\Toronto.gdb\ambulances")
Ячейка почти готова к запуску. Путь выглядит корректно, но это не так. Чего-то не хватает.
- Щелкните сразу после открывающей скобки и перед первой кавычкой и введите букву r.
arcpy.GetCount_management(r"C:\Tutorials\NotebookStart\Toronto.gdb\ambulances")
Вам нужно добавить букву r, чтобы сообщить Python, что этот путь является необработанной строкой. Компьютеры Windows используют символ обратной косой черты в качестве разделителя пути. В Python символ обратной косой черты — это escape-символ, который рядом с некоторыми другими символами в строке кодирует табуляцию, новую строку или другие специальные символы. Это означает, что если \N встречается в пути \NotebookStart, Python считывает такую строку как имеющую символ новой строки. Размещение r перед строкой сообщает Python о том, что надо игнорировать escape-символы.
- Запустите ячейку.
Инструмент Посчитать строки запускается и возвращает сообщение о том, что в классе 48 объектов.
Также можно использовать символ косой черты (/) в качестве разделителя пути в коде Python или можно пользовать двойной символ обратной косой черты.
Ниже приведены все допустимые способы написания этого пути в Python:
r"C:\Tutorials\NotebookStart\Toronto.gdb\ambulances" "C:/Tutorials/NotebookStart/Toronto.gdb/ambulances" "C:\\Tutorials\\NotebookStart\\Toronto.gdb\\ambulances"
Если вы используете косую черту (/) или двойную обратную косую черту (\\) в качестве разделителя пути, вы не добавляете r перед строкой пути.
Для тех, кто привык к путям Windows, разделенным обратной косой чертой, поначалу это может показаться немного странным, но это важно помнить.
Один из способов избежать необходимости указывать полные пути для инструментов — установить рабочую область.
- Отредактируйте код, чтобы добавить новую строку между двумя строками, начинающимися с import arcpy и arcpy.GetCount. Добавьте следующую строку:
arcpy.env.workspace =
Эта строка устанавливает свойство класса среды arcpy.env равным некоторому значению. Далее вы вырежете путь к Toronto.gdb и вставите его после этого кода, чтобы установить путь.
- Вырежьте путь к базе геоданных, включая расширение .gdb, из строки arcpy.GetCount и вставьте его после знака равенства.
arcpy.env.workspace = r"C:\Tutorials\NotebookStart\Toronto.gdb
Помните, что ваш путь может отличаться от показанного здесь. Используйте путь со своего компьютера.
Есть еще некоторые вещи, которые нужно изменить. Вы можете найти их?
Если вы запустите код сейчас, вы получите синтаксическую ошибку, подобную этой:
EOL означает конец строки, а сообщение означает, что Python достиг конца строки кода при обработке строки во второй строке Строка пути нуждается в другой кавычке, чтобы завершить ее.
- Добавьте кавычку, чтобы закончить строку.
Теперь строка должна быть следующей:
arcpy.env.workspace = r"C:\Tutorials\NotebookStart\Toronto.gdb"
Вторая строка теперь полная и правильная. Вы видите, что еще нужно изменить?
- Замените символ обратной косой черты перед ambulances на символ кавычки.
Теперь код готов к запуску.
- Запустите ячейку.
Он должен работать правильно и сообщать о количестве объектов в классе объектов скорой помощи.
В базе геоданных Toronto несколько классов пространственных объектов. Сейчас вы можете получить количество объектов для любого из них.
- Вставьте новую ячейку в блокнот, скопируйте и вставьте строку GetCount в новую ячейку, измените имя на bikeways, а затем запустите ячейку.
arcpy.GetCount_management("bikeways")
Возможно, вы захотите узнать количество объектов каждого класса базы геоданных. Вы можете скопировать ячейку и отредактировать имя класса пространственных объектов, но Pythonпозволяет получить список всех классов пространственных объектов, а затем запустить для них функцию GetCount.
- Вставьте новую ячейку в блокнот и добавьте следующий код:
# 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 и сделает ее равной результату выполнения функции arcpy.ListFeatureClasses в текущей рабочей области, Toronto.gdb. Предыдущий список содержал целые числа. На этот раз список содержит строки с именами классов пространственных объектов.
Затем код печатает этот список. Печатать список не обязательно, но это хороший способ убедиться в том, что вы получили результаты, ожидаемые для переменной. Если выполнение кода пойдет не как запланировано, полезно знать, что находится в этой переменной.
В следующей части кода используется цикл 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)
- Запустите ячейку.
Результаты показывают список классов объектов базы геоданных и количество объектов в них.
Запуск анализа с помощью блокнота
Далее вы проведете некоторую работу по ГИС-анализу, используя блокнот. Предположим, вас интересует, какие районы административного округа Этобико находятся дальше всего от пожарных станций. Вы можете использовать инструменты геообработки в блокноте, чтобы идентифицировать эти районы.
- Добавьте новую ячейку ниже текущей.
- Поместите курсор внутрь ячейки и начните вводить следующее:
arcpy.
- Нажмите клавишу Tab.
Появится список всех доступных опций ArcPy.
Вы можете прокрутить вниз и щелкнуть элемент, чтобы выбрать его из списка, или можете продолжить ввод вручную.
- Введите заглавную букву B.
- Нажмите Buffer_Analysis.
Ячейка теперь содержит arcpy.Buffer_analysis.
Процесс, когда вы начинаете вводить какой-либо код, а затем нажимаете клавишу Tab, чтобы увидеть и выбрать подходящие опции, называется заполнением с помощью клавиши tab, и он может помочь вам найти и быстрее получить доступ к нужным командам.
- Не убирая курсор с конца строки кода, нажмите Shift+Tab.
Появится окно с подсказками по синтаксису инструмента Buffer_analysis. Вы можете нажать кнопку со стрелкой, чтобы развернуть его и прочитать информацию полностью.
- Нажмите кнопку закрытия, чтобы закрыть окно Сигнатура.
- Введите открывающую скобку.
Также добавляется закрывающая скобка, и курсор помещается между ними. Здесь вы можете добавить параметры инструмента Buffer_analysis.
- Введите символ кавычки.
Добавляется вторая кавычка. Python требует, чтобы строки были заключены в кавычки, поэтому он добавляет соответствующий символ кавычки и размещает курсор между кавычками.
Инструменту Buffer_analysis требуются три параметра: входной класс объектов, выходной класс объектов и буферное расстояние. Есть и другие дополнительные параметры, но перечисленные параметры обязательные.
Вы будете создавать буферные зоны для класса объектов fire_stations, назовете выходной класс объектов fire_buffer и зададите параметры инструмента так, чтобы создать буферные зоны на расстоянии 1000 метров от пожарных станций.
- Заполните строку кода следующим образом:
arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1000 METERS")
Три параметра инструмента являются строками. Инструмент может найти класс пространственных объектов fire_stations, используя только его имя, потому что это слой на карте, и вы ранее установили рабочую область как Toronto.gdb. Инструмент может записать выходной класс пространственных объектов, используя только имя "fire_buffer", поскольку рабочая область задана. Инструмент имеет встроенную логику для определения значения буферного расстояния и единиц измерения в строке "1000 METERS".
- Запустите инструмент.
Выходные объекты добавляются на карту.
Результаты показывают, какие области находятся в пределах 1000 метров или 1 километра от пожарной станции, а какие нет. Если блокнот и карта открыты одновременно, можно легко увидеть результаты ввода различных вариантов значений буфера.
- Измените буферное расстояние на 1750 метров и снова запустите ячейку.
arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1750 METERS")
Примечание:
Если вы получите сообщение об ошибке выполнения поскольку параметры недопустимы "ExecuteError: Failed to execute. Parameters are not valid", в котором упоминается, что fire_buffer уже существует, тогда ваши настройки среды ArcGIS Pro, параметры геообработки не установлены, чтобы разрешить перезапись существующих классов объектов. Чтобы исправить эту проблему, вставьте новую строку в ячейку перед строкой arcpy.Buffer_analysis. В новой строке добавьте следующий код:
arcpy.env.overwriteOutput = True
Это позволит инструменту Буфер перезаписать предыдущий вывод. Теперь ячейка должна содержать:
arcpy.env.overwriteOutput = True arcpy.Buffer_analysis("fire_stations", "fire_buffer", "1750 METERS")
Запустите ячейку.
Области за пределами этих буферных зон находятся дальше от пожарных станций, что может увеличить время прибытия пожарной машины на вызов. Чтобы найти удаленные области, а не те, которые вблизи станций, вы будете использовать инструмент стирания, чтобы стереть области, попадающие внутрь буферов, из административного района Этобико.
- Добавьте еще одну ячейку и введите следующий код:
arcpy.PairwiseErase_analysis("etobicoke", "fire_buffer", "no_service")
Это вызывает инструмент PairwiseErase_analysis для класса пространственных объектов etobicoke, стирая из него области внутри класса пространственных объектов fire_buffer и записывая результаты в новый класс пространственных объектов с именем "no_service".
Попарное стирание — это альтернативная версия инструмента Стереть, которая использует другой набор библиотек и обрабатывает топологические отношения вершин иначе, чем инструмент Стереть. Если есть какие-либо вопросы относительно качества ваших входных наборов данных, перед запуском инструмента Попарное стирание вы должны запустить инструмент Попарная интеграция для своих данных. В данной простой ситуации это не нужно.
- Запустите ячейку.
- В панели Содержание снимите отметки со слоев fire_buffer, greenspace, etobicoke и boundary.
- Щелкните правой кнопкой мыши слой no_service и выберите Приблизить к слою.
Слой no_service показывает места, которые находятся дальше от пожарных станций.
- Щелкните ячейку arcpy.PairwiseErase_analysis, в панели Блокнот щелкните меню Редактировать и выберите Слить ячейки над.
Ячейки объединены.
Преимущество Notebooks и кода Python в целом заключается в том, что вы можете быстро запускать последовательность инструментов. В данном случае последовательность состоит только из двух инструментов, но она иллюстрирует концепцию.
- Измените значение расстояния с 1750 до 2500 и запустите ячейку.
- Отключите новый слой fire_buffer, чтобы увидеть новый слой no_service.
Возможно, вам придется увеличить масштаб слоя, чтобы увидеть оставшиеся меньшие области.
Итоговые области потенциально наиболее не защищены с точки зрения службы пожарной охраны. Вы смогли получить этот обновленный результат, запустив несколько строк кода как одну ячейку блокнота. Если бы вы использовали инструменты из их графических пользовательских интерфейсов, вам нужно было бы заново запустить инструменты Буфер и Попарное стирание, чтобы получить обновленный результат.
Экономия времени при использовании только двух инструментов незначительна, но многие рабочие процессы состоят из более длинных последовательностей инструментов. Кроме того, возможность запуска инструмента или нескольких инструментов в цикле делает Python полезным, когда вам нужно запустить один и тот же процесс на нескольких входных данных.
- Сохраните проект.
Код Python запускается в блокнотах и за их пределами
Вы узнали, как создать блокнот и как написать и запустить код Python в блокноте. У использования Notebooks есть несколько преимуществ, не все из которых были продемонстрированы в данном руководстве:
- Блокноты Notebooks — это быстрый способ начать писать код Python, не требующий установки или настройки редактора Python.
- Вы можете работать с данными и картами непосредственно в ArcGIS Pro. Это позволяет вам быстро увидеть результаты запуска кода.
- Блокноты Notebooks интегрированы в среду геообработки ArcGIS Pro. Это делает запуск инструментов похожим на их запуск с помощью диалоговых окон инструментов. Результаты добавляются на активную карту, а запущенные инструменты появляются в истории геообработки.
- Блокноты Notebooks в ArcGIS Pro включают несколько функций завершения кода, облегчающих написание правильного кода.
- Также можно запускать Notebooks вне ArcGIS Pro, включая некоторые редакторы Python и Jupyter Notebook.
- Notebooks включают встроенные средства визуализации (например, виджеты карты и другие).
- Все содержимое сохраняется в виде файла .ipynb, которым можно поделиться с другими пользователями.
- Notebooks могут быть размещены в ArcGIS Enterpriseили ArcGIS Online. Это позволяет сделать файл .ipynb доступным для других пользователей в вашей организации.
Но есть некоторые потенциальные недостатки запуска кода Python в блокноте Notebooks:
- В блокнотах Notebooks отсутствуют некоторые функции, которые есть в других средах разработки Python, такие как проверка синтаксиса, отладка и другие.
- Для помощи в завершении кода требуются сочетания клавиш, и они не так интуитивно понятны и полны, как в других редакторах Python.
- Не все функции Jupyter Notebook работают в ArcGIS Pro (но это продолжает дорабатываться).
Существует несколько других способов запуска кода Python, в том числе запуск кода в блокноте Notebooks, запуск скрипта с помощью командной строки или планирование запуска скрипта из операционной системы. Все это описано в других руководствах.
Вы научились писать и запускать код Python в блокноте в ArcGIS Pro. Вы узнали о переменных и циклах, двух важных концепциях Python. Вы также узнали, как настроить среду в Python, и как использовать стандартные инструменты геообработки ArcGIS в Python. Это второе из серии руководств о том, как использовать Python в ArcGIS Pro. В дальнейшем будут появляться новые.
Вас также могут заинтересовать книги Python Scripting for ArcGIS Pro и Advanced Python Scripting for ArcGIS Pro автора Dr. Paul A. Zandbergen, опубликованные в Esri Press.