Megosztás a következőn keresztül:


Python REST SDK fejlesztői útmutató (előzetes verzió)

Az Azure Maps Python SDK integrálható Python-alkalmazásokkal és kódtárakkal térképekkel és helyérzékeny alkalmazásokkal. Az Azure Maps Python SDK keresési, útvonal-, renderelési és földrajzi helymeghatározási API-kat tartalmaz. Ezek az API-k olyan műveleteket támogatnak, mint a cím keresése, a különböző koordináták közötti útválasztás, egy adott IP-cím földrajzi helyének lekérése.

Előfeltételek

Tipp.

Az Azure Maps-fiókot programozott módon is létrehozhatja, az Alábbi példa az Azure CLI használatával:

az maps account create --kind "Gen2" --account-name "myMapAccountName" --resource-group "<resource group>" --sku "G2"

Python-projekt létrehozása

Az alábbi példa bemutatja, hogyan hozhat létre Egy Python nevű demo konzolprogramot:

mkdir mapsDemo 
cd mapsDemo 
New-Item demo.py 

A szükséges Python-csomagok telepítése

Az Azure Maps minden szolgáltatása saját csomagban található. Az Azure Maps Python SDK használatakor csak a szükséges szolgáltatások csomagjait telepítheti.

Itt telepítjük az Azure Maps Search csomagot. Mivel még nyilvános előzetes verzióban van, hozzá kell adnia a jelzőt --pre :

pip install azure-maps-search --pre 

Azure Maps-szolgáltatások

Az Azure Maps Python SDK támogatja a Python 3.8-es vagy újabb verzióját. További információ a Python jövőbeli verzióiról: Azure SDK for Python verziótámogatási szabályzat.

Szolgáltatásnév PyPi-csomag Minták
Keresés azure-maps-search keresési minták
Útvonal azure-maps-route  útvonalminták
Megjelenítés azure-maps-render minta renderelése
Földrajzi hely azure-maps-geolocation geolokációs minta

MapsSearchClient létrehozása és hitelesítése

Az Azure Maps keresési API-k eléréséhez használt objektum létrehozásakor MapsSearchClient szüksége van egy credential objektumra a hitelesítéshez. A hitelesítéshez használhat Microsoft Entra-hitelesítő adatokat vagy Azure-előfizetési kulcsot. A hitelesítéssel kapcsolatos további információkért lásd: Hitelesítés az Azure Maps használatával.

Tipp.

AzMapsSearchClient Azure Maps keresési kódtárát használó fejlesztők számára ez az elsődleges felület. Az elérhető keresési módszerekkel kapcsolatos további információkért tekintse meg az Azure Maps Search-csomag ügyfélkódtárát .

Microsoft Entra hitelesítő adatok használata

Az Azure Identity-csomaggal hitelesíthet a Microsoft Entra-azonosítóval. A DefaultAzureCredential szolgáltató használatához telepítenie kell az Azure Identity ügyfélcsomagot:

pip install azure-identity 

Regisztrálnia kell az új Microsoft Entra-alkalmazást, és hozzáférést kell adnia az Azure Mapshez úgy, hogy hozzárendeli a szükséges szerepkört a szolgáltatásnévhez. További információ: Démon gazdagépe nem Azure-erőforrásokon. A rendszer visszaadja az alkalmazás (ügyfél) azonosítóját, a címtár (bérlő) azonosítóját és az ügyfél titkos kódját. Másolja ki ezeket az értékeket, és tárolja őket biztonságos helyen. Az alábbi lépésekben szüksége lesz rájuk.

Ezután meg kell adnia a használni kívánt Azure Maps-fiókot a térképek ügyfélazonosítójának megadásával. Az Azure Maps-fiók ügyfélazonosítója az Azure Maps-fiók hitelesítési szakaszaiban található. További információ: A hitelesítés részleteinek megtekintése.

Állítsa be az alkalmazás (ügyfél) azonosítójának, a Címtár (bérlő) azonosítójának és a Microsoft Entra-alkalmazás ügyféltitkának értékeit, valamint a leképezési erőforrás ügyfélazonosítóját környezeti változóként:

Környezeti változó Leírás
AZURE_CLIENT_ID Alkalmazás (ügyfél) azonosítója a regisztrált alkalmazásban
AZURE_CLIENT_SECRET Az ügyfél titkos kódjának értéke a regisztrált alkalmazásban
AZURE_TENANT_ID Címtár (bérlő) azonosítója a regisztrált alkalmazásban
MAPS_CLIENT_ID Az Azure Map-fiók ügyfélazonosítója

Most már létrehozhat környezeti változókat a PowerShellben az alábbi értékek tárolásához:

$Env:AZURE_CLIENT_ID="Application (client) ID"
$Env:AZURE_CLIENT_SECRET="your client secret"
$Env:AZURE_TENANT_ID="your Directory (tenant) ID"
$Env:MAPS_CLIENT_ID="your Azure Maps client ID"

A környezeti változók beállítása után használhatja őket a programban az AzureMapsSearch ügyfél példányosítására. Hozzon létre egy demo.py nevű fájlt, és adja hozzá a következő kódot:

import os
from azure.identity import DefaultAzureCredential 
from azure.maps.search import MapsSearchClient 

credential = DefaultAzureCredential()
maps_client_id = os.getenv("MAPS_CLIENT_ID")
maps_search_client = MapsSearchClient(
    client_id=maps_client_id,
    credential=credential
)

Fontos

Az előző kódrészletben létrehozott egyéb környezeti változókra a kódmintában DefaultAzureCredential()nem használt. Ha nem megfelelően állítja be ezeket a környezeti változókat, ugyanazokkal az elnevezési konvenciók használatával futásidejű hibákat fog kapni. Ha például hiányzik AZURE_CLIENT_ID vagy érvénytelen, hibaüzenet jelenik InvalidAuthenticationTokenTenant meg.

Előfizetési kulcs hitelesítő adatainak használata

Az Azure Maps-előfizetési kulccsal hitelesíthet. Az előfizetési kulcs az Azure Maps-fiók Hitelesítés szakaszában található, az alábbi képernyőképen látható módon:

Képernyőkép az Azure Maps-előfizetési kulcsról az Azure Portalon.

Most létrehozhat környezeti változókat a PowerShellben az előfizetési kulcs tárolásához:

$Env:SUBSCRIPTION_KEY="your subscription key"

A környezeti változó létrehozása után elérheti azt a kódban. Hozzon létre egy demo.py nevű fájlt, és adja hozzá a következő kódot:

import os

from azure.core.credentials import AzureKeyCredential
from azure.maps.search import MapsSearchClient

# Use Azure Maps subscription key authentication
subscription_key = os.getenv("SUBSCRIPTION_KEY")
maps_search_client = MapsSearchClient(
   credential=AzureKeyCredential(subscription_key)
)

Cím geokódolása

Az alábbi kódrészlet bemutatja, hogyan szerezhet be hosszúsági és szélességi koordinátákat egy egyszerű konzolalkalmazásban egy adott címhez. Ez a példa az előfizetési kulcs hitelesítő adatait használja a MapsSearchClient hitelesítéséhez. A demo.py-ben:

import os

from azure.core.exceptions import HttpResponseError

subscription_key = os.getenv("AZURE_SUBSCRIPTION_KEY", "your subscription key")

def geocode():
    from azure.core.credentials import AzureKeyCredential
    from azure.maps.search import MapsSearchClient

    maps_search_client = MapsSearchClient(credential=AzureKeyCredential(subscription_key))
    try:
        result = maps_search_client.get_geocoding(query="15127 NE 24th Street, Redmond, WA 98052")
        if result.get('features', False):
            coordinates = result['features'][0]['geometry']['coordinates']
            longitude = coordinates[0]
            latitude = coordinates[1]

            print(longitude, latitude)
        else:
            print("No results")

    except HttpResponseError as exception:
        if exception.error is not None:
            print(f"Error Code: {exception.error.code}")
            print(f"Message: {exception.error.message}")

if __name__ == '__main__':
    geocode()

Ez a mintakód az Azure Maps-előfizetési kulccsal példányosítja AzureKeyCredential , majd az objektum példányosítására MapsSearchClient használja. A kérésnek az Azure Maps REST-végpontokra való továbbításával MapsSearchClient megadott módszerek. Végül a program végigvezeti az eredményeket, és kinyomtatja az egyes eredmények koordinátáit.

Batch geokódcímek

Ez a minta bemutatja, hogyan hajthat végre kötegelt keresési címet:

import os

from azure.core.exceptions import HttpResponseError

subscription_key = os.getenv("AZURE_SUBSCRIPTION_KEY", "your subscription key")

def geocode_batch():
    from azure.core.credentials import AzureKeyCredential
    from azure.maps.search import MapsSearchClient

    maps_search_client = MapsSearchClient(credential=AzureKeyCredential(subscription_key))
    try:
        result = maps_search_client.get_geocoding_batch({
          "batchItems": [
            {"query": "400 Broad St, Seattle, WA 98109"},
            {"query": "15127 NE 24th Street, Redmond, WA 98052"},
          ],
        },)

        if not result.get('batchItems', False):
            print("No batchItems in geocoding")
            return

        for item in result['batchItems']:
            if not item.get('features', False):
                print(f"No features in item: {item}")
                continue

            coordinates = item['features'][0]['geometry']['coordinates']
            longitude, latitude = coordinates
            print(longitude, latitude)

    except HttpResponseError as exception:
        if exception.error is not None:
            print(f"Error Code: {exception.error.code}")
            print(f"Message: {exception.error.message}")

if __name__ == '__main__':
    geocode_batch()

Fordított címkeresés létrehozása a koordináták helyének utcacímre való fordításához

A koordinátákat lefordíthatja ember által olvasható utcacímekké. Ezt a folyamatot fordított geokódolásnak is nevezik. Ezt gyakran használják GPS-hírcsatornákat használó alkalmazásokhoz, és adott koordinátákon szeretnének címeket felderíteni.

import os

from azure.core.exceptions import HttpResponseError

subscription_key = os.getenv("AZURE_SUBSCRIPTION_KEY", "your subscription key")

def reverse_geocode():
    from azure.core.credentials import AzureKeyCredential
    from azure.maps.search import MapsSearchClient

    maps_search_client = MapsSearchClient(credential=AzureKeyCredential(subscription_key))
    try:
        result = maps_search_client.get_reverse_geocoding(coordinates=[-122.138679, 47.630356])
        if result.get('features', False):
            props = result['features'][0].get('properties', {})
            if props and props.get('address', False):
                print(props['address'].get('formattedAddress', 'No formatted address found'))
            else:
                print("Address is None")
        else:
            print("No features available")
    except HttpResponseError as exception:
        if exception.error is not None:
            print(f"Error Code: {exception.error.code}")
            print(f"Message: {exception.error.message}")


if __name__ == '__main__':
   reverse_geocode()

Kötegelt kérelem fordított geokódoláshoz

Ez a minta bemutatja, hogyan hajthat végre fordított keresést adott koordináták alapján a kötegben.

import os
from azure.core.credentials import AzureKeyCredential
from azure.core.exceptions import HttpResponseError
from azure.maps.search import MapsSearchClient

subscription_key = os.getenv("AZURE_SUBSCRIPTION_KEY", "your subscription key")

def reverse_geocode_batch():
    maps_search_client = MapsSearchClient(credential=AzureKeyCredential(subscription_key))
    try:
        result = maps_search_client.get_reverse_geocoding_batch({
              "batchItems": [
                {"coordinates": [-122.349309, 47.620498]},
                {"coordinates": [-122.138679, 47.630356]},
              ],
            },)

        if result.get('batchItems', False):
            for idx, item in enumerate(result['batchItems']):
                features = item['features']
                if features:
                    props = features[0].get('properties', {})
                    if props and props.get('address', False):
                        print(
                            props['address'].get('formattedAddress', f'No formatted address for item {idx + 1} found'))
                    else:
                        print(f"Address {idx + 1} is None")
                else:
                    print(f"No features available for item {idx + 1}")
        else:
            print("No batch items found")
    except HttpResponseError as exception:
        if exception.error is not None:
            print(f"Error Code: {exception.error.code}")
            print(f"Message: {exception.error.message}")


if __name__ == '__main__':
   reverse_geocode_batch()

Sokszögek lekérése egy adott helyhez

Ez a minta bemutatja, hogyan kereshet sokszögben.

import os

from azure.core.exceptions import HttpResponseError
from azure.maps.search import Resolution
from azure.maps.search import BoundaryResultType


subscription_key = os.getenv("AZURE_SUBSCRIPTION_KEY", "your subscription key")

def get_polygon():
    from azure.core.credentials import AzureKeyCredential
    from azure.maps.search import MapsSearchClient

    maps_search_client = MapsSearchClient(credential=AzureKeyCredential(subscription_key))
    try:
        result = maps_search_client.get_polygon(
          coordinates=[-122.204141, 47.61256],
          result_type=BoundaryResultType.LOCALITY,
          resolution=Resolution.SMALL,
        )

        if not result.get('geometry', False):
            print("No geometry found")
            return

        print(result["geometry"])
    except HttpResponseError as exception:
        if exception.error is not None:
            print(f"Error Code: {exception.error.code}")
            print(f"Message: {exception.error.message}")

if __name__ == '__main__':
    get_polygon()

V1 SDK-k használata kereséshez és rendereléshez

A Search V1 és a Render V1 SDK használatához további információt a Search V1 SDK csomag oldalán és a Render V1 SDK-csomagban talál.

További információk

Az Azure Maps Search-csomag ügyfélkódtára a Pythonhoz készült Azure SDK előzetes verziójának dokumentációjában.