Para empezar
ArcGIS API for Python es una biblioteca de Python para la automatización de Web GIS. La23ª vez GISSe llevó a cabo la sesión centrada en la automatización de operaciones en ArcGIS Online durante el 23º Community Forum de GIS.
Sobre la sesión
Del 27 (miércoles) al 29 (viernes) de mayo de 2026, en Roppongi, Midtown Tokyose celebró el "23º Community Forum de GIS".Aquí está el resumen completo de la sesión.
El resumen completo de la sesión está aquí.
En la sesión "Curso básico de ArcGIS API for Python: Introducción a la operación y automatización de Web GIS" del último día, 29 a las 15:55, se presentaron desde conceptos básicos hasta varios consejos sobre ArcGIS API for Python, que es una biblioteca para automatizar Web GIS.
Los consejos se basaron en contenidos prácticos, pero recibimos comentarios como "Me gustaría poder hacer cosas similares", "Quisiera ver más ejemplos de código", por lo que decidimos explicarlo en este artículo.
ArcGIS API for Python es una API basada en Python que permite automatizar operaciones en ArcGIS Online y ArcGIS Enterprise.
Para explicaciones básicas sobre ArcGIS API for Python, consulte esta serie de artículos.
Contenido del artículo
En este artículo se explican los consejos presentados en la sesión utilizando demos en orden.
- Inicio de sesión (autenticación)
- Eliminación masiva de carpetas y elementos
Ejecución periódica
- Contenido para ejecución periódica
- Uso de Feature Layer
- Script para actualizar Feature Layer
- Preparación para autenticación con ítem referer
- Configuración de tareas
- Autenticación
- Puntos a tener en cuenta al compartir
Inicio de sesión (autenticación)
Primero, el inicio de sesión es necesario para acceder a funciones como ítems privados o mapas base en ArcGIS. A continuación se explica con diapositivas.
Con ArcGIS API for Python, tras autenticarse, se accede y opera con contenidos públicos o propios. En entornos conectados a ArcGIS como ArcGIS Pro o ArcGIS Online con inicio de sesión, puede autenticarse fácilmente con GIS("home").
・Python Window en ArcGIS Pro
・Notebook en ArcGIS Online / ArcGIS Enterprise
・Entorno que ejecuta python.exe del entorno clone en ArcGIS Pro
En entornos donde esto no aplica, como Google Colab o sin instalar ArcGIS Pro, no puede usar GIS("home"), por lo que debe autenticarse usando ID y contraseña o clave API. Hay otros métodos que también puede consultar en referencia del módulo GIS.
A continuación se muestra un ejemplo que muestra información básica del portal usando autenticación con clave API.
# Autenticación con clave API
gis = GIS(api_key="<YOUR_API_KEY>",referer="https")
# Mostrar objeto GIS
print(gis)
# Mostrar usuario actual
print(gis.users.me)
# Mostrar ítem privado
myItem = gis.content.get("<ID del ítem>")
myItem
Eliminación masiva de carpetas y elementos
Continuando con la eliminación masiva de carpetas y elementos.
En la sesión mostramos un video explicando cómo eliminar carpetas y su contenido masivamente, pero aquí usamos las clases Folders や Folder を使って実行していました。
ここではフォルダーを一つ一つ取得し、ルート フォルダーでなければフォルダー名を表示し削除を行い、削除ができないルート フォルダーは最後にアイテムの削除のみを行っています。
# 認証(ここでは ID とパスワードを使用)
from arcgis.gis import GIS, Item
gis = GIS("ポータルURL", "削除対象ユーザーネーム", "パスワード")
print(gis)
# フォルダ一一覧を取得
folders = gis.content.folders.list()
# フォルダー名をリストで取得
folder_names = [f.name for f in folders]
# 結果を表示
for name in folder_names:
#if name!='Root Folder':
print(f"フォルダーの名前は {name}")
folder_name = name
folder = gis.content.folders.get(folder_name)
if name!='Root Folder':
if folder is None:
print(f"フォルダー '{folder_name}' は見つかりませんでした。")
else:
# フォルダー内のアイテムも合わせて削除する
ok = folder.delete()
if ok:
print(f"フォルダー '{folder_name}' とその中身を削除しました。")
else:
print(f"フォルダー '{folder_name}' の削除に失敗しました。")
elif name=='Root Folder':
if folder is None:
print(f"フォルダー '{folder_name}' は見つかりませんでした。")
else:
root_items = gis.users.me.items()
for item in root_items:
try:
print(f"{item.title} ({item.type})を削除しました")
item.delete()
except Exception as e:
print(f"Error deleting {item.title}: {e}")
ここで紹介した方法以外にも GIS モジュールの search メソッドで所有アイテムを検索し、アイテムを全て削除してからフォルダーを削除する方法でも同様の作業が実行できます。
定期実行
定期実行させる内容
この項では以下のような流れで外部 API と連携した Feature Layer の更新を行います。
次のセクションから各手順を説明します。
Feature Layer の用意
最初の手順として、更新するための材料を用意します。 以下のようなスクリプトで API から取得した情報を処理し、更新用データを作成します。 ここでは ArcGIS Online のノートブックで実行することを想定しています。 ※ArcGIS Online のノートブックの詳しい使い方はこちらを参照してください。
実行する時は ArcGIS Online のノートブックで新しいノートブックを Standard で作成し、1 セル目に上書きするように貼り付けてください。
from arcgis.gis import GIS
from arcgis.features import FeatureLayerCollection
import requests
import time
# 1) 接続(ここでは home で認証する)
gis = GIS("home")
# 2) ISS API から取得
ISS_URL = "http://api.open-notify.org/iss-now.json" # [1](http://open-notify.org/Open-Notify-API/ISS-Location-Now/)
def fetch_iss():
r = requests.get(ISS_URL, timeout=30)
r.raise_for_status()
data = r.json()
lat = float(data["iss_position"]["latitude"])
lon = float(data["iss_position"]["longitude"])
ts_sec = int(data["timestamp"])
ts_ms = ts_sec * 1000
return lat, lon, ts_ms
# 3) Hosted Feature Service 作成
SERVICE_NAME = "ISS_Last3Points"
service_item = gis.content.create_service(
name=SERVICE_NAME,
service_type="featureService"
)
flc = FeatureLayerCollection.fromitem(service_item)
# 4) レイヤー定義
layer_def = {
"layers": [{
"name": "<作成する Feature Layer の名前>",
"type": "Feature Layer",
"geometryType": "esriGeometryPoint",
"spatialReference": {"wkid": 4326},
"objectIdField": "ObjectID",
"fields": [
{"name": "ObjectID", "type": "esriFieldTypeOID", "alias": "ObjectID"},
{"name": "latitude", "type": "esriFieldTypeDouble", "alias": "latitude"},
{"name": "longitude", "type": "esriFieldTypeDouble", "alias": "longitude"},
{"name": "obs_time", "type": "esriFieldTypeDate", "alias": "obs_time"},
]
}]
}
# 5) 定義をサービスに追加
flc.manager.add_to_definition(layer_def)
layer = flc.layers[0]
# 6) 初期 3 件投入(ISS API 推奨に考慮して 5 秒間隔)
adds = []
for i in range(3):
lat, lon, ts_ms = fetch_iss()
adds.append({
"geometry": {"x": lon, "y": lat, "spatialReference": {"wkid": 4326}},
"attributes": {"latitude": lat, "longitude": lon, "obs_time": ts_ms}
})
if i < 2:
time.sleep(5) # ポーリング過多を避ける [1](http://open-notify.org/Open-Notify-API/ISS-Location-Now/)
res = layer.edit_features(adds=adds)
print("作成したアイテム ID:", service_item.id)
print("レイヤーURL:", layer.url)
print("追加結果:", res)
実行が終わるとこのようにアイテムが作られます。スクリプトで指定した名前でアイテムが作成されていることを確認します。
これで更新用データの用意はできました。
Feature Layer を更新するスクリプト
先ほど作成したアイテムの ID を使って更新をします。 アイテム ページの [URL] の下の下矢印を開いてアイテム ID を探します。
次に、以下のスクリプトを使用してデータの更新を行います。 ここでは 3 件あるフィーチャのうち、最も古いものを削除し、取得したデータを新たに追加するように処理しています。新しく Standard でノートブックを作成し、データ作成時と同じように 1 セル目に上書きするように貼り付けてください。
from arcgis.gis import GIS
import requests
gis = GIS("home")
ITEM_ID = "<作成したアイテム ID>"
ISS_URL = "http://api.open-notify.org/iss-now.json"
def fetch_iss():
r = requests.get(ISS_URL, timeout=30)
r.raise_for_status()
data = r.json()
lat = float(data["iss_position"]["latitude"])
lon = float(data["iss_position"]["longitude"])
ts_sec = int(data["timestamp"])
ts_ms = ts_sec * 1000
return lat, lon, ts_ms
# 1) Obtener el rastreador
item = gis.content.get(ITEM_ID)
layer = item.layers[0]
# 2) Obtener 3 elementos existentes en orden cronológico (orden antiguo)
# order_by_fields corresponde a orderByFields en REST
fset = layer.query(
where="1=1",
out_fields="ObjectID,obs_time",
order_by_fields="obs_time ASC"
)
features = fset.features
# 3) Si hay 3 o más elementos, eliminar el más antiguo
if len(features) >= 3:
oldest_oid = features[0].attributes.get("ObjectID")
# deletes en edit_features es una cadena con IDs OID separados por comas [10](https://gis.stackexchange.com/questions/278263/arcgis-api-for-python-delete-multiple-features)
del_res = layer.edit_features(deletes=str(oldest_oid))
print("Eliminado:", del_res)
# 4) Agregar un nuevo elemento
lat, lon, ts_ms = fetch_iss()
new_feature = {
"geometry": {"x": lon, "y": lat, "spatialReference": {"wkid": 4326}},
"attributes": {"latitude": lat, "longitude": lon, "obs_time": ts_ms}
}
add_res = layer.edit_features(adds=[new_feature])
print("Agregado:", add_res)
# 5) Confirmar el número actual de elementos
cur_cnt = layer.query(where="1=1", return_count_only=True)
print("Número actual de elementos:", cur_cnt)
Cuando la ejecución es exitosa, se mostrará un mensaje sobre la eliminación y actualización como se indica a continuación.
Con esto se completa la preparación del script para la actualización. A continuación, crearemos un ítem para confirmar la actualización.
Preparación del ítem para confirmación
Primero crearemos un Web Map. Abra el ítem Feature Layer en Map Viewer y desde [Guardar y abrir][Haga clic en [Guardar con nombre] para guardar y crear un Web Map.
Así, cuando se realice una actualización, podrá recargar el mapa y confirmar la actualización. Además, desde el Web Map abra la configuración del rastreador Feature Layer y active la casilla "Actualizar rastreador automáticamente" para que pueda confirmar la actualización sin recargar el navegador.
A continuación se muestra un ejemplo de ejecución.
Configuraremos para actualizar periódicamente el punto creado a continuación.
Configuración de tarea
※En la ejecución de la tarea,se consumen créditos según el tiempo de ejecución. Al configurar recomendamos considerar sus créditos disponibles.