Leer en inglés

Compartir a través de


Guía para desarrolladores del SDK de REST de Python (versión preliminar)

El SDK de Python de Azure Maps se puede integrar con las aplicaciones y bibliotecas de Python para crear aplicaciones relacionadas con mapas y con la ubicación. El SDK de Python de Azure Maps contiene API de búsqueda, enrutamiento, representación y geolocalización. Estas API admiten operaciones como la búsqueda de una dirección, el enrutamiento entre diferentes coordenadas y la obtención de la ubicación geográfica de una dirección IP específica.

Requisitos previos

Sugerencia

Puede crear una cuenta de Azure Maps mediante programación. A continuación se muestra un ejemplo mediante la CLI de Azure:

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

Creación de un proyecto en Python

En el ejemplo siguiente se muestra cómo crear un programa de consola denominado demo con Python:

mkdir mapsDemo 
cd mapsDemo 
New-Item demo.py 

Instalación de los paquetes de Python necesarios

Cada servicio de Azure Maps está incluido en su propio paquete. Al usar el SDK de Python de Azure Maps, puede instalar solo los paquetes de los servicios que necesita.

Aquí se instala el paquete Azure Maps Search. Dado que todavía está en versión preliminar pública, debe agregar la marca --pre:

pip install azure-maps-search --pre 

Servicios de Azure Maps

Azure Maps SDK de Python admite python versión 3.8 o posterior. Para más información sobre las versiones futuras de Python, consulte Directiva de compatibilidad con versiones del SDK de Azure para Python.

Creación y autenticación de un objeto MapsSearchClient

Necesita un objeto credential para la autenticación cuando cree el objeto MapsSearchClient que se usa para acceder a las API de búsqueda de Azure Maps. Puede usar una credencial de Microsoft Entra o una clave de suscripción de Azure para autenticarse. Para obtener más información sobre la autenticación, consulte Autenticación con Azure Maps.

Sugerencia

El objeto MapsSearchClient es la interfaz principal para los desarrolladores que usan la biblioteca de búsqueda de Azure Maps. Consulte Biblioteca cliente del paquete Azure Maps Search para más información sobre los métodos de búsqueda disponibles.

Uso de la credencial de Microsoft Entra

Puede autenticarse con Microsoft Entra ID mediante la paquete de identidad de Azure. Para usar el proveedor DefaultAzureCredential, debe instalar el paquete de cliente de identidad de Azure:

pip install azure-identity 

Debe registrar la nueva aplicación Microsoft Entra y conceder acceso a Azure Maps mediante la asignación del rol necesario a la entidad de servicio. Para más información, consulte Hospedaje de un demonio en recursos que no son de Azure. Se devuelve el id. de aplicación (cliente), un id. de directorio (inquilino) y un secreto de cliente. Copie estos valores y guárdelos en lugar seguro. Los necesitará en los pasos siguientes.

A continuación, debe especificar la cuenta de Azure Maps que va a usar especificando el identificador de cliente de los mapas. El identificador de cliente de la cuenta de Azure Maps se puede encontrar en las secciones Autenticación de dicha cuenta. Para más información, consulte Visualización de los detalles de autenticación.

Establezca los valores del identificador de aplicación (cliente), el identificador de directorio (inquilino) y el secreto de cliente de la aplicación Microsoft Entra y el identificador de cliente del recurso de asignación como variables de entorno:

Variable de entorno Descripción
AZURE_CLIENT_ID Identificador de aplicación (cliente) de la aplicación registrada
AZURE_CLIENT_SECRET Valor del secreto de cliente de la aplicación registrada
AZURE_TENANT_ID Identificador de directorio (inquilino) de la aplicación registrada
MAPS_CLIENT_ID Identificador de cliente de la cuenta de Azure Maps

Ahora puede crear variables de entorno en PowerShell para almacenar estos valores:

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

Después de configurar las variables de entorno, puede usarlas en el programa para crear instancias del cliente AzureMapsSearch. Cree un archivo llamado demo.py y agregue el siguiente código:

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
)

Importante

Las demás variables de entorno creadas en el fragmento de código anterior, aunque no se usan en el ejemplo de código, son necesarias para DefaultAzureCredential(). Si no establece correctamente estas variables de entorno, con las mismas convenciones de nomenclatura, obtendrá errores en tiempo de ejecución. Por ejemplo, si AZURE_CLIENT_ID falta o no es válido, obtendrá un error InvalidAuthenticationTokenTenant.

Uso de una credencial de clave de suscripción

Puede autenticarse con la clave de suscripción de Azure Maps. Encontrará la clave de suscripción en la sección Autenticación de la cuenta de Azure Maps, como se muestra en la captura de pantalla siguiente:

Captura de pantalla en la que se muestra la clave de suscripción de Azure Maps en Azure Portal.

Ahora puede crear variables de entorno en PowerShell para almacenar la clave de suscripción:

$Env:SUBSCRIPTION_KEY="your subscription key"

Una vez que se haya creado la variable de entorno, puede acceder a ella en el código. Cree un archivo llamado demo.py y agregue el siguiente código:

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

Geocodificación de una dirección

El siguiente fragmento de código muestra cómo obtener coordenadas de longitud y latitud para una dirección determinada en una aplicación de consola sencilla. En este ejemplo se usan credenciales de clave de suscripción para autenticar MapsSearchClient. En 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()

Este código de ejemplo crea instancias de AzureKeyCredential con la clave de suscripción de Azure Maps y, luego, la usa para crear instancias del objeto MapsSearchClient. Los métodos proporcionados por MapsSearchClient reenvían la solicitud a los puntos de conexión REST de Azure Maps. Al final, el programa recorre en iteración los resultados e imprime las coordenadas de cada resultado.

Direcciones de geocodificación por lotes

En este ejemplo se muestra cómo realizar la dirección de búsqueda por lotes:

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

Realizar una búsqueda de dirección inversa para traducir la ubicación de coordenadas a la dirección postal

Puede traducir las coordenadas en direcciones legibles para cualquier persona. Este proceso también se denomina geocodificación inversa. Esto se usa a menudo para las aplicaciones que consumen fuentes GPS y desean detectar direcciones en puntos de coordenadas específicos.

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

Solicitud por lotes para la geocodificación inversa

En este ejemplo se muestra cómo realizar la búsqueda inversa mediante coordenadas dadas por lotes.

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

Obtención de polígonos para una ubicación determinada

En este ejemplo se muestra cómo buscar polígonos.

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

Uso de SDK V1 para Búsqueda y Representar

Para usar el SDK de Búsqueda V1 y Representar V1, consulte la página del paquete del SDK de Búsqueda V1 y el paquete del SDK de Representar V1 para obtener más información.

Información adicional

La biblioteca cliente del paquete Azure Maps Search en la documentación de la versión preliminar del kit de desarrollo de software de Azure para Python.