Introdução
ArcGIS API for Python é uma biblioteca Python para automação de Web GIS. Esta é a23ªedição GISrealizada com foco na automação das operações do ArcGIS Online em um fórum comunitário.
Sobre o fórum
De 27 de maio de 2026 (quarta-feira) a 29 de maio (sexta-feira), realizado no Midtown Tokyo Roppongi"23º Fórum Comunitário GIS"foi realizado.
Aqui está o resumo completo do fórum.
Na última sessão do dia 29 às 15:55, "Curso básico do ArcGIS API for Python: Operações e automação de Web GIS", foram apresentadas algumas dicas básicas sobre o ArcGIS API for Python, que é uma biblioteca para automação de Web GIS.
As dicas focaram em conteúdos práticos realizados, mas recebemos feedbacks como "Gostaria que fosse possível fazer coisas semelhantes" e "Gostaria de ver mais exemplos de código", então decidimos explicar neste artigo.
ArcGIS API for Python é uma API baseada em Python que permite automatizar operações no ArcGIS Online e ArcGIS Enterprise.
Para explicações básicas sobre o ArcGIS API for Python, consulte este artigo da série.
Conteúdo deste artigo
Neste artigo, explicaremos as dicas apresentadas na sessão usando demonstrações na ordem apresentada.
- Sign in (autenticação)
- Exclusão em lote de Folders e Items
Execução periódica
- Conteúdo da execução periódica
- Uso do Feature Layer
- Script para atualizar o Feature Layer
- Preparação para autenticação com Item referer
- Configuração da tarefa
- Autenticação
- Pontos importantes ao compartilhar
Sign in (autenticação)
Primeiro, o Sign in (autenticação) é necessário para acessar funções do ArcGIS como Items privados ou base maps. Explicamos isso nos slides abaixo.
No ArcGIS API for Python, após autenticar-se, você pode acessar conteúdos públicos e seus próprios Items para realizar operações. Em ambientes conectados ao ArcGIS, como ArcGIS Pro ou ArcGIS Online com Sign in, a autenticação é simples via GIS("home").
・Python Window do ArcGIS Pro
・Notebook do ArcGIS Online / ArcGIS Enterprise
・Ambiente executando python.exe no ambiente de clone do ArcGIS Pro
Em ambientes onde isso não se aplica, como Google Colab ou ambientes sem instalação do ArcGIS Pro, não é possível usar GIS("home"), então é necessário autenticar usando ID e senha ou chave API. Existem vários métodos de autenticação além dos apresentados aqui; consulte Referência do módulo GIS
A seguir estão alguns exemplos que exibem informações básicas sobre o ambiente autenticado usando chave API.
# Autenticação com chave API
gis = GIS(api_key="<YOUR_API_KEY>",referer="https")
# Exibir objeto GIS
print(gis)
# Exibir usuário atual
print(gis.users.me)
# Exibir Item privado
myItem = gis.content.get("<ID do Item>")
myItem
Exclusão em lote de Folders e Items
Continuando, exclusão em lote de Folders e Items.
No fórum foi apresentado um vídeo mostrando como excluir em lote Folders e seu conteúdo, mas aqui mostramos como executar usando as classes Folders Folder
Aqui obtemos cada Folder um por um, exibimos o nome do Folder se não for Root Folder e realizamos a exclusão; para Root Folder que não pode ser excluído, apenas os Items são excluídos no final.
# Autenticação (aqui usamos ID e senha)
from arcgis.gis import GIS, Item
gis = GIS("URL do portal", "nome_de_usuario_alvo", "senha")
print(gis)
# Obter lista de Folders um a um
folders = gis.content.folders.list()
# Obter nomes dos Folders em uma lista
folder_names = [f.name for f in folders]
# Exibir resultados
for name in folder_names:
#if name!='Root Folder':
print(f"Nome do Folder: {name}")
folder_name = name
folder = gis.content.folders.get(folder_name)
if name!='Root Folder':
if folder is None:
print(f"Folder '{folder_name}' não foi encontrado.")
else:
# Excluir também os Items dentro do Folder combinado
ok = folder.delete()
if ok:
print(f"Folder '{folder_name}' e seu conteúdo foram excluídos.")
else:
print(f"Falha ao excluir o Folder '{folder_name}'.")
elif name=='Root Folder':
if folder is None:
print(f"Folder '{folder_name}' não foi encontrado.")
else:
root_items = gis.users.me.items()
for item in root_items:
try:
print(f"{item.title} ({item.type}) foi excluído")
item.delete()
except Exception as e:
print(f"Erro ao excluir {item.title}: {e}")
+ Além dos métodos apresentados aqui, também existe o método usando método search do módulo GISで所有アイテムを検索し、アイテムを全て削除してからフォルダーを削除する方法でも同様の作業が実行できます。
定期実行
定期実行させる内容
この項では以下のような流れで外部 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) Obter o localizador
item = gis.content.get(ITEM_ID)
layer = item.layers[0]
# 2) Obter os 3 registros existentes em ordem cronológica (mais antigo primeiro)
# order_by_fields corresponde ao parâmetro orderByFields do REST
fset = layer.query(
where="1=1",
out_fields="ObjectID,obs_time",
order_by_fields="obs_time ASC"
)
features = fset.features
# 3) Se houver 3 ou mais registros, excluir o mais antigo
if len(features) >= 3:
oldest_oid = features[0].attributes.get("ObjectID")
# deletes do edit_features espera uma string com IDs separados por vírgula [10](https://gis.stackexchange.com/questions/278263/arcgis-api-for-python-delete-multiple-features)
del_res = layer.edit_features(deletes=str(oldest_oid))
print("Excluído:", del_res)
# 4) Adicionar um novo registro
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("Adicionado:", add_res)
# 5) Confirmar o número atual de registros
cur_cnt = layer.query(where="1=1", return_count_only=True)
print("Número atual de registros:", cur_cnt)
Quando a execução for bem-sucedida, as mensagens abaixo serão exibidas sobre exclusão e atualização.
Com isso, a preparação do script para atualização está concluída. Em seguida, criaremos um item para confirmar a atualização.
Preparação do item para confirmação
Primeiro, criaremos um Web Map. Abra o item do Feature Layer no Map Viewer e clique em [Salvar e abrir][Digite um nome e salve] para criar o Web Map.
Assim que a atualização for realizada, você poderá recarregar o mapa para confirmar a atualização. Além disso, abrindo as configurações do Feature Layer no Web Map e ativando a caixa de seleção "Atualizar camada automaticamente", você poderá confirmar a resposta da atualização sem precisar recarregar o navegador.
Abaixo está um exemplo de execução.
A seguir configuraremos para atualizar periodicamente o ponto criado.
Configuração da tarefa
※Na execução da tarefa,o cache será consumido conforme o tempo de execução.Ao configurar, recomendamos considerar seu próprio cache disponível.
Usaremos a função de tarefa do notebook do ArcGIS Online para executar periodicamente a atualização dos dados criados.
Selecione a aba [Tarefa] na parte superior do notebook e clique em [Criar tarefa].
Digite um título [] e clique em [Próximo] para avançar para os detalhes da configuração da tarefa. Configure conforme necessário e clique em [Criar]. Assim, o notebook será executado no intervalo especificado.
Confirmação da atualização
Clicando no nome da tarefa criada, você pode verificar o histórico das execuções da tarefa. O gráfico abaixo mostra o histórico das execuções com intervalo de 15 minutos conforme apresentado na sessão.
Após confirmar que as atualizações estão sendo realizadas pelo histórico, abra o Web Map para ver que os pontos de localização internacional da Estação Espacial Internacional com intervalo de 15 minutos estão sendo desenhados. No exemplo abaixo usamos um Web Map cujo símbolo foi editado anteriormente no Map Viewer.
Nota sobre compartilhamento
Até aqui criamos um Feature Layer e um Web Map que são atualizados periodicamente, mas com este método não é possível mostrar o Feature Layer atualizado diretamente para outras pessoas via script.
Aqui vamos separar as funções de exibição e edição criando uma Visualização do layer . A visualização do layer pode ser criada clicando em “Criar visualização do layer” no menu à direita da página do item do Feature Layer. Para detalhes sobre como criar,. Consulte este artigo .
Depois de criar a visualização do layer aqui, altere as configurações de compartilhamento pelo proprietário para organização ou público e use a visualização do layer no . Web . map ou . dashboard criando-os assim você poderá compartilhar com outros usuários. Abaixo está um exemplo das configurações de compartilhamento para dashboard.
Neste artigo principal apresentamos dicas demonstrativas implementadas na 23ª sessão GIS Community Forum “Curso básico ArcGIS API for Python: Operações Web GIS e introdução à automação”, incluindo scripts executados e configurações no ArcGIS Online relacionadas. Sobre tarefas não apenas via API mas também usando arquivos Excel compartilhados na web como fonte de dados para atualizações periódicas. Por favor experimente.