Sdílet prostřednictvím


Příručka pro vývojáře v sadě Python REST SDK (Preview)

Sadu Azure Maps Python SDK je možné integrovat s aplikacemi a knihovnami Pythonu a vytvářet aplikace související s mapováním a zjišťováním polohy. Sada Azure Maps Python SDK obsahuje rozhraní API pro vyhledávání, trasu, vykreslení a geografickou polohu. Tato rozhraní API podporují operace, jako je hledání adresy, směrování mezi různými souřadnicemi a získání geografického umístění konkrétní IP adresy.

Požadavky

Tip

Účet Azure Maps můžete vytvořit programově. Tady je příklad s využitím Azure CLI:

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

Vytvoření projektu Pythonu

Následující příklad ukazuje, jak vytvořit konzolový program s názvem demo Python:

mkdir mapsDemo 
cd mapsDemo 
New-Item demo.py 

Instalace potřebných balíčků Pythonu

Každá služba v Azure Maps je obsažena ve vlastním balíčku. Při použití sady Azure Maps Python SDK můžete nainstalovat jenom balíčky služeb, které potřebujete.

Tady nainstalujeme balíček Azure Maps Search. Vzhledem k tomu, že je stále ve verzi Public Preview, musíte přidat --pre příznak:

pip install azure-maps-search --pre 

Služby Azure Maps

Sada Azure Maps Python SDK podporuje Python verze 3.8 nebo novější. Další informace obudoucíchch

Název služby Balíček PyPi Vzorky
Vyhledat azure-maps-search ukázky hledání
Trasa azure-maps-route  vzorky tras
Vykreslení azure-maps-render render sample
Geografická poloha azure-maps-geolocation Ukázka geografické polohy

Vytvoření a ověření MapsSearchClient

Při vytváření objektu použitého MapsSearchClient pro přístup k rozhraním API služby Azure Maps Search potřebujete credential objekt pro ověřování. K ověření můžete použít přihlašovací údaje Microsoft Entra nebo klíč předplatného Azure. Další informace o ověřování najdete v tématu Ověřování pomocí Azure Maps.

Tip

Jedná seMapsSearchClient o primární rozhraní pro vývojáře, kteří používají knihovnu Azure Maps Search. Další informace o dostupných metodách vyhledávání najdete v klientské knihovně balíčků Služby Azure Maps Search.

Použití přihlašovacích údajů Microsoft Entra

K ověření můžete použít Microsoft Entra ID pomocí balíčku Azure Identity. Pokud chcete použít zprostředkovatele DefaultAzureCredential , musíte nainstalovat balíček klienta Azure Identity:

pip install azure-identity 

Musíte zaregistrovat novou aplikaci Microsoft Entra a udělit přístup ke službě Azure Maps přiřazením požadované role k instančnímu objektu. Další informace najdete v tématu Hostování démona u prostředků mimo Azure. Vrátí se ID aplikace (klienta), ID adresáře (tenanta) a tajný klíč klienta. Zkopírujte tyto hodnoty a uložte je na bezpečném místě. Budete je potřebovat v následujících krocích.

Dále musíte zadat účet Azure Maps, který chcete použít, zadáním ID klienta mapy. ID klienta účtu Azure Maps najdete v částech Ověřování účtu Azure Maps. Další informace najdete v tématu Zobrazení podrobností o ověřování.

Nastavte hodnoty ID aplikace (klienta), ID adresáře (tenanta) a tajného klíče klienta vaší aplikace Microsoft Entra a ID klienta prostředku mapy jako proměnné prostředí:

Proměnná prostředí Popis
AZURE_CLIENT_ID ID aplikace (klienta) ve vaší registrované aplikaci
AZURE_CLIENT_SECRET Hodnota tajného klíče klienta v registrované aplikaci
AZURE_TENANT_ID ID adresáře (tenanta) ve vaší registrované aplikaci
MAPS_CLIENT_ID ID klienta ve vašem účtu Azure Map

Teď můžete v PowerShellu vytvořit proměnné prostředí pro uložení těchto hodnot:

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

Po nastavení proměnných prostředí je můžete v programu použít k vytvoření instance AzureMapsSearch klienta. Vytvořte soubor s názvem demo.py a přidejte následující kód:

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
)

Důležité

Ostatní proměnné prostředí vytvořené v předchozím fragmentu kódu, zatímco v ukázce kódu se nepoužívají, jsou vyžadovány DefaultAzureCredential(). Pokud tyto proměnné prostředí nenastavíte správně pomocí stejných zásad vytváření názvů, zobrazí se chyby za běhu. Pokud například chybí nebo AZURE_CLIENT_ID je neplatný, zobrazí se InvalidAuthenticationTokenTenant chyba.

Použití přihlašovacích údajů klíče předplatného

Můžete se ověřit pomocí klíče předplatného Azure Maps. Klíč předplatného najdete v části Ověřování v účtu Azure Maps, jak je znázorněno na následujícím snímku obrazovky:

Snímek obrazovky znázorňující klíč předplatného Azure Maps na webu Azure Portal

Teď můžete v PowerShellu vytvořit proměnné prostředí pro uložení klíče předplatného:

$Env:SUBSCRIPTION_KEY="your subscription key"

Jakmile je proměnná prostředí vytvořená, můžete k ní přistupovat ve svém kódu. Vytvořte soubor s názvem demo.py a přidejte následující kód:

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

Geografické kódování adresy

Následující fragment kódu ukazuje, jak v jednoduché konzolové aplikaci získat souřadnice zeměpisné délky a zeměpisné šířky pro danou adresu. Tento příklad používá přihlašovací údaje klíče předplatného k ověření MapsSearchClient. V demo.py:

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

Tento ukázkový kód vytvoří AzureKeyCredential instanci s klíčem předplatného Azure Maps a pak ho použije k vytvoření instance objektu MapsSearchClient . Metody poskytované předáním MapsSearchClient požadavku koncovým bodům REST služby Azure Maps. Na konci program iteruje výsledky a vytiskne souřadnice pro každý výsledek.

Adresy geografického kódu služby Batch

Tato ukázka ukazuje, jak provést dávkovou adresu vyhledávání:

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

Nastavení zpětného vyhledávání adres k překladu umístění souřadnic na adresu ulice

Souřadnice můžete přeložit na adresy ulice čitelné člověkem. Tento proces se také označuje jako zpětné geokódování. To se často používá pro aplikace, které využívají GPS kanály a chtějí zjistit adresy na konkrétních souřadnicových bodech.

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

Batch request for reverse geocoding

Tato ukázka ukazuje, jak provést reverzní vyhledávání podle zadaných souřadnic v dávce.

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

Získání mnohoúhelníku pro dané umístění

Tato ukázka ukazuje, jak hledat mnohoúhelníky.

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

Použití sad SDK V1 pro vyhledávání a vykreslování

Pokud chcete použít sadu SDK pro vyhledávání v1 a vykreslení V1, další informace najdete na stránce balíčku Sady SDK pro vyhledávání v1 a balíčku Render V1 SDK.

Další informace

Klientská knihovna balíčků Azure Maps Search v dokumentaci k sadě Azure SDK for Python Preview .