Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird gezeigt, wie Sie mithilfe der Massenaufnahme-API viele geospatiale Datenressourcen gleichzeitig in einem GeoCatalog aufnehmen. Zunächst erstellen und konfigurieren wir eine GeoCatalog-Aufnahmequelle. Das Erstellen einer Aufnahmequelle stellt eine sichere Verbindung zwischen einer GeoCatalog-Ressource und dem Speicherort für Ihre vorhandenen geospatialen Daten her. Als Nächstes erstellen wir eine SpatioTemporal Access Catalog (STAC)-Auflistung in Ihrer GeoCatalog-Ressource, um die erfassten Daten zu speichern. Schließlich verwenden wir die Massenerfassungs-API, um den Erfassungsworkflow zu initiieren. Wenn Sie diese Schritte abgeschlossen haben, werden Ihre Geospatialdaten von den GeoCatalog-UIs und APIs erfasst und zugänglich.
Voraussetzungen
In Ihrem Azure-Abonnement:
Ein Geospatial-Dataset in Ihrem Speicherkonto-BLOB-Container:
- Geospatialdatenressourcen (z. B. GeoTIFF-Dateien)
- Die zugehörigen STAC-Elemente erstellen STAC-Elemente für diese Objekte.
- Ein STAC-Sammlungs-JSON, das auf alle STAC-Elemente und geospatialen Datenressourcen verweist.
In Ihrer lokalen/Entwicklungsumgebung:
- Eine Python-Umgebung mit Python 3.8 oder höher.
- Azure CLI
- Sie sind bei Azure angemeldet
Microsoft Planetary Computer Pro muss Zugriff auf den Azure Blob Storage-Container haben. In diesem Artikel erstellen und verwenden wir eine temporäre SAS-Token-Anmeldeinformation, um auf diesen Zugriff zuzugreifen. Alternativ können Sie diese Leitfäden verwenden, um verwaltete Identitäten oder hartcodierte SAS-Token einzurichten.
- Einrichten von Erfassungsanmeldeinformationen für Microsoft Planetary Computer Pro mithilfe der verwalteten Identität
- Einrichten von Erfassungsanmeldeinformationen für Microsoft Planetary Computer Pro mithilfe von SAS-Token
Erstellen der Erfassungsquelle
Beim Erstellen einer Aufnahmequelle wird für GeoCatalog definiert, aus welcher Quelle Geospatialdaten aufgenommen werden sollen, und welcher Anmeldeinformationsmechanismus im Aufnahmeworkflow verwendet werden soll.
Installieren der erforderlichen Python-Module mit Pip
pip install pystac-client azure-identity requests azure-storage-blob pyyamlImportieren der erforderlichen Python-Module
import os import requests from azure.identity import AzureCliCredential from datetime import datetime, timedelta, timezone import azure.storage.blob from urllib.parse import urlparse import yamlFestlegen der erforderlichen Konstanten gemäß Ihrer Umgebung
MPCPRO_APP_ID = "https://geocatalog.spatio.azure.com" CONTAINER_URI = "<container_uri>" # The URI for the blob storage container housing your geospatial data GEOCATALOG_URI = "<geocatalog uri>" # The URI for your GeoCatalog can be found in the Azure portal resource overview API_VERSION = "2025-04-30-preview"Erstellen des SAS-Tokens
# Parse the container URL parsed_url = urlparse(CONTAINER_URI) account_url = f"{parsed_url.scheme}://{parsed_url.netloc}" account_name = parsed_url.netloc.split(".")[0] container_name = parsed_url.path.lstrip("/") credential = azure.identity.AzureCliCredential() blob_service_client = azure.storage.blob.BlobServiceClient( account_url=account_url, credential=credential, ) now = datetime.now(timezone.utc).replace(microsecond=0) key = blob_service_client.get_user_delegation_key( key_start_time=now + timedelta(hours=-1), key_expiry_time=now + timedelta(hours=1), ) sas_token = azure.storage.blob.generate_container_sas( account_name=account_name, container_name=container_name, user_delegation_key=key, permission=azure.storage.blob.ContainerSasPermissions( read=True, list=True, ), start=now + timedelta(hours=-1), expiry=now + timedelta(hours=1), )Abrufen des GeoCatalog-API-Zugriffstokens
# Obtain an access token credential = AzureCliCredential() access_token = credential.get_token(f"{MPCPRO_APP_ID}/.default")Erstellen der POST-Nutzlast für die Erfassungsquell-API
# Payload for the POST request payload = { "Kind": "SasToken", "connectionInfo": { "containerUrl": CONTAINER_URI, "sasToken": sas_token, }, }Erstellen Sie die Erfassungsquelle, indem Sie die POST-Nutzlast an den Erfassungsquellendpunkt senden
# STAC Collection API endpoint endpoint = f"{GEOCATALOG_URI}/inma/ingestion-sources" # Make the POST request response = requests.post( endpoint, json=payload, headers={"Authorization": f"Bearer {access_token.token}"}, params={"api-version": API_VERSION}, )Überprüfen der Antwort
# Print the response if response.status_code == 201: print("Ingestion source created successfully") ingestion_source_id = response.json().get("id") #saved for later to enable resoource clean up else: print(f"Failed to create ingestion: {response.text}")
Hinweis
Wenn Sie diese Schritte mehrmals ausführen, führt dies zu einer 409-Antwort:
Container url <container uri> already contains a SAS token ingestion source with id <sas token id>
Mit der Aufnahmequell-API können Sie nicht mehr als eine Aufnahmequelle für dieselbe Container-URL erstellen. Um Konflikte zu vermeiden, stellen Sie sicher, dass Sie vorhandene Aufnahmequellen bereinigen, bevor Sie eine neue erstellen. Weitere Informationen finden Sie unter Bereinigen von Ressourcen.
Sammlung erstellen
Eine STAC-Auflistung ist der übergeordnete Container für STAC-Elemente und deren zugeordnete geospatiale Objekte. In diesem Abschnitt erstellen wir eine STAC-Sammlung in unserem GeoCatalog, um die geospatialen Daten zu enthalten, die wir im nächsten Abschnitt aufnehmen.
Importieren der erforderlichen Module
import os import requests import yaml from pprint import pprint from azure.identity import AzureCliCredentialFestlegen der erforderlichen Konstanten gemäß Ihrer Umgebung
MPCPRO_APP_ID = "https://geocatalog.spatio.azure.com" GEOCATALOG_URI = "<geocatalog uri>" # The URI for your GeoCatalog can be found in the Azure portal resource overview API_VERSION = "2025-04-30-preview" COLLECTION_ID = "example-collection" #You can your own collection ID COLLECTION_TITLE = "Example Collection" #You can your own collection titleAbrufen des GeoCatalog-API-Zugriffstokens
# Obtain an access token credential = AzureCliCredential() access_token = credential.get_token(f"{MPCPRO_APP_ID}/.default")Erstellen einer grundlegenden STAC-Sammlungsspezifikation
collection = { "id": COLLECTION_ID, "type": "Collection", "title": COLLECTION_TITLE, "description": "An example collection", "license": "CC-BY-4.0", "extent": { "spatial": {"bbox": [[-180, -90, 180, 90]]}, "temporal": {"interval": [["2018-01-01T00:00:00Z", "2018-12-31T23:59:59Z"]]}, }, "links": [], "stac_version": "1.0.0", "msft:short_description": "An example collection", }Hinweis
Diese Spezifikation einer Beispielsammlung ist ein Beispiel für eine Sammlung. Weitere Informationen zu STAC-Sammlungen und dem offenen STAC-Standard finden Sie in der STAC-Übersicht. Weitere Informationen zum Erstellen einer vollständigen STAC-Auflistung finden Sie unter Create STAC Collection.
Erstellen der neuen Sammlung mit der Sammlungs-API
response = requests.post( f"{GEOCATALOG_URI}/stac/collections", json=collection, headers={"Authorization": "Bearer " + access_token.token}, params={"api-version": API_VERSION}, )Überprüfen des Antwortergebnisses
if response.status_code == 201: print("Collection created successfully") pprint(response.json()) else: print(f"Failed to create ingestion: {response.text}")
Erstellung von Verbindung und Ausführung des Workflows
In diesem letzten Schritt verwenden wir die Erfassungs-API, um einen Massenerfassungsworkflow zu initiieren.
Importieren erforderlicher Module
import os import requests import yaml from azure.identity import AzureCliCredentialFestlegen der erforderlichen Konstanten gemäß Ihrer Umgebung
MPCPRO_APP_ID = "https://geocatalog.spatio.azure.com" GEOCATALOG_URI = "<geocatalog uri>" # The URI for your GeoCatalog can be found in the Azure portal resource overview API_VERSION = "2025-04-30-preview" COLLECTION_ID = "example-collection" #You can your own collection ID catalog_href = "<catalog_href>" #The blob storage location of the STAC Catalog JSON file skip_existing_items = False keep_original_assets = False timeout_seconds = 300Abrufen des GeoCatalog-API-Zugriffstokens
# Obtain an access token credential = AzureCliCredential() access_token = credential.get_token(f"{MPCPRO_APP_ID}/.default")Erstellen der POST-Nutzlast für die Massenerfassungs-API
url = f"{GEOCATALOG_URI}/inma/collections/{COLLECTION_ID}/ingestions" body = { "importType": "StaticCatalog", "sourceCatalogUrl": catalog_href, "skipExistingItems": skip_existing_items, "keepOriginalAssets": keep_original_assets, }Senden Sie die Nutzlast an die Massenerfassungs-API.
ing_response = requests.post( url, json=body, timeout=timeout_seconds, headers={"Authorization": f"Bearer {access_token.token}"}, params={"api-version": API_VERSION}, )Überprüfen Sie die Antwort.
if ing_response.status_code == 201: print("Ingestion created successfully") ingestion_id = ing_response.json()["ingestionId"] print(f"Created ingestion with ID: {ingestion_id}") else: print(f"Failed to create ingestion: {ing_response.text}")Überprüfen Sie den Status des Datenaufnahme-Workflows.
runs_endpoint = ( f"{geocatalog_url}/inma/collections/{collection_id}/ingestions/{ingestion_id}/runs" ) wf_response = requests.post( runs_endpoint, headers={"Authorization": f"Bearer {access_token.token}"}, params={"api-version": API_VERSION}, ) if wf_response.status_code == 201: print("Workflow started successfully") else: print(f"Failed to create ingestion run: {wf_response.text}")
Sobald der Workflow abgeschlossen ist, können Sie Ihre geospatialen Daten mithilfe der GeoCatalog STAC- oder Daten-APIs oder mit dem Daten-Explorer abfragen, abrufen oder visualisieren. Wenn Probleme auftreten, lesen Sie das Handbuch zur Problembehebung oder die Liste der Fehlercodes für Erfassungsprobleme.
Bereinigen von Ressourcen
Aufnahmequelle löschen
del_is_endpoint = f"{GEOCATALOG_URI}/inma/ingestion-sources/{ingestion_source_id}" del_is_response = requests.delete( del_is_endpoint, headers={"Authorization": f"Bearer {access_token.token}"}, params={"api-version": API_VERSION}, ) if del_is_response.status_code == 200: print("Ingestion source deleted successfully") else: print(f"Failed to delete ingestion source")
Nächste Schritte
Nachdem Sie nun einige Elemente hinzugefügt haben, sollten Sie die Daten für die Visualisierung konfigurieren.
Verwandte Inhalte
- Schnellstart: Aufnehmen eines einzelnen STAC-Elements in eine Sammlung in einem Microsoft Planetary Computer Pro GeoCatalog
- Schnellstart: Aufnehmen von Daten mithilfe der Microsoft Planetary Computer Pro-Weboberfläche
- Aufnehmen von Daten in Microsoft Planetary Computer Pro
- Erfassungsquelle für Microsoft Planetary Computer Pro
- Problembehandlung bei der Datenaufnahme
- Fehlercodes: Microsoft Planetary Computer Pro-Erfassung
