クイック スタート: Python を使用して Microsoft プラネタリー コンピューター Pro GeoCatalog で STAC コレクションを作成する

このクイック スタートでは、SpatioTemporal Asset Catalog (STAC) コレクションを作成し、Python を使用して Microsoft プラネタリー コンピューター Pro GeoCatalog に追加する方法について説明します。

[前提条件]

このクイック スタートを完了するには、次のものが必要です。

  • アクティブなサブスクリプションを持つ Azure アカウント。 [アカウントの作成] リンク を無料で使用します
  • たとえば、 az loginを使用して Azure にアクセスするように構成されている環境。
  • 惑星コンピューター Pro GeoCatalog へのアクセス。 まだアクセス権がない場合は、 新しい GeoCatalog を作成できます。
  • requests および azure-identity がインストールされているPython 3.10 (またはそれ以降) の環境。
python3 -m pip install requests azure-identity

STAC コレクション JSON を作成する

STAC コレクションを作成するには、まずコレクションのプロパティを定義する json ファイルが必要です。 STAC コレクションの概要で説明されているように、STAC コレクションを作成するときに必要なプロパティがいくつかあります。 その他のプロパティは、ユース ケースとデータ型に応じて追加できます。

このチュートリアルでは、プラネタリー コンピューター Pro の STAC API から io-lulc-annual-v02 STAC コレクションをお読みください。 GeoCatalogでSTACコレクションが既に存在する場合は、次のセクションに進むことができます。

import requests

collection = requests.get(
    "https://planetarycomputer.microsoft.com/api/stac/v1/collections/io-lulc-annual-v02"
).json()
collection.pop("assets", None)  # remove unused collection-level assets
collection["id"] = "mpc-quickstart"
collection["title"] += " (Planetary Computer Quickstart)"

コレクションに別の ID を使用している場合は、必ず id フィールドを正しい値に置き換えてください。

エクスプローラーでこのコレクション内のデータ資産を視覚化するには、コレクション メタデータに Item Assets 拡張機能が含まれており、メディアの種類を視覚化できるアイテム アセットが少なくとも 1 つ必要です。

アクセス トークンを取得する

GeoCatalog にアクセスするには、要求を認証するためのトークンが必要です。 Python 用 Azure ID クライアント ライブラリを使用してトークンを取得します。

import azure.identity

credential = azure.identity.DefaultAzureCredential()
token = credential.get_token("https://geocatalog.spatio.azure.com")
headers = {
    "Authorization": f"Bearer {token.token}"
}

この資格情報は、GeoCatalog に対する要求の Authorization ヘッダーでベアラー トークンとして提供できます。

GeoCatalog にコレクションを追加する

STAC メタデータ、トークン、および GeoCatalog の URL を使用して、STAC API にコレクションを追加するように要求します。

# Put the URL to your Planetary Computer Pro GeoCatalog (not including '/stac' or a trailing '/' ) here
geocatalog_url = "<your-geocatalog-url>"

response = requests.post(
    f"{geocatalog_url}/stac/collections",
    json=collection,
    headers=headers,
    params={"api-version": "2026-04-15"},
)
print(response.status_code)

201の状態コードは、コレクションが作成されたことを示します。 409の状態コードは、その ID を持つコレクションが既に存在することを示します。 既存 のコレクションを更新する 方法については、「コレクションを更新する」を参照してください。

これで、 /stac/collections/{collection_id} エンドポイントでこのコレクションを読み取ることができます。

geocatalog_collection = requests.get(
    f"{geocatalog_url}/stac/collections/{collection['id']}",
    headers=headers,
    params={"api-version": "2026-04-15"},
).json()

ブラウザーで GeoCatalog を表示して、新しいコレクションを表示することもできます。

コレクションを構成する

GeoCatalog の各コレクションには、STAC 項目とそのデータ資産の格納、インデックス作成、視覚化の方法を制御するいくつかの構成が含まれています。 コレクションを構成するには:

  1. コレクションのレンダリング構成を定義します。 このレンダリング構成では、GeoCatalog エクスプローラーで視覚化するときに、コレクション内の STAC 項目アセットをレンダリングする方法を制御します。 ここで使用する特定のパラメーターは、コレクション内の資産によって異なります。

    import json
    import urllib.parse
    
    colormap = {
        0: (0, 0, 0, 0),
        1: (65, 155, 223, 255),
        2: (57, 125, 73, 255),
        3: (136, 176, 83, 0),
        4: (122, 135, 198, 255),
        5: (228, 150, 53, 255),
        6: (223, 195, 90, 0),
        7: (196, 40, 27, 255),
        8: (165, 155, 143, 255),
        9: (168, 235, 255, 255),
        10: (97, 97, 97, 255),
        11: (227, 226, 195, 255),
    }
    colormap = urllib.parse.urlencode({"colormap": json.dumps(colormap)})
    render_option = {
        "id": "default",
        "name": "Default",
        "description": "Land cover classification using 9 class custom colormap",
        "type": "raster-tile",
        "options": f"assets=data&exitwhenfull=False&skipcovered=False&{colormap}",
        "minZoom": 6,
    }
    
    response = requests.post(
        f"{geocatalog_url}/stac/collections/{collection['id']}/configurations/render-options",
        json=render_option,
        headers=headers,
        params={"api-version": "2026-04-15"}
    )
    print(response.status_code)
    
  2. コレクションのモザイクを定義します。 モザイク構成では、項目のクエリ、フィルター処理、結合を制御して、GeoCatalog エクスプローラーでデータの単一ビューを作成します。 次のサンプル モザイク構成では、追加のクエリ パラメーターやフィルターは適用されません。 その結果、GeoCatalog エクスプローラー内でこの構成を選択すると、コレクション内のすべての項目が表示され、最新の項目が最初に表示されます。

    mosaic = {
        "id": "most-recent",
        "name": "Most recent available",
        "description": "Show the most recent available data",
        "cql": [],
    }
    response = requests.post(
        f"{geocatalog_url}/stac/collections/{collection['id']}/configurations/mosaics",
        json=mosaic,
        headers=headers,
        params={"api-version": "2026-04-15"}
    )
    print(response.status_code)
    

    モザイク構成の cql フィールドを使用して、プロパティに基づいてアイテムをフィルター処理できます。 たとえば、STAC 項目で [eo extension][eo] を実装する場合は、"少ない雲量" (雲量 10% 未満) フィルターを次のように定義できます

    "cql": [{"op": "<=", "args": [{"property": "eo:cloud_cover"}, 10]}]
    
  3. コレクションのタイル設定を定義します。 これにより、最小ズーム レベルなどを制御します。

    tile_settings = {
      "minZoom": 6,
      "maxItemsPerTile": 35,
    }
    requests.put(
        f"{geocatalog_url}/stac/collections/{collection['id']}/configurations/tile-settings",
        json=tile_settings,
        headers=headers,
        params={"api-version": "2026-04-15"}
    )
    

コレクションを更新する

PUT エンドポイントに対する/stac/collections/{collection_id}要求を使用して、既存のコレクションを更新できます。

collection["description"] += " (Updated)"

response = requests.put(
    f"{geocatalog_url}/stac/collections/{collection['id']}",
    headers={"Authorization": f"Bearer {token.token}"},
    json=collection,
    params={"api-version": "2026-04-15"},
)
print(response.status_code)

200状態コードは、コレクションが正常に更新されたことを示します。

リソースをクリーンアップする

DELETE要求を使用して、GeoCatalog からコレクションを削除できます。 コレクションを削除すると、それに含まれているものも削除されます。

  1. そのコレクションの子であるすべての STAC 項目。
  2. それらの項目の子であるすべての資産。
  3. そのコレクションの、コレクション レベルのすべての資産。

クイック スタート「 STAC 項目をコレクションに追加する」では、このコレクションを使用するため、そのクイック スタートを完了する予定がある場合は、まだ削除しないでください。

response = requests.delete(
    f"{geocatalog_url}/stac/collections/{collection['id']}",
    headers={"Authorization": f"Bearer {token.token}"},
    params={"api-version": "2026-04-15"}
)
print(response.status_code)

204の状態コードは、コレクションが削除されたことを示します。

Warnung

コレクションを削除する場合は、同じ名前/ID で新しいコレクションを作成する前に、少なくとも 45 秒待つ必要があります。 削除されたコレクションと同じ名前を使用して新しいコレクションを作成しようとすると、エラーが発生します。 このエラーが発生した場合は、45 秒の待機後にコレクションを再作成してみてください。

次のステップ