Найти в Дзене

ArcPy + pandas: Удобная связка для работы с базами геоданных ArcGIS PRO

Недавно на работе появилась задача автоматизировать редактирование всех слоёв в базах геоданных ArcGIS Pro. Делать это вручную было нерационально — приходилось обновлять десятки однотипных слоёв в нескольких базах данных. Самым логичным решением стало написать универсальный Python-скрипт, который мог бы обрабатывать все слои автоматически. Для этого пришлось глубже познакомиться с ArcPy — встроенной библиотекой Python для ArcGIS, обеспечивающей прямой доступ к базам геоданных. 📘 Примеры кода можно найти в моих рабочих блокнотах:
👉 github.com/babykelp/donut_plots Первым шагом было создание отдельной среды на основе системного интерпретатора arcgispro-py3 через командную строку ArcGIS Pro и её подключение к VS Code.
Такой подход позволяет работать в привычной IDE, при этом используя полный функционал ArcPy. ⚠️ Важно: ArcPy, в отличие от ArcGIS API for Python, работает только на компьютере с установленной лицензией ArcGIS Pro.
Это единственный способ получить доступ к локальным базам
Оглавление

Недавно на работе появилась задача автоматизировать редактирование всех слоёв в базах геоданных ArcGIS Pro. Делать это вручную было нерационально — приходилось обновлять десятки однотипных слоёв в нескольких базах данных.

Самым логичным решением стало написать универсальный Python-скрипт, который мог бы обрабатывать все слои автоматически. Для этого пришлось глубже познакомиться с ArcPy — встроенной библиотекой Python для ArcGIS, обеспечивающей прямой доступ к базам геоданных.

📘 Примеры кода можно найти в моих рабочих блокнотах:
👉
github.com/babykelp/donut_plots

⚙️ Настройка среды

Первым шагом было создание отдельной среды на основе системного интерпретатора arcgispro-py3 через командную строку ArcGIS Pro и её подключение к VS Code.

Такой подход позволяет работать в привычной IDE, при этом используя полный функционал ArcPy.

⚠️ Важно: ArcPy, в отличие от ArcGIS API for Python, работает только на компьютере с установленной лицензией ArcGIS Pro.
Это единственный способ получить доступ к локальным базам геоданных (.gdb) напрямую.

В версии ArcGIS Pro 3.0.3 по умолчанию устанавливается Python 3.9.11.

После настройки среды можно импортировать необходимые библиотеки:

import arcpy, pandas as pd, os

  • os — помогает обходить каталоги и обрабатывать сразу несколько слоёв;
  • pandas — значительно упрощает работу с табличными структурами данных (если вы работаете с таблицами в Python, вы наверняка уже знакомы с этой библиотекой).

🧭 Поиск нужных слоёв в базе

Далее указываем путь к геобазе данных или к конкретной папке внутри неё, если хотим обработать не все файлы, а определённую группу:

# ========= найти необходимые слои =========
arcpy.env.workspace = ".../Default.gdb/risk" # задаём рабочую директорию
fcs = arcpy.ListFeatureClasses() or []
print(f"Найдено слоёв: {len(fcs)}")
#====================================

Команда arcpy.ListFeatureClasses() возвращает список всех feature class (слоёв), доступных в указанной директории.

Теперь можно проходить по ним циклом и применять нужные операции.

🏷 Присвоение новых псевдонимов (алиасов)

Следующий шаг — массовое обновление алиасов (псевдонимов полей), которые заранее подгружены из Excel.

Этот процесс удобнее реализовать через два вспомогательных списка:

changes = [] # (fc, field_name, old_alias, new_alias, duration_s)
skipped = [] # (fc, field_name, reason)

Здесь:

  • changes хранит все реальные изменения, применённые к полям;
  • skipped — информацию о тех полях, которые были пропущены (например, если алиас уже корректный или отсутствует в Excel).
-2

Перед запуском скрипта на реальных данных стоит использовать безопасный тестовый режим (DRY_RUN), который только фиксирует, что было бы изменено, но не вносит изменений в базу:

if DRY_RUN:
changes.append((fc, f.name, current_alias, desired, 0.0))
continue

⚠️ Метод arcpy.management.AlterField() действительно изменяет структуру таблицы, поэтому с ним стоит быть предельно осторожным. Всегда проверяйте логи и результаты «сухого прогона» перед тем, как запускать реальные обновления.

Точно также можно например строить графики из слоёв базы данных с помощью matplotlib. Достаточно просто превратить слои в pd.DataFrame и работать как с обычной таблицей через pandas.