Szybki start: tworzenie kolekcji STAC w usłudze Microsoft Planetary Computer Pro GeoCatalog przy użyciu języka Python

Przewodnik szybkiego startu pokaże Ci, jak utworzyć kolekcję SpatioTemporal Asset Catalog (STAC) i dodać ją do Microsoft Planetary Computer Pro GeoCatalog przy użyciu języka Python.

Wymagania wstępne

Aby ukończyć tę instrukcję szybkiego startu, potrzebujesz:

  • Konto Azure z aktywną subskrypcją. Użyj linku Utwórz konto bezpłatnie.
  • Środowisko skonfigurowane do uzyskiwania dostępu do platformy Azure, na przykład za pomocą az login.
  • Dostęp do komputera planetarnego Pro GeoCatalog. Jeśli nie masz jeszcze dostępu, możesz utworzyć nowy geokatalog.
  • Środowisko języka Python z zainstalowanym requests i azure-identity.
python3 -m pip install requests azure-identity

Tworzenie pliku JSON kolekcji STAC

Aby utworzyć kolekcję STAC, musisz najpierw uzyskać plik json definiujący właściwości kolekcji. Niektóre właściwości są wymagane podczas tworzenia kolekcji STAC zgodnie z opisem w przeglądzie kolekcji STAC. Inne właściwości można dodać w zależności od przypadku użycia i typu danych.

Na potrzeby tego samouczka przeczytaj kolekcję io-lulc-annual-v02 STAC z interfejsu API STAC firmy Planetary Computer Pro. Jeśli masz już tę kolekcję STAC w swoim geokatalogu, możesz przejść do następnej sekcji.

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)"

Jeśli używasz innego identyfikatora kolekcji, pamiętaj, aby zastąpić id pole poprawną wartością.

Aby zwizualizować zasoby danych w tej kolekcji w Eksploratorze, metadane kolekcji powinny zawierać rozszerzenie Zasoby elementów i mieć co najmniej jeden element zawartości, którego typ nośnika można wizualizować.

Pobranie tokenu dostępu

Uzyskiwanie dostępu do dziennika geocatalog wymaga tokenu do uwierzytelniania żądań. Użyj biblioteki klienta azure-identity dla języka Python, aby pobrać token:

import azure.identity

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

To poświadczenie można podać jako token Bearer w nagłówku Authorization w żądaniach wysyłanych do usługi GeoKatalog.

Dodawanie kolekcji do dziennika geograficznego

Za pomocą metadanych STAC, tokenu oraz adresu URL do Twojego GeoCatalogu, złóż żądanie do interfejsu API STAC, aby dodać kolekcję.

# 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": "2025-04-30-preview"},
)
print(response.status_code)

Kod 201 stanu wskazuje, że kolekcja została utworzona. Kod 409 stanu wskazuje, że kolekcja o tym identyfikatorze już istnieje. Zobacz Aktualizowanie kolekcji, aby dowiedzieć się, jak zaktualizować istniejącą kolekcję.

Teraz możesz odczytać tę kolekcję w punkcie końcowym /stac/collections/{collection_id}.

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

Możesz również wyświetlić swój GeoCatalog w przeglądarce, aby zobaczyć nową kolekcję.

Konfigurowanie kolekcji

Każda kolekcja w usłudze GeoCatalog zawiera pewne konfiguracje, które sterują sposobem przechowywania, indeksowania i wizualizacji elementów STAC oraz ich zasobów danych. Aby skonfigurować kolekcję:

  1. Zdefiniuj konfigurację renderowania dla kolekcji. Ta konfiguracja renderowania steruje sposobem renderowania zasobów elementów STAC w kolekcji podczas wizualizacji w Eksploratorze geokatalogu. Określone parametry używane w tym miejscu zależą od zasobów w kolekcji.

    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": "2025-04-30-preview"}
    )
    print(response.status_code)
    
  2. Zdefiniuj mozaikę dla kolekcji. Konfiguracja mozaiki określa sposób wykonywania zapytań o elementy, filtrowania i łączenia w celu utworzenia pojedynczego widoku danych w Eksploratorze GeoCatalog. Poniższa przykładowa konfiguracja mozaiki nie stosuje żadnych dodatkowych parametrów ani filtrów zapytania. W związku z tym, po wybraniu tej konfiguracji w Eksploratorze GeoCatalog, wszystkie elementy w kolekcji są wyświetlane, z najnowszymi elementami pokazanymi jako pierwsze.

    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": "2025-04-30-preview"}
    )
    print(response.status_code)
    

    Pole cql konfiguracji mozaiki może służyć do filtrowania elementów na podstawie ich właściwości. Jeśli na przykład elementy STAC implementująeo [rozszerzenie][eo], można zdefiniować filtr "niska chmura" (mniej niż 10% chmury) z

    "cql": [{"op": "<=", "args": [{"property": "eo:cloud_cover"}, 10]}]
    
  3. Zdefiniuj ustawienia kafelka dla kolekcji. Spowoduje to sterowanie takimi elementami jak minimalny poziom powiększenia.

    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": "2025-04-30-preview"}
    )
    

Aktualizowanie kolekcji

Istniejącą kolekcję można zaktualizować poprzez wysłanie żądania PUT do punktu końcowego /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": "2025-04-30-preview"},
)
print(response.status_code)

200 Kod stanu wskazuje, że kolekcja została pomyślnie zaktualizowana.

Uprzątnij zasoby

Możesz użyć DELETE żądania, aby usunąć kolekcję z GeoCatalogu. Usunięcie kolekcji powoduje również usunięcie:

  1. Wszystkie elementy STAC, które są podrzędne względem tej kolekcji.
  2. Wszystkie zasoby, które są elementami podrzędnymi tych elementów.
  3. Wszystkie zasoby na poziomie tej kolekcji.

Ta kolekcja jest używana w przewodniku "Szybki start", Dodawanie elementów STAC do kolekcji, więc nie usuwaj jej jeszcze, jeśli planujesz ukończyć ten przewodnik.

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

Kod 204 stanu wskazuje, że kolekcja została usunięta.

Ostrzeżenie

Jeśli usuniesz kolekcję, musisz poczekać co najmniej 45 sekund przed podjęciem próby utworzenia nowej kolekcji o identycznej nazwie /identyfikatorze. Jeśli spróbujesz utworzyć nową kolekcję przy użyciu tej samej nazwy co usunięta kolekcja, zostanie wyświetlony błąd. Jeśli wystąpi ten błąd, spróbuj ponownie utworzyć kolekcję po 45 sekundach oczekiwania.

Następny krok