Поделиться через


Руководство разработчиков пакета SDK для Python (предварительная версия)

Пакет SDK для Python для Azure Maps можно интегрировать с приложениями и библиотеками Python для создания приложений, связанных с картами и расположениями. Пакет SDK для Python для Azure Maps содержит API для поиска, маршрутизации, отрисовки и географического расположения. Эти API поддерживают такие операции, как поиск адреса, маршрутизация между различными координатами, получение географического расположения определенного IP-адреса.

Необходимые компоненты

Совет

Вы можете создать учетную запись Azure Maps программным способом. Ниже приведен пример с помощью Azure CLI:

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

Создание проекта Python

В следующем примере показано, как создать консольную программу с именем demo Python:

mkdir mapsDemo 
cd mapsDemo 
New-Item demo.py 

Установка необходимых пакетов Python

Каждая служба в Azure Maps содержится в собственном пакете. При использовании пакета SDK для Python для Azure Maps можно установить только пакеты необходимых служб.

Здесь мы устанавливаем пакет поиска Azure Maps. Так как он по-прежнему находится в общедоступной предварительной версии, необходимо добавить --pre флаг:

pip install azure-maps-search --pre 

Службы Azure Maps

Пакет SDK для Python для Azure Maps поддерживает Python версии 3.8 или более поздней версии. Дополнительные сведения о будущих версиях Python см . в политике поддержки версий Azure SDK для Python.

Имя службы Пакет PyPi Образцы
Найти azure-maps-search Примеры поиска
Маршрут azure-maps-route  Примеры маршрутов
Render azure-maps-render Пример отрисовки
Геопозиционирование azure-maps-geolocation Пример географического расположения

Создание и проверка подлинности MapsSearchClient

При создании объекта, используемого MapsSearchClient для доступа к API поиска Azure Maps, требуется credential объект для проверки подлинности. Для проверки подлинности можно использовать учетные данные Microsoft Entra или ключ подписки Azure. Дополнительные сведения о проверке подлинности см. в статье "Проверка подлинности с помощью Azure Maps".

Совет

ЭтоMapsSearchClient основной интерфейс для разработчиков с помощью библиотеки поиска Azure Maps. Дополнительные сведения о доступных методах поиска см . в клиентской библиотеке пакета поиска Azure Maps.

Использование учетных данных Microsoft Entra

Вы можете пройти проверку подлинности с помощью идентификатора Microsoft Entra с помощью пакета удостоверений Azure. Чтобы использовать поставщик DefaultAzureCredential , необходимо установить пакет клиента удостоверений Azure:

pip install azure-identity 

Необходимо зарегистрировать новое приложение Microsoft Entra и предоставить доступ к Azure Maps, назначив необходимую роль субъекту-службе. Дополнительные сведения см. в статье "Размещение управляющей программы" в ресурсах, отличных от Azure. Возвращаются идентификатор приложения (клиента), идентификатор каталога (клиента) и секрет клиента. Скопируйте эти значения и сохраните их в безопасном месте. Вам потребуется выполнить следующие действия.

Затем необходимо указать учетную запись Azure Maps, которую вы планируете использовать, указав идентификатор клиента карты. Идентификатор клиента учетной записи Azure Maps можно найти в разделах проверки подлинности учетной записи Azure Maps. Дополнительные сведения см. в разделе "Просмотр сведений о проверке подлинности".

Задайте значения идентификатора приложения (клиента), идентификатор каталога (клиента) и секрет клиента приложения Microsoft Entra и идентификатор клиента карты в качестве переменных среды:

Переменная среды Description
AZURE_CLIENT_ID Идентификатор приложения (клиента) в зарегистрированном приложении
AZURE_CLIENT_SECRET Значение секрета клиента в зарегистрированном приложении
AZURE_TENANT_ID Идентификатор каталога (клиента) в зарегистрированном приложении
MAPS_CLIENT_ID Идентификатор клиента в учетной записи Azure Map

Теперь можно создать переменные среды в PowerShell для хранения следующих значений:

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

После настройки переменных среды их можно использовать в программе для создания экземпляра AzureMapsSearch клиента. Создайте файл с именем demo.py и добавьте следующий код:

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
)

Внимание

Другие переменные среды, созданные в предыдущем фрагменте кода, не используемые в примере кода, требуются DefaultAzureCredential(). Если эти переменные среды не заданы правильно, используя те же соглашения об именовании, вы получите ошибки во время выполнения. Например, если AZURE_CLIENT_ID отсутствует или недопустимая InvalidAuthenticationTokenTenant ошибка.

Использование учетных данных ключа подписки

Вы можете пройти проверку подлинности с помощью ключа подписки Azure Maps. Ключ подписки можно найти в разделе "Проверка подлинности" в учетной записи Azure Maps, как показано на следующем снимке экрана:

Снимок экрана: ключ подписки Azure Maps в портал Azure.

Теперь можно создать переменные среды в PowerShell для хранения ключа подписки:

$Env:SUBSCRIPTION_KEY="your subscription key"

После создания переменной среды его можно получить в коде. Создайте файл с именем demo.py и добавьте следующий код:

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

Географический код адреса

В следующем фрагменте кода показано, как в простом консольном приложении получить координаты долготы и широты для заданного адреса. В этом примере используются учетные данные ключа подписки для проверки подлинности MapsSearchClient. В 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()

Этот пример кода создает AzureKeyCredential экземпляр с ключом подписки Azure Maps, а затем использует его для создания экземпляра MapsSearchClient объекта. Методы, предоставляемые путем MapsSearchClient пересылки запроса в конечные точки REST Azure Maps. В конце концов программа выполняет итерацию результатов и выводит координаты для каждого результата.

Адреса геокода пакетной службы

В этом примере показано, как выполнить пакетный поиск по адресу:

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

Создание поиска обратного адреса для перевода расположения координат на адрес улицы

Координаты можно перевести на адреса, доступные для чтения с помощью человека. Этот процесс также называется обратным геокодированием. Это часто используется для приложений, использующих gps-каналы и желающих обнаружить адреса в определенных точках координат.

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

Пакетный запрос обратного геокодирования

В этом примере показано, как выполнять обратный поиск по заданным координатам в пакете.

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

Получение многоугольников для заданного расположения

В этом примере показано, как выполнять поиск многоугольников.

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

Использование пакетов SDK версии 1 для поиска и отрисовки

Чтобы использовать пакет SDK для поиска версии 1 и отрисовки версии 1, ознакомьтесь со страницей пакета ПАКЕТА SDK для поиска версии 1 и пакетом SDK для отрисовки версии 1.

Дополнительная информация:

Клиентская библиотека пакета поиска Azure Maps в документации по пакету SDK Azure для Python Preview .