Introductie
ArcGIS API voor Python is een Python-bibliotheek voor automatisering van Web GIS. De23eeditie GIScommunity forum richtte zich op automatisering van ArcGIS Online operaties.
Over het forum
Van woensdag 27 mei tot vrijdag 29 mei 2026 vond het plaats in Roppongi, Midtown Tokyode "23e GIS Community Forum"werd gehouden.
Hier vindt u een samenvatting van het hele forum.
Op de laatste dag, vrijdag 29 mei om 15:55, werd in de sessie "Basislezing ArcGIS API voor Python: Introductie tot Web GIS-operaties en automatisering" een aantal basisinhoud en tips over ArcGIS API voor Python, een bibliotheek voor automatisering van Web GIS, gepresenteerd.
De tips zijn gebaseerd op praktische voorbeelden die ik heb uitgevoerd, maar er waren verzoeken zoals "Ik wil dat je laat zien hoe je hetzelfde kunt doen" en "Ik wil meer voorbeeldcode zien", dus ik zal het hier in dit artikel uitleggen.
ArcGIS API voor Python is een Python-gebaseerde API waarmee u operaties in ArcGIS Online en ArcGIS Enterprise kunt automatiseren.
Voor basisuitleg over ArcGIS API voor Python verwijzen we u naar deze serie artikelen.
Inhoud van dit artikel
In dit artikel worden de tips die tijdens het forum met demo's werden gepresenteerd in volgorde uitgelegd.
- Sign-in (authenticatie)
- Batch verwijderen van folders en items
Periodieke uitvoering
- Inhoud voor periodieke uitvoering
- Gebruik van Feature Layer
- Script om Feature Layer bij te werken
- Voorbereiding authenticatie-item
- Taakinstellingen
- Authenticatie
- Aandachtspunten bij delen
Sign-in (authenticatie)
Allereerst is sign-in (authenticatie) nodig om toegang te krijgen tot essentiële functies van ArcGIS zoals private items en basismaps. Hieronder wordt dit uitgelegd met slides.
Met ArcGIS API voor Python voert u na authenticatie bewerkingen uit op openbare content of uw eigen private content. In omgevingen zoals ArcGIS Pro of ArcGIS Online waar u bent aangemeld, kunt u eenvoudig authenticeren met GIS("home").
・Python-window in ArcGIS Pro
・Notebook in ArcGIS Online / ArcGIS Enterprise
・Omgeving waarin python.exe van de ArcGIS Pro-omgeving wordt gebruikt
In omgevingen waar dit niet van toepassing is, zoals Google Colab of omgevingen zonder installatie van ArcGIS Pro, kunt u niet GIS("home") gebruiken. U moet dan authenticeren met ID en wachtwoord of met een API-sleutel. Er zijn meerdere methoden voor authenticatie; zie ook de referentiehandleiding van het GIS-model.
Hieronder volgt een voorbeeld dat enkele informatie toont over een paar private accounts met API-sleutel authenticatie.
#API sleutel authenticatie
gis = GIS(api_key="<YOUR_API_KEY>",referer="https")
#Weergave van het GIS-object
print(gis)
#Weergave van de gebruiker
print(gis.users.me)
#Weergave van een private item
myItem = gis.content.get("<Item ID>")
myItem
Batch verwijderen van folders en items
Vervolg: batch verwijderen van folders en items.
In het forum werd getoond hoe je folders en hun inhoud in batch verwijdert via video, maar hieronder wordt uitgelegd hoe je dit doet met de volgende code door gebruik te maken van de Folders klasse en Folder klasse.
Hier halen we folders één voor één op, tonen foldernamen als ze geen root folder zijn en verwijderen ze. Root folders kunnen alleen worden verwijderd door items te verwijderen.
# Authenticatie (hier gebruiken we ID en wachtwoord)
from arcgis.gis import GIS, Item
gis = GIS("portalURL", "gebruikersnaam", "wachtwoord")
print(gis)
# Ophalen lijst met folders één voor één
folders = gis.content.folders.list()
# Ophalen lijst met foldernamen
folder_names = [f.name for f in folders]
# Resultaat weergeven
for name in folder_names:
#if name!='Root Folder':
print(f"Foldernaam is {name}")
folder_name = name
folder = gis.content.folders.get(folder_name)
if name!='Root Folder':
if folder is None:
print(f"Folder '{folder_name}' is niet gevonden.")
else:
# Verwijder ook items binnen de folder samen met de folder zelf.
ok = folder.delete()
if ok:
print(f"Folder '{folder_name}' en de inhoud zijn verwijderd.")
else:
print(f"Verwijderen van folder '{folder_name}' is mislukt.")
elif name=='Root Folder':
if folder is None:
print(f"Folder '{folder_name}' is niet gevonden.")
else:
root_items = gis.users.me.items()
for item in root_items:
try:
print(f"{item.title} ({item.type}) is verwijderd")
item.delete()
' except Exception as e:',' print(f"Fout bij verwijderen {item.title}: {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) Viewer ophalen
item = gis.content.get(ITEM_ID)
layer = item.layers[0]
# 2) Bestaande 3 items ophalen in chronologische volgorde (oudste eerst)
# order_by_fields komt overeen met REST's orderByFields specificatie
fset = layer.query(
where="1=1",
out_fields="ObjectID,obs_time",
order_by_fields="obs_time ASC"
)
features = fset.features
# 3) Als er 3 of meer items zijn, verwijder dan het oudste item
if len(features) >= 3:
oldest_oid = features[0].attributes.get("ObjectID")
# deletes van edit_features verwacht een "OID-komen-gescheiden string" als basis [10](https://gis.stackexchange.com/questions/278263/arcgis-api-for-python-delete-multiple-features)
del_res = layer.edit_features(deletes=str(oldest_oid))
print("Verwijderd:", del_res)
# 4) Voeg 1 nieuw item toe
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("Toegevoegd:", add_res)
# 5) Controleer het huidige aantal items
cur_cnt = layer.query(where="1=1", return_count_only=True)
print("Huidig aantal items:", cur_cnt)
Als de uitvoering slaagt, wordt hieronder een bericht weergegeven over verwijderen en bijwerken.
Hiermee is de voorbereiding van het update-script voltooid. Vervolgens maken we een item om updates te controleren.
Voorbereiding van het verificatie-item
Eerst maken we een Web Map. Open het Feature Layer-item in Map Viewer en klik op [Opslaan en openen] [Geef een naam op en klik op [Opslaan] om de Web Map te maken.
Wanneer de update wordt uitgevoerd, kunt u de map opnieuw laden en de update verifiëren. Ook kunt u vanuit de Web Map de instellingen van de Feature Layer openen en het vinkje bij 'Viewer automatisch bijwerken' aanzetten zodat u niet telkens de browser hoeft te herladen om updates te zien.
Hieronder staat een voorbeeld van uitvoering.
We stellen in dat het gemaakte punt periodiek wordt bijgewerkt.
Instellingen voor taak
※Tijdens uitvoering van de taak worden credits verbruikt afhankelijk van de uitvoeringstijd.Bij het instellen raden we aan rekening te houden met uw beschikbare credits.
We gebruiken de taakfunctie van ArcGIS Online-notebooks om periodiek updates uit te voeren op gemaakte data.
Selecteer het tabblad [Taak] bovenaan het notebook en klik op [Taak maken].
Voer een titel in [] en klik vervolgens op [Volgende] om details van taakplanning in te stellen. Voer daarna instellingen uit en klik op [Maken]. Hiermee wordt de notebook uitgevoerd volgens het opgegeven interval.
Verificatie van update
Door op de naam van de gemaakte taak te klikken kunt u de geschiedenis van uitgevoerde taken controleren. De onderstaande afbeelding toont geschiedenis met een interval van 15 minuten zoals in het voorbeeld beschreven.
Nadat u hebt bevestigd dat updates plaatsvinden opent u de verificatie Web Map. U ziet daarin dat internationale ruimtestation-locatiepunten met een interval van 15 minuten worden weergegeven. In dit voorbeeld is gebruik gemaakt van een Web Map waarvan de symbolen vooraf in Map Viewer zijn bewerkt.
Opmerkingen bij delen
Tot nu toe hebben we een Feature Layer en Web Map gemaakt die periodiek worden bijgewerkt, maar met deze methode kunt u geen Feature Layer die via script wordt bijgewerkt direct aan anderen tonen.
Hier verdelen we rollen voor weergave en bewerking door een 'Viewer' 'Layer' te maken. Een Viewer Layer kan worden gemaakt via het menu 'Viewer laag maken' rechtsboven op de pagina van het Feature Layer-item. Voor meer informatie over hoe u dit maakt, zie