Úvod
ArcGIS API for Python je Python knihovna pro automatizaci Web GIS. Toto je 23.23. vydání GISKomunitní fórum zaměřené na automatizaci operací ArcGIS Online.
O fóru
Koná se od středy 27. května do pátku 29. května 2026 v Roppongi Midtown, Tokio.„23. komunitní fórum GIS“se konalo.
Zde najdete shrnutí celého fóra.
Na závěrečné seanci dne 29. v 15:55 „Základní kurz ArcGIS API for Python: Úvod do operací a automatizace Web GIS“ jsme představili základy ArcGIS API for Python jako knihovny pro automatizaci Web GIS a několik tipů.
Tipy představují praktické příklady, ale obdrželi jsme zpětnou vazbu jako „chtěl bych to umět udělat sám“ nebo „chtěl bych vidět více ukázkových kódů“, proto je zde vysvětlení v tomto článku.
ArcGIS API for Python je API Python balíčku, který umožňuje automatizovat operace ArcGIS Online a ArcGIS Enterprise.
Základní vysvětlení o ArcGIS API for Python naleznete v této sérii článků.
Obsah tohoto článku
V tomto článku jsou vysvětleny tipy představené na fóru pomocí ukázkových příkladů v pořadí.
- Sign In (ověření)
- Hromadné mazání složek a položek
Pravidelné spouštění
- Obsah pravidelného spouštění
- Použití Feature Layer
- Aktualizace Feature Layer skriptem
- Příprava ověřovacích položek
- Nastavení úkolu
- Ověření
- Poznámky při sdílení
Sign In (ověření)
Nejprve je potřeba Sign In (ověření), které umožňuje přístup k funkcím ArcGIS jako privilegované položky nebo basemap. Níže je vysvětleno ve slidech.
V ArcGIS API for Python po ověření přistupujete k veřejnému obsahu i svým privátním položkám a provádíte operace. V prostředí jako ArcGIS Pro nebo ArcGIS Online, kde jste přihlášeni, lze jednoduše ověřit pomocí GIS("home").
• Python okno v ArcGIS Pro
• Notebooky v ArcGIS Online / ArcGIS Enterprise
• Prostředí, kde používáte python.exe z instalačního adresáře ArcGIS Pro
V prostředích jako Google Colab nebo pokud nemáte nainstalovaný ArcGIS Pro, nelze použít GIS("home"), proto je nutné ověřit pomocí ID a hesla nebo API klíče. Existuje mnoho dalších metod ověření, viz prosím Reference k modulům GIS.
Níže jsou uvedeny příklady zobrazení některých informací o privilegovaných položkách pomocí ověření API klíčem.
# Ověření API klíčem
gis = GIS(api_key="<YOUR_API_KEY>",referer="https")
# Zobrazení objektu GIS
print(gis)
# Zobrazení uživatele
print(gis.users.me)
# Zobrazení privilegované položky
myItem = gis.content.get("<ID položky>")
myItem
Hromadné mazání složek a položek
Pokračujeme s hromadným mazáním složek a položek.
Na fóru jsme představili video ukazující hromadné mazání složek a jejich obsahu, ale níže je prováděno pomocí třídy Folders třídy Folder . Zde získáváme složky jednu po druhé, pokud to není Root Folder, zobrazíme název složky a provedeme její smazání; složky, které nelze smazat, jsou nakonec odstraněny pouze položky ve složce.
. Kromě metod představených zde existuje také metoda vyhledávání všech položek pomocí search metody modulu GIS , která umožňuje vyhledat všechny položky a poté je všechny odstranit před odstraněním složky stejným způsobem.Pravidelné spouštění
Obsah pravidelného spouštění
Tato část popisuje aktualizaci Feature Layer propojenou s externím API podle následujícího postupu.
Použití Feature Layer
+ Jako první krok použijeme materiály pro aktualizaci. Následující skript zpracovává informace získané z API a vytváří data pro aktualizaci. Předpokládáme provedení v notebooku ArcGIS Online.
+ Poznámka: Podrobný návod k notebookům ArcGIS Online najdete zde.+ Při spuštění vytvořte nový standardní notebook v ArcGIS Online a pojmenujte jej tak, aby byl nahrán do jedné služby.
+ from arcgis.gis import GIS
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) Získání dat o dráze letu
item = gis.content.get(ITEM_ID)
layer = item.layers[0]
# 2) Získání existujících 3 záznamů v časovém pořadí (od nejstaršího)
# order_by_fields odpovídá parametru orderByFields v REST API
fset = layer.query(
where="1=1",
out_fields="ObjectID,obs_time",
order_by_fields="obs_time ASC"
)
features = fset.features
# 3) Pokud je více než 3 záznamy, smažeme ten nejstarší
if len(features) >= 3:
oldest_oid = features[0].attributes.get("ObjectID")
# deletes v edit_features vyžaduje řetězec s ID OID oddělenými čárkami [10](https://gis.stackexchange.com/questions/278263/arcgis-api-for-python-delete-multiple-features)
del_res = layer.edit_features(deletes=str(oldest_oid))
print("Smazáno:", del_res)
# 4) Přidání nového záznamu
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("Přidáno:", add_res)
# 5) Kontrola aktuálního počtu záznamů
cur_cnt = layer.query(where="1=1", return_count_only=True)
print("Aktuální počet záznamů:", cur_cnt)
Po úspěšném provedení se zobrazí zpráva o smazání a aktualizaci níže.
Tímto je příprava skriptu pro aktualizaci dokončena. Nyní vytvoříme prvek pro ověření aktualizace.
Příprava prvku pro ověření
Nejprve vytvoříme Web Mapu. Otevřete prvek Feature Layer v Map Vieweru a klikněte na [Uložit a otevřít] [Zadejte název a klikněte na [Uložit], čímž vytvoříte Web Mapu.
Po provedení aktualizace bude možné mapu načíst a ověřit aktualizaci. Také otevřením nastavení Feature Layer ve Web Mapě a zaškrtnutím volby „Automaticky aktualizovat vrstvu“ můžete zajistit, že se aktualizace projeví i bez nutnosti obnovovat prohlížeč.
Níže je ukázka provedení.
Nastavíme pravidelné aktualizace vytvořeného bodu.
Nastavení úkolu
※Při provádění úkolu se podle času provedení spotřebovávají kredity.