Delen via


Ontwikkelaarshandleiding voor Python REST SDK (preview)

De Python SDK van Azure Maps kan worden geïntegreerd met Python-toepassingen en -bibliotheken om kaartgerelateerde en locatiebewuste toepassingen te bouwen. De Python SDK van Azure Maps bevat API's voor zoeken, route, renderen en geolocatie. Deze API's ondersteunen bewerkingen zoals het zoeken naar een adres, routering tussen verschillende coördinaten, het verkrijgen van de geografische locatie van een specifiek IP-adres.

Vereisten

Tip

U kunt programmatisch een Azure Maps-account maken. Hier volgt een voorbeeld met behulp van de Azure CLI:

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

Een Python-project maken

In het volgende voorbeeld ziet u hoe u een consoleprogramma maakt met de naam demo Python:

mkdir mapsDemo 
cd mapsDemo 
New-Item demo.py 

Benodigde Python-pakketten installeren

Elke service in Azure Maps bevindt zich in een eigen pakket. Wanneer u de Python SDK van Azure Maps gebruikt, kunt u alleen de pakketten van de services installeren die u nodig hebt.

Hier installeren we het Azure Maps Search-pakket. Omdat deze nog steeds in openbare preview is, moet u de --pre vlag toevoegen:

pip install azure-maps-search --pre 

Azure Maps Services

Azure Maps Python SDK ondersteunt Python versie 3.8 of hoger. Zie het ondersteuningsbeleid voor Azure SDK voor Python-versies voor meer informatie over toekomstige Python-versies.

Servicenaam PyPi-pakket Monsters
Zoeken azure-maps-search zoekvoorbeelden
Route azure-maps-route  routevoorbeelden
Weergeven azure-maps-render voorbeeld weergeven
Geolocatie azure-maps-geolocation voorbeeld van geolocatie

Een MapsSearchClient maken en verifiëren

U hebt een credential object voor verificatie nodig bij het maken van het MapsSearchClient object dat wordt gebruikt voor toegang tot de Azure Maps-zoek-API's. U kunt een Microsoft Entra-referentie of een Azure-abonnementssleutel gebruiken om te verifiëren. Zie Verificatie met Azure Maps voor meer informatie over verificatie.

Tip

DitMapsSearchClient is de primaire interface voor ontwikkelaars die de Azure Maps-zoekbibliotheek gebruiken. Zie de clientbibliotheek van het Azure Maps Search-pakket voor meer informatie over de beschikbare zoekmethoden.

Een Microsoft Entra-referentie gebruiken

U kunt zich verifiëren met Microsoft Entra ID met behulp van het Azure Identity-pakket. Als u de DefaultAzureCredential-provider wilt gebruiken, moet u het Azure Identity-clientpakket installeren:

pip install azure-identity 

U moet de nieuwe Microsoft Entra-toepassing registreren en toegang verlenen tot Azure Maps door de vereiste rol toe te wijzen aan uw service-principal. Zie Een daemon hosten voor niet-Azure-resources voor meer informatie. De toepassings-id (client), een map-id (tenant) en een clientgeheim worden geretourneerd. Kopieer deze waarden en sla ze op een veilige plaats op. U hebt ze nodig in de volgende stappen.

Vervolgens moet u het Azure Maps-account opgeven dat u wilt gebruiken door de client-id van de kaarten op te geven. De client-id van het Azure Maps-account vindt u in de secties Verificatie van het Azure Maps-account. Zie Verificatiedetails weergeven voor meer informatie.

Stel de waarden in van de toepassings-id (client),map-id (tenant) en het clientgeheim van uw Microsoft Entra-toepassing en de client-id van de toewijzingsresource als omgevingsvariabelen:

Omgevingsvariabele Beschrijving
AZURE_CLIENT_ID Toepassings-id (client) in uw geregistreerde toepassing
AZURE_CLIENT_SECRET De waarde van het clientgeheim in uw geregistreerde toepassing
AZURE_TENANT_ID Map-id (tenant) in uw geregistreerde toepassing
MAPS_CLIENT_ID De client-id in uw Azure Map-account

U kunt nu omgevingsvariabelen maken in PowerShell om deze waarden op te slaan:

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

Nadat u de omgevingsvariabelen hebt ingesteld, kunt u deze in uw programma gebruiken om de AzureMapsSearch client te instantiëren. Maak een bestand met de naam demo.py en voeg de volgende code toe:

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
)

Belangrijk

De andere omgevingsvariabelen die zijn gemaakt in het vorige codefragment, terwijl ze niet worden gebruikt in het codevoorbeeld, zijn vereist voor DefaultAzureCredential(). Als u deze omgevingsvariabelen niet correct instelt met dezelfde naamconventies, krijgt u runtimefouten. Als uw AZURE_CLIENT_ID bestand bijvoorbeeld ontbreekt of ongeldig is, krijgt u een InvalidAuthenticationTokenTenant foutmelding.

Een abonnementssleutelreferentie gebruiken

U kunt verifiëren met uw Azure Maps-abonnementssleutel. Uw abonnementssleutel vindt u in de sectie Verificatie in het Azure Maps-account, zoals wordt weergegeven in de volgende schermopname:

Schermopname van uw Azure Maps-abonnementssleutel in Azure Portal.

U kunt nu omgevingsvariabelen maken in PowerShell om de abonnementssleutel op te slaan:

$Env:SUBSCRIPTION_KEY="your subscription key"

Zodra uw omgevingsvariabele is gemaakt, kunt u deze openen in uw code. Maak een bestand met de naam demo.py en voeg de volgende code toe:

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

Een adres geocoderen

In het volgende codefragment ziet u hoe u in een eenvoudige consoletoepassing lengte- en breedtegraadcoördinaten voor een bepaald adres kunt verkrijgen. In dit voorbeeld worden abonnementssleutelreferenties gebruikt om MapsSearchClient te verifiëren. In 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()

Met deze voorbeeldcode wordt een instantie gemaakt AzureKeyCredential met de Azure Maps-abonnementssleutel en vervolgens gebruikt om het MapsSearchClient object te instantiëren. De methoden die worden geboden door MapsSearchClient de aanvraag door te sturen naar de Azure Maps REST-eindpunten. Uiteindelijk doorloopt het programma de resultaten en drukt het de coördinaten voor elk resultaat af.

Batch-geocodeadressen

In dit voorbeeld ziet u hoe u een batchzoekadres uitvoert:

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

Een omgekeerde adreszoekopdracht maken om de locatie van het coördinaat te vertalen naar adres

U kunt coördinaten omzetten in door mensen leesbare straatadressen. Dit proces wordt ook wel omgekeerde geocodering genoemd. Dit wordt vaak gebruikt voor toepassingen die GPS-feeds verbruiken en adressen op specifieke coördinatenpunten willen detecteren.

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-aanvraag voor omgekeerde geocodering

In dit voorbeeld ziet u hoe u reverse search uitvoert op basis van bepaalde coördinaten in batch.

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

Veelhoeken voor een bepaalde locatie ophalen

In dit voorbeeld ziet u hoe u veelhoeken kunt doorzoeken.

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's gebruiken voor zoeken en weergeven

Als u Search V1 en Render V1 SDK wilt gebruiken, raadpleegt u de pagina met het Search V1 SDK-pakket en het Render V1 SDK-pakket voor meer informatie.

Aanvullende informatie

De Azure Maps Search-pakketclientbibliotheek in de Documentatie voor Azure SDK voor Python Preview .