Adatok betöltése a GeoCatalogba a Tömeges betöltési API-val

Ez a cikk bemutatja, hogyan lehet egyszerre több térinformatikai adategységet beszedni egy GeoCatalogba a Tömeges betöltési API használatával. Először létrehozunk és konfigurálunk egy GeoCatalog betöltési forrást. A betöltési forrás létrehozása biztonságos kapcsolatot hoz létre egy GeoCatalog-erőforrás és a meglévő térinformatikai adatok tárolási helye között. Ezután létrehozunk egy SpatioTemporal Access Catalog (STAC) kollekciót a GeoCatalog-erőforrásban a betöltendő adatok tárolásához. Végül a Tömeges betöltési API-val indítjuk el a betöltési munkafolyamatot. Ha befejezte ezeket a lépéseket, a térinformatikai adatok a GeoCatalog felhasználói felületéről és API-jaiból lesznek betöltve és elérhetők.

A GeoCatalog statikus katalógusimportálási folyamatát szemléltető ábra, amely a Tároló és a GeoCatalog közötti adatfolyamot mutatja be a Tömeges betöltési API-val.

Előfeltételek

Az Azure-előfizetésben:

Térinformatikai adatkészlet a tárfiók blobtárolójában:

  • Térinformatikai adategységek (például GeoTIFF-fájlok)
  • A társított STAC-elemek STAC-elemeket hoznak létre ezekhez az eszközökhöz.
  • A STAC-gyűjtemény JSON-ja, amely az összes STAC-elemre és térinformatikai adategységre hivatkozik.

A helyi / fejlesztési környezetben:

A Microsoft Planetary Computer Pro-nak hozzáféréssel kell rendelkeznie az Azure Blob Storage-tárolóhoz. Ebben a cikkben létrehozunk és használunk egy ideiglenes SAS-jogkivonat hitelesítő adatokat a hozzáférés biztosításához. Alternatív megoldásként ezeket az útmutatókat használhatja a felügyelt identitások vagy a szigorúan kódolt SAS-jogkivonatok beállításához.

Adatbetöltési forrás létrehozása

A betöltési forrás létrehozása meghatározza a GeoCatalog számára, hogy melyik forrásból kell a térinformatikai adatokat betölteni, és melyik hitelesítő mechanizmust használja a betöltési munkafolyamatban.

  1. A szükséges Python-modulok telepítése pip használatával

    pip install pystac-client azure-identity requests azure-storage-blob pyyaml
    
  2. A szükséges Python-modulok importálása

    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 yaml
    
  3. A szükséges állandók beállítása a környezetnek megfelelően

    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 = "2026-04-15"
    
  4. AZ SAS-jogkivonat létrehozása

    # 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),
    )
    
  5. GeoCatalog API hozzáférési jogkivonat beszerzése

    # Obtain an access token
    credential = AzureCliCredential()
    access_token = credential.get_token(f"{MPCPRO_APP_ID}/.default")
    
  6. POST kérés létrehozása az adatforrás API-hoz

    # Payload for the POST request
    payload = {
        "Kind": "SasToken",
        "connectionInfo": {
            "containerUrl": CONTAINER_URI,
            "sasToken": sas_token,
        },
    }
    
  7. A bevitelforrás létrehozása a POST terhelésnek a bevitelforrás végpontra való elküldésével

    # 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},
    )
    
  8. A válasz ellenőrzése

    # 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 resource clean up
    else:
        print(f"Failed to create ingestion: {response.text}")
    

Megjegyzés:

Az alábbi lépések egymás utáni többszöri végrehajtása 409-es választ eredményez:

Container url <container uri> already contains a SAS token ingestion source with id <sas token id>

A betöltési forrás API nem teszi lehetővé, hogy több betöltési forrást hozzon létre ugyanazon tároló URL-címéhez. Az ütközések elkerülése érdekében mindenképpen törölje a meglévő betöltési forrásokat, mielőtt létrehoz egy újat. További részletekért lásd: Erőforrások törlése.

Gyűjtemény létrehozása

A STAC-gyűjtemény a STAC-elemek és azok kapcsolódó térinformatikai eszközeinek magas szintű tárolója. Ebben a szakaszban létrehozunk egy STAC-gyűjteményt a GeoCatalogon belül, amely a következő szakaszban betöltendő térinformatikai adatoknak ad otthont.

  1. A szükséges modulok importálása

    import os
    import requests
    import yaml
    from pprint import pprint
    from azure.identity import AzureCliCredential
    
  2. A szükséges állandók beállítása a környezetnek megfelelően

    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 = "2026-04-15"
    
    COLLECTION_ID = "example-collection" #You can your own collection ID
    COLLECTION_TITLE = "Example Collection" #You can your own collection title    
    
  3. GeoCatalog API hozzáférési jogkivonat beszerzése

    # Obtain an access token
    credential = AzureCliCredential()
    access_token = credential.get_token(f"{MPCPRO_APP_ID}/.default")
    
  4. Alapszintű STAC-gyűjtemény specifikáció létrehozása

    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",
    }
    

    Megjegyzés:

    Ez a mintagyűjtemény-specifikáció egy egyszerű példa egy gyűjteményre. A STAC-gyűjteményekről és a NYITOTT STAC szabványról a STAC áttekintésében talál további információt. A teljes STAC-gyűjtemény létrehozásáról további információt a STAC-gyűjtemény létrehozása című témakörben talál.

  5. Az új gyűjtemény létrehozása a Collection API-val

    response = requests.post(
        f"{GEOCATALOG_URI}/stac/collections",
        json=collection,
        headers={"Authorization": "Bearer " + access_token.token},
        params={"api-version": API_VERSION},
    )
    
  6. A válasz eredményének ellenőrzése

    if response.status_code == 201:
        print("Collection created successfully")
        pprint(response.json())
    else:
        print(f"Failed to create ingestion: {response.text}")
    

Kapcsolat létrehozása és munkafolyamat futtatása

Ebben az utolsó lépésben a betöltési API-t használjuk a tömeges betöltési munkafolyamat elindításához.

  1. Szükséges modulok importálása

    import os
    import requests
    import yaml
    from azure.identity import AzureCliCredential
    
  2. A szükséges állandók beállítása a környezetnek megfelelően

    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 = "2026-04-15"
    
    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 = 300
    
  3. GeoCatalog API hozzáférési jogkivonat beszerzése

    # Obtain an access token
    credential = AzureCliCredential()
    access_token = credential.get_token(f"{MPCPRO_APP_ID}/.default")
    
  4. A POST hasznos adat létrehozása a Tömeges betöltési API-hoz

    url = f"{GEOCATALOG_URI}/inma/collections/{COLLECTION_ID}/ingestions"
    body = {
        "importType": "StaticCatalog",
        "sourceCatalogUrl": catalog_href,
        "skipExistingItems": skip_existing_items,
        "keepOriginalAssets": keep_original_assets,
    }
    
  5. Küldje el az adatcsomagot a Tömeges Betöltési API-hoz.

    ing_response = requests.post(
        url,
        json=body,
        timeout=timeout_seconds,
        headers={"Authorization": f"Bearer {access_token.token}"},
        params={"api-version": API_VERSION},
    )
    
  6. Ellenőrizze a választ.

    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}")
    
  7. Ellenőrizze a betöltési munkafolyamat állapotát.

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

A munkafolyamat befejezése után lekérdezheti, lekérheti vagy megjelenítheti a térinformatikai adatokat a GeoCatalog STAC vagy az adat API-k használatával, vagy az Adatkezelővel. Ha problémákat tapasztal, tekintse meg a hibaelhárítási útmutatót vagy a betöltési hibakódok listáját.

Erőforrások tisztítása

  • Adatbemeneti forrás törlése

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

Következő lépések

Most, hogy hozzáadott néhány elemet, konfigurálnia kell az adatokat a vizualizációhoz.