Начало работы с Python в ArcGIS Pro

Настройка проекта и обзор наборов данных

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

  1. Загрузите данные для этого руководства и извлеките содержимое в папку на диске C:\.

    Файл .zip содержит папку с именем PythonStart.

    Примечание:

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

  2. Запустите ArcGIS Pro. Если будет предложено, войдите под лицензированной учетной записью организации ArcGIS.
    Примечание:

    Если у вас нет доступа к ArcGIS Pro или учетной записи организации ArcGIS, см. варианты доступа к программному обеспечению.

  3. Под Новым проектом щелкните Карта.

    Шаблон карты

  4. В окне Новый проект в поле Имя введите Начало работы с Python. В опции Местоположение укажите свою папку C:\PythonStart.
  5. Снимите отметку Создать новую папку для этого локального проекта.

    Окно Создать новый проект с отмеченной опцией Создать новую папку для этого локального проекта

  6. Нажмите OK.

    Проект откроется с пустой картой.

  7. Если панель Каталог не видна, на вкладке Вид щелкните Панель Каталог. При необходимости закрепите панель Каталог в правой части интерфейса ArcGIS Pro.
  8. В панели Каталог разверните Папки и разверните PythonStart.

    Вид Каталог с папкой PythonStart и шестью шейп-файлами

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

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

  9. Щелкните правой кнопкой мыши ambulances.shp и выберите Добавить к текущей карте.

    Карта приблизится к Торонто, Канада, где расположены точки для слоя машин скорой помощи.

  10. На панели Содержание щелкните правой кнопкой мыши слой ambulances и щелкните Таблица атрибутов.

    Появится таблица атрибутов. Внизу таблицы указано количество записей.

    Подсчет количества объектов в шейп-файле ambulances

    Шейп-файл содержит 48 записей, что означает 48 уникальных объектов. Далее вы определите то же количество с помощью инструмента.

  11. Закройте таблицу атрибутов.

Запуск инструмента с помощью Python

Далее вы запустите инструмент геообработки в ArcGIS Pro. Далее вы запустите тот же инструмент с помощью кода Python.

  1. Щелкните вкладку Анализ на ленте. В группе Геообработка щелкните Инструменты.

    Кнопка Инструменты

    Откроется панель Геообработка.

  2. В строке поиска панели Геообработка введите количество и нажмите Enter.
  3. Щелкните инструмент Посчитать строки.
  4. На панели инструмента Посчитать строки для параметра Входные строки выберите ambulances.

    Панель инструмента Посчитать строки

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

    По завершении работы инструмента в нижней части панели появится сообщение.

    Сообщение о завершении выполнения инструмента Посчитать строки

  6. Щелкните Просмотреть подробности.

    Появится окно Посчитать строки (инструменты управления данными) с открывшейся вкладкой Сообщения.

    Сообщения с результатами работы инструмента Посчитать строки

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

  7. Закройте окно Посчитать строки.

    Далее вы используете Python, чтобы запустить этот же инструмент.

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

    История в группе Геообработка на вкладке Анализ

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

    Панель истории с записью одного инструмента

  9. На вкладке Анализ в группе Геообработка откройте ниспадающее меню для кнопки Python и нажмите кнопку окно Python.

    Опция Окно Python

    Откроется окно Python.

    Окно Python с пустым окном написания скриптов и разделом подсказок

    Примечание:

    Вы можете переместить или закрепить окно Python в любом удобном вам месте. В этом примере окно закреплено под картой.

    Верхняя часть окна Python называется транскриптом, а нижняя часть – строкой ввода. Транскрипт изначально пуст. Транскрипт содержит запись ранее введенного кода и его результаты.

    В строке ввода вы вводите код. Когда окно Python открывается впервые, в приветственном сообщении отображается сообщение Инициализация интерпретатора Python, что означает, что окно готовится к приему вашего кода. Через несколько секунд сообщение будет заменено на Введите здесь код Python, что означает, что вы можете начать вводить свой код. После первого открытия окна Python эти сообщения больше не появляются в текущем сеансе.

  10. В окне Python введите arcpy.management.GetCount("ambulances").

    Окно Python с кодом из панели История

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

    Примечание:

    Примеры Python включены во все разделы справки по инструментам геообработки. Например, в разделе справки Посчитать строки в разделе Параметры, щелкните Python и вы увидите пример кода.

  11. Нажмите Enter.

    Код запустится, результатом будет <Result '48'>.

    Результат запуска инструмента Get Count выводится в разделе транскрипта

    Хотя форматирование немного отличается, это то же количество записей, которое вы определили ранее. Выполнение строки кода в окне Python дает те же результаты, что и запуск инструмента с помощью панели инструмента. Запуск кода в окне Python создал новую запись в панели История.

    Панель истории с записями для двух инструментов

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

  12. В окне Python щелкните код правой кнопкой мыши и выберите Очистить транскрипт.

    Очистить транскрипт в окне Python

    Все, что выполнялось в предыдущем коде, остается в памяти.

Запустить код в окне Python

В окне Python удобно тренироваться в написании кодов Python.

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

    print("GIS is cool")

    Строка кода в окне Python

    В этой строке кода print() – это функция. Функция в Python выполняет определенную задачу. В данном случае функция выводит текст. Большинство функций в Python имеют аргументы или параметры, которые указываются в скобках после самой функции. В данном случае аргументом является строка. Строка в Python состоит из последовательности символов. Вы создаете строку, заключая символы в пару кавычек.

    Python использует как одинарные, так и двойные кавычки для идентификации строк при условии, что они используются последовательно. Таким образом, print("GIS is cool") и print('GIS is cool') верно, но print("GIS is cool') приводит к ошибке. Кавычки в Python всегда прямые (не наклонные). Они автоматически форматируются таким образом, когда вы вводите код в окне Python или в другой среде написания кода. Иногда, если вы копируете код, который был отформатирован или написан в текстовом редакторе, прямые кавычки могут быть заменены наклонными кавычками. Например, print(“GIS is cool”) приведет к ошибке.

  2. Щелкните на окончании строки кода и нажмите Enter.

    Строка кода запускается и копируется в транскрипт, за которой следует результат.

    Текстовая строка выводится в транскрипт

    В строке ввода снова пусто, она готова к получению следующей строки кода.

    Это простой пример, но он иллюстрирует ключевой момент выполнения кода Python. Вы пишете одну строку кода, которая включает специфические инструкции, которые необходимо выполнить. Когда вы нажимаете Enter, запускается строка кода и выполняются инструкции. В этом примере инструкции состоят из вывода текста на экран, но инструкции могут состоять из множества других задач, как вы уже видели при запуске инструмента Посчитать строки.

    Далее вы попрактикуетесь с еще несколькими строками кода.

  3. В строке ввода введите следующую строку кода:

    x = 37

    В этой строке кода x является переменной. Переменная подобна контейнеру, в котором хранится значение. В этом примере это целое число 37, но это может быть другое число, текст или имя набора данных. Строка кода называется присвоением, поскольку переменной присваивается значение. Одиночный знак равенства используется в присвоении переменной, чтобы указать, что переменная устанавливается равной значению. Переменные присваиваются, чтобы в дальнейшем их можно было использовать в коде.

  4. В конце строки кода нажмите Enter.

    Присвоение перемещено в транскрипт, но не выведено на печать

    Строка кода выполняется, но результат не печатается. Переменной присваивается значение, но нет других инструкций для выполнения.

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

    y = 73

    Эта строка еще один оператор присвоения.

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

    x * y

    В этой строке выполняется вычисление, в данном случае умножение значений x и y. Результат напечатан.

    Результат вычисления напечатан в транскрипте

    До сих пор вы вводили строки кода, не слишком заботясь о том, как именно писать каждую строку. При использовании оператора присвоения пробелы необязательны. Следовательно, x = 37 то же самое, что x=37. Обычно пробелы добавляются для удобства чтения.

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

    X * y

    Этот результат - это ошибка:

    NameError: name 'X' is not defined. Did you mean: 'x'?

    Ошибка в результате использования X в верхнем регистре

    Python чувствителен к регистру, поэтому X отличается от x. Вы определили x, присвоив ему значение 37, но заглавной X не было присвоено значение, что объясняет ошибку.

    По мере того, как вы продолжаете запускать строки кода в окне Python, весь ранее запускаемый код и результаты отображаются в транскрипте. Вы можете очистить транскрипт, но это не приведет к очистке значений каких-либо переменных, которые вы назначили, хотя перезапуск сеанса ArcGIS Pro их очистит.

  8. Щелкните правой кнопкой мыши транскрипт и выберите Очистить транскрипт.

    Далее мы рассмотрим более практический пример: преобразование температуры между градусами по Фаренгейту (F) и Цельсию (C). Общая формула:

    F = 9/5 * C + 32

    Это можно записать на Python как простое вычисление.

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

    temp_c = 17

    temp_f = temp_c * 9 / 5 + 32

    print(temp_f)

    Результат расчета печатается.

    Вычисленное значение температуры

    Первая строка кода присваивает числовое значение переменной temp_c. Вторая строка выполняет вычисление с использованием переменной temp_c, и результат присваивается новой переменной temp_f. Третья строка выводит значение переменной temp_f. Эту третью строку также можно записать как temp_f, но часто используется функция print(), поскольку она обеспечивает лучшие опции форматирования.

    Тот же результат можно получить и без использования переменных.

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

    17 * 9 / 5 + 32

    Результат тот же: 62,6.

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

Помощь в написании кода

Окно Python включает несколько функций, которые помогут вам в написании кода. Рассмотрим предыдущий пример использования функции print().

  1. Очистите транскрипт.
  2. В строке ввода введите следующий код:

    pri

    Еще до того, как вы закончили печатать, появляется всплывающее окно с функцией print(). Синий значок с буквой F указывает на то, что это функция. Это называется автозаполнением или автозавершением кода.

    Всплывающая подсказка функции print()

  3. Наведите курсор на всплывающее окно print().

    Это отобразит справку по синтаксису функции.

    Синтаксис функции print()

    Справка по функции print() предоставляет информацию о принимаемых параметрах и их порядке.

    Вы можете продолжить ввод или щелкнуть всплывающую подсказку для автозаполнения этого фрагмента кода.

  4. Щелкните всплывающее окно print().

    Теперь в строке ввода появится функция print(). Пара круглых скобок добавилась ​​автоматически. Если вы не нажимаете всплывающее окно, но продолжаете вводить текст, после ввода print( закрывающая скобка добавится автоматически. Это еще один пример завершения кода, который поможет вам в написании правильного синтаксиса.

    Когда курсор находится внутри круглых скобок, снова появляется справка по синтаксису функции.

  5. Между скобками функции print() введите кавычки.

    Вторая кавычка добавляется автоматически.

    Кавычки в параметре функции print()

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

  6. Удалите код в строке ввода.
  7. Убедитесь, что активная карта все еще содержит векторный слой под именем ambulances.
  8. В строке ввода введите следующий код:

    arc

    Появится всплывающее окно с пакетом ArcPy, обозначенное красным значком с буквой P.

    Пакеты – это способ расширения основного набора кода Python. ArcPy - это пакет, который добавляет функциональность ArcGIS в Python.

  9. Щелкните всплывающее окно arcpy.

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

  10. После arcpy. введите Get, как указано в следующей строке текста:

    arcpy.Get

    Появится список элементов кода, которые начинаются с Get и логически следуют за arcpy.

    Всплывающее окно для элементов кода, начинающихся с arcpy.Get

    Автозавершение кода зависит от контекста. Например, если вы начали набирать в начале строки кода Get (без arcpy.), отображаемые опции будут сильно отличаться от arcpy.Get.

  11. В списке опций щелкните GetCount()management.
    Примечание:

    Слово management после GetCount() указывает на то, что GetCount() является частью набора инструментов Управления.

    Строка ввода заполняется следующим кодом:

    arcpy.management.GetCount()

    Он идентичен коду, который использовался ранее в этом руководстве, где management относится к набору инструментов Управление данными, а GetCount() относится к инструменту Посчитать строки.

    Когда курсор находится между скобками, появляются два всплывающих окна.

    Синтаксис для GetCount

    В нижнем всплывающем окне показан синтаксис инструмента Посчитать строки. Этот синтаксис говорит о том, что единственный параметр называется in_rows, который состоит из вида входной таблицы или из растрового слоя. В верхнем всплывающем окне отображается название слоя ambulances на активной карте. Это - запрос выполнения кода для параметра in_rows инструмента Посчитать строки. Другими словами, окно Python распознает, что слой на активной карте является допустимым параметром инструмента. Вы можете использовать этот слой или ввести что-нибудь еще.

  12. Щелкните всплывающее окно ambulances.

    Строка ввода заполняется следующим кодом:

    arcpy.management.GetCount('ambulances')

    Автозавершение кода в этом случае автоматически добавляет пару кавычек вокруг имени слоя. Автозавершение кода в окне Python – хороший способ изучить правильный синтаксис. Хотя автозавершение кода добавляет одинарные кавычки, вы можете использовать здесь и двойные кавычки.

    Нет необходимости запускать этот код, поскольку он идентичен коду, который вы запускали ранее.

  13. Удалите код в строке ввода.

Итерация с помощью цикла for

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

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

    templist_c = [17, 19, 24, 21, 16]

    Этот код создает список Python, содержащий пять элементов одного типа; в данном случае это значения температуры по шкале Цельсия. Списки – это очень распространенный тип данных в Python. Список состоит из последовательности элементов, заключенных в скобки [ ], иногда называемые квадратными скобками, и элементы разделены запятыми.

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

    for temp_c in templist_c:

    Командная строка после ввода кода for loop в окне Python.

    Когда вы нажимаете Enter в конце этой строки кода, код не запускается, но сам запрос перемещается на следующую строку. Строка кода заканчивается двоеточием, что означает, что последует дополнительный код, и строка не может выполняться сама по себе.

    Строка кода – это начало цикла for, который имеет следующую общую структуру:

    для <элемент> в <список>:

    <выполнить одну или несколько строк кода>

    Цикл for позволяет вам перебирать элементы существующего списка и повторять одни и те же шаги для каждого элемента. Строка кода, содержащая ключевое слово for, заканчивается двоеточием. Следующая строка кода имеет отступ, и все строки кода, которые следуют сразу с тем же отступом, будут запускаться на каждой итерации. Повторяющийся блок кода можно определить по его отступу.

    Окно Python распознает цикл for благодаря использованию двоеточия, и поэтому следующая строка кода имеет отступ.

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

    temp_f = temp_c * 9 / 5 + 32

    Этот код должен оставаться с отступом. Если вы случайно удалили отступ, вы можете сделать отступ строки, добавив четыре пробела в начале. Четыре пробела – это уровень отступа по умолчанию для блока кода.

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

    print(temp_f)

    Использование print() здесь не требуется, но во многих случаях это приводит к лучшему форматированию выходных данных.

    Цикл for в разделе подсказок перед выполнением

    Цикл for завершен и готов к выполнению.

  5. Удерживая курсор на пустой строке кода, нажмите Enter.

    Результат выводится.

    Рассчитанные значения температуры

    Цикл for перебирает все элементы в списке и выполняет те же вычисления. Это очень мощная концепция в программировании, поскольку усилия по написанию кода одинаковы, независимо от того, содержит ли список 5 элементов или 5000.

Создание и перебор списка классов пространственных объектов

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

Вы снова будете использовать инструмент Посчитать строки.

  1. Очистите транскрипт. Убедитесь, что активная карта все еще содержит векторный слой под именем ambulances.
  2. Запустите следующие строки кода:

    count = arcpy.management.GetCount("ambulances")

    print(count)

    Результатом является значение 48. Этот код почти идентичен коду, который вы запускали ранее в этом руководстве, но теперь результат, полученный с помощью инструмента Посчитать строки, присваивается переменной. Это упрощает работу с результатом, хотя на данный момент единственное, что вы делаете с результатом – это выводите его значение.

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

  3. Запустите следующие строки кода:

    count = arcpy.management.GetCount("C:/PythonStart/ambulances.shp")

    print(count)

    Выводится такой же результат.

    Примечание:

    Если вы сохранили папку PythonStart в другом месте на своем компьютере, а не в папке C:\ на диске, вам необходимо будет обновить путь соответствующим образом для этой строки кода и будущих строк кода, которые ссылаются на местоположение папки.

    Путь заключен в кавычки, потому что это строка. В пути используется косая черта (/) вместо обычной обратной косой черты (\). Обратная косая черта в Python используется как управляющий символ, который может изменять значение следующего за ним символа. Это может привести к непредвиденным последствиям при использовании обратной косой черты в строках. Также этот класс пространственных объектов упоминается как ambulances.shp, поскольку расширение файла .shp является частью этого имени. Использование только ambulances вернет ошибку, поскольку в папке нет класса объектов под именем ambulances.

    Вместо указания полного пути вы можете задать рабочую область. Рабочая область – это один из параметров среды, который влияет на операции геообработки. В дополнение к рабочей области, параметры среды включают систему координат выходных данных по умолчанию, размер ячейки по умолчанию для обработки растровых данных и некоторые другие настройки.

  4. Запустите следующие строки кода:

    arcpy.env.workspace = "C:/PythonStart"

    count = arcpy.management.GetCount("ambulances.shp")

    print(count)

    Выводится такой же результат.

    Хотя для настройки рабочей области требуется дополнительная строка кода, часто бывает эффективно пользоваться рабочими областями, поскольку все последующие строки кода ArcPy будут использовать его автоматически. Вторая строка кода больше не требует полного пути. Если в коде не задано рабочей области, используется рабочая область проекта по умолчанию.

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

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

    fc_list = arcpy.ListFeatureClasses()

    Функция ListFeatureClasses() создает список классов пространственных объектов. Назначив его переменной, вы можете использовать список в других задачах.

    Чтобы проверить содержимое списка, вы можете вывести его значения.

  6. Запустите следующие строки кода:

    print(fc_list)

    Результат:

    ['ambulances.shp', 'boundary.shp', 'fire_stations.shp', 'fire_zones.shp', 'voting_divisions.shp', 'voting_sites.shp']

    Далее вы создадите цикл for для перебора элементов в списке.

  7. Введите следующую строку кода и нажмите Enter, чтобы выполнить блок кода:

    for fc in fc_list:

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

    count = arcpy.management.GetCount(fc)

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

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

    print(count)

    В результате выводится количество пространственных объектов для каждого шейп-файла в рабочих областях.

    Количество пространственных объектов для каждого шейп-файла.

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

    Тот же код, что и в окне Python, также можно использовать в ArcGIS Notebooks в ArcGIS Pro (или в Jupyter Notebook, вне ArcGIS Pro). Эти шаги здесь не рассматриваются, но вы можете скопировать код из окна Python и вставить его в ячейку в Notebooks.

    Вы также можете использовать этот код вне ArcGIS Pro в редакторе Python, что вы и сделаете дальше. Вы можете сохранить свой код из окна Python в файл скрипта Python, чтобы начать работу в редакторе Python.

  10. Щелкните правой кнопкой мыши транскрипт в окне Python и нажмите Сохранить запись.
  11. В окне Сохранить транскрипт перейдите в папку C:\PythonStart и сохраните свою работу под именем count_features.py.
  12. Сохраните свой проект и закройте ArcGIS Pro.

    Теперь вы готовы открыть свой скрипт в редакторе Python.

Запуск скрипта в редакторе Python

Несмотря на то, что код Python в ArcGIS Pro удобнее запускать с помощью окна Python или внутри Блокнота, бывают ситуации, когда надо запустить код извне ArcGIS Pro. Типичный пример – это когда вы хотите запланировать запуск скрипта в заранее определенное время, но есть и другие примеры. Например, более сложные проекты часто требуют нескольких элементов кода, которые работают вместе, и обычно это означает организацию кода в нескольких отдельных файлах .py. Вы можете использовать скрипт как часть создания пользовательского инструмента, для которого также требуется файл .py.

Для запуска кода Python вне ArcGIS Pro требуется редактор кода Python, который также называют интегрированной средой разработки (IDE). Вы будете использовать IDE под названием IDLE, что означает Integrated DeveLopment Environment (обратите внимание на заглавную L). IDLE поставляется с каждой установкой Python, поэтому, если на вашем компьютере установлен Python, там также есть и IDLE.

Есть много и других IDE Python, включая PyCharm и Spyder, но IDLE – хорошее решение для начала. Такие IDE, как PyCharm и Spyder, требуют дополнительных действий для загрузки, установки и настройки, в то время как IDLE является частью любой установки Python и готов к использованию.

  1. Запустите Проводник.
  2. Перейдите к папке C:\PythonStart.
  3. Щелкните правой кнопкой файл count_features.py и щелкните Редактировать в IDLE (ArcGIS Pro).

    Опция Редактировать в IDLE в Проводнике

    Откроется скрипт Python в окне написания скриптов в IDLE. Вы также можете увидеть опцию Редактировать в IDLE, если у вас установлен ArcGIS Desktop 10.x. Вам надо использовать Редактировать в IDLE (ArcGIS Pro), так как это откроет скрипт в версии Python, установленной с ArcGIS Pro. ArcGIS Desktop 10.x использует более старую версию Python.

    Примечание:

    Если Редактировать в IDLE (ArcGIS Pro) в контекстном меню не появится, щелкните Пуск, разверните ArcGIS и откройте командную строку Python. В окне Командная строка Python введите idle и нажмите Enter. Откроется окно IDLE (Python 3.9 Shell). Щелкните Файл и выберите Открыть. Перейдите к файлу count_features.py и откройте его.

    Окно написания скриптов в IDLE с экспортированным кодом

    В верхней части окна скрипта версия IDLE в Python. Это версия Python, которая устанавливается с вашим приложением ArcGIS Pro. Скрипт, написанный на Python 3.7, может не работать в более старых (2.x) версиях Python.

    Код включает все ресурсы транскрипта окна Python, включая все результаты. Результатам предшествует символ # или решетка, что означает, что они интерпретируются как комментарии. Python пропускает в этих комментариях, но они могут оказаться очень эффективным способом документирования того, что делают различные части вашего кода.

    Прежде чем приступить к работе с этим кодом, вы быстро ознакомитесь с тем, как работает Python Shell в IDLE.

  4. В верхней части меню IDLE щелкните Запустить и щелкните Python Shell.

    Откроется Python Shell или интерактивный интерпретатор. Символ >>> называют приглашением. Пока вы используете интерактивный интерпретатор, вы можете оставить окно скрипта с файлом count_features.py открытым, так как вы продолжите использовать его позже.

  5. Поместите курсор на окно командной строки (после >>>) и введите следующий код:

    print("GIS is cool")

    Напечатайте код в окне Python Shell.

  6. Нажмите Enter.

    Результат выводится на следующей строке, и появляется новое приглашение.

    Вывод результата в Python Shell

    Запуск кода в интерактивном интерпретаторе аналогичен запуску кода построчно в окне Python. Каждый раз, когда вы нажимаете Enter, запускается строка кода, а результат, если есть, выводится на следующей строке. Одно из ключевых отличий заключается в том, что в Python Shell нет отдельных разделов для транскрипта и окна командной строки, но в остальном эти два подхода почти идентичны.

    Далее вы очистите скрипт и запустите код.

  7. Закройте окно Python Shell и вернитесь в окно написания скриптов для скрипта count_features.py.
  8. Очистите код, удалив все строки перед строкой, начинающейся с arcpy.env.workspace, а также удалите все строки, которые являются результатами, обозначенными символом #, что означает комментарии к коду.
  9. Удалите эти две последовательные строки:

    count = arcpy.management.GetCount("ambulances.shp")

    print(count)

  10. Удалите эту строку:

    print(fc_list)

    Оставшийся код - это:

    
    arcpy.env.workspace = "C:/PythonStart"
    fc_list = arcpy.ListFeatureClasses()
    for fc in fc_list:
        count = arcpy.management.GetCount(fc)
        print(count)

    Скрипт подсчета объектов в IDLE

  11. Убедитесь, что последняя строка имеет отступ в четыре пробела, чтобы соответствовать строке выше.
  12. Щелкните Файл и затем Сохранить, чтобы сохранить скрипт.
  13. Щелкните Запустить и затем Запустить модуль, чтобы запустить скрипт.

    Результат выводится в интерактивном окне.

    Python Shell с сообщением об ошибке

    Вместо того, чтобы вывести количество объектов, интерактивное окно выводит следующую ошибку:

    NameError: name 'arcpy' is not defined

    Причина ошибки в том, что вы используете пакет ArcPy, но код работает за пределами ArcGIS Pro. Чтобы использовать пакет, его необходимо импортировать в верхней части скрипта.

  14. Закройте окно Python Shell.
  15. Поместите курсор в позицию первого символа первой строки скрипта. Нажмите Enter.

    В начало скрипта будет добавлена пустая строка.

  16. Добавьте следующий код в первую строку скрипта:

    import arcpy

    Окно написания скриптов в IDLE с готовым скриптом

  17. Сохраните и запустите свой скрипт.

    Результат с подсчетом выводится в интерактивном окне.

    Python Shell с выведенным количеством объектов

    При первом использовании ArcPy в скрипте для отображения результатов может потребоваться несколько минут, необходимых Python для импорта ArcPy.

    Результат идентичен запуску кода в ArcGIS Pro, но ArcGIS Pro не обязательно должен быть открыт для запуска скрипта (но он должен быть установлен и лицензирован на компьютере, который вы используете).

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

Сравнение подходов к запуску кода Python

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

МетодПлюсыМинусы

Окно Python в ArcGIS Pro

  • Легко начать
  • Взаимодействие с данными и картами внутри ArcGIS Pro
  • Предоставляет интуитивно понятную помощь в написании кода
  • Ограничено относительно короткими фрагментами кода
  • Отсутствуют многие функции, обычно встречающиеся в редакторах Python
  • Не предназначен для сохранения и систематизации ваших скриптов
  • Можно использовать только в ArcGIS Pro

Редактор Python (IDE)

  • Код запускается без открытого ArcGIS Pro
  • Включает множество функций, помогающих писать и тестировать более сложный код
  • Работа сохраняется в виде файлов .py для организации более сложных проектов кода
  • Разные IDE подходят для разных типов пользователей и уровней подготовки
  • Некоторые IDE можно использовать для нескольких языков программирования
  • Функциональность зависит от конкретной используемой IDE
  • Предложения завершения кода могут отсутствовать в зависимости от IDE
  • Некоторым IDE требуется настраиваемая конфигурация, прежде чем их можно будет использовать с ArcGIS Pro
  • Некоторые IDE могут быть сложными для начинающих пользователей

Примечание:

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

Есть несколько других способов запустить код Python. Это включает запуск кода в Блокноте, запуск скрипта из командной строки или планирование запуска скрипта из операционной системы. Все это описано в других руководствах.

Вы узнали, как написать и запустить код Python в окне Python и в IDLE. Вы узнали о переменных и циклах, двух очень важных понятиях в Python. Вы также узнали, как настроить среду в Python, и как использовать стандартные инструменты геообработки ArcGIS в Python. Это - первое из серии руководств по использованию Python в ArcGIS Pro – следите за выходом последующих!

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

Вы можете найти больше учебных пособий в галерее учебных пособий.