Автоматизация обновлений сервиса объектов

В этой статье мы рассмотрим пример организации автоматического обновления сервисов объектов(Feature Service), которые хостятся в облаке ArcGIS Online или в ArcGIS Enterprise. Эта задача не потребует написания большого объема кода, поскольку в ArcGIS Python API уже есть готовые функции, которые сделают большую часть работы.

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

Файл Excel, с помощью которого будет производиться обновление сервиса, имеет три поля OBJECTID, Name и Sales. Поле OBJECTID будет использоваться как связующее.

Для обновления сервиса напишем следующий код:


import arcgis
import pandas as pd

# URL сервиса объектов
fs_url = ‘https://services1.arcgis.com/mEGhbQPZaocjeLEf/arcgis/rest/services/DistrictsSample/FeatureServer/0’

# Путь к файлу Excel
excel_path = r’D:/ServiceUpdate/DistrictsSample.xlsx’

# Авторизация в ArcGIS Online
gis = arcgis.GIS(username=’…..’, password=’……’)

# Подключение к сервису (создание объекта FeatureLayer)
my_service = arcgis.features.FeatureLayer(fs_url)

# Импорт файла Excel в Pandas DataFrame
excel_df = pd.read_excel(excel_path)

# Конвертация DataFrame в FeatureSet
update_feature_set = arcgis.features.FeatureSet.from_dataframe(excel_df)

# Обновление сервиса объектов
my_service.edit_features(updates=update_feature_set)


Подставьте свой логин-пароль к ArcGIS Online, путь к сервису объектов и путь к файлу Excel. После этого можно запускать скрипт.

Скрипт использует все поля из файла Excel для обновления соответствующих полей сервиса объектов. Поле OBJECTID останется неизменным, поскольку является связующим и уникальным идентификатором объекта в сервисе. Скрипт не будет добавлять новые строки или удалять имеющиеся, он будет обновлять те записи, которые уже хранятся в сервисе.

Наиболее простой вариант выполнения кода — локальный. Код сохраняется в текстовом файле с расширением .py и запускается из планировщика задач Windows. Пошаговую инструкцию можно найти здесь.

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

gis = arcgis.GIS(username=’…..’, password=’……’, profile=’my_org’)

В таком случае логин и пароль будут сохранены локально в защищенном хранилище Windows и в следующий раз вы сможете авторизоваться с помощью более короткого кода:

gis = arcgis.GIS(profile=’my_org’)

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