Руководства

Геокодирование таблицы адресов одним пакетным запросом

Таблице, полной адресов, не нужен цикл. Каждый эндпоинт My Geocode принимает POST-запрос с JSON-массивом вместо параметров запроса, а эндпоинт прямого геокодирования примет целый столбец адресов за раз и вернёт по одному геокодированному результату на строку в том же порядке, в котором вы их отправили.

Формирование запроса

Экспортируйте столбец адресов из таблицы как простой массив строк, затем отправьте его POST-запросом на /v1/forward. Каждый элемент массива обрабатывается как отдельный поиск и возвращает собственный результат в том же порядке, в котором вы их отправили.

POST /v1/forward
Content-Type: application/json

["221B Baker Street, London", "1600 Pennsylvania Avenue, Washington"]
{
  "status": "ok",
  "results": [
    {"formatted": "221B Baker Street, London, UK", "lat": 51.5237, "lon": -0.1585, "type": "address", "precision": "house", "confidence": 0.95, "place_id": "abc123", "components": {}},
    {"formatted": "1600 Pennsylvania Avenue, Washington, DC", "lat": 38.8977, "lon": -77.0365, "type": "address", "precision": "house", "confidence": 0.97, "place_id": "def456", "components": {}}
  ]
}

Уточнение результатов при смешанном списке стран

Если таблица охватывает несколько стран, простой массив строк всё равно работает, но неоднозначные названия улиц в разных странах могут быть сопоставлены не с той страной. Если в таблице есть отдельный столбец страны, отправляйте строки каждой страны отдельным пакетом с параметром countries, равным соответствующему коду ISO, а не смешивайте страны в одном вызове в надежде, что текст адреса сам по себе снимет неоднозначность.

Сколько это стоит

Пакетный запрос тарифицируется по элементам, а не по вызовам. Два адреса в одном POST расходуют два запроса из вашего дневного лимита, точно так же, как если бы вы отправили два отдельных GET-запроса. Таблица из 500 строк стоит 500 запросов и спокойно укладывается в 2 500 бесплатных запросов в день, которые входят в каждый ключ или доступны вообще без ключа.

Сопоставление строк обратно

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

Обработка частичных сбоев

Строку с отсутствующим результатом, низкой оценкой достоверности или точностью ниже требуемой следует помечать, а не принимать автоматически. Проверяйте поле confidence у каждого элемента и отправляйте всё, что ниже вашего собственного порога, в список ручной проверки.

Пограничный случай: пустые строки

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

Ошибка, которой стоит избегать

Отправка одного и того же адреса дважды, один раз из списка активных клиентов и ещё раз из старого экспорта, который так и не почистили, это простой способ потратить заметную часть дневного лимита на дублирующуюся работу. Удаляйте дубликаты из столбца адресов перед формированием массива и повторно обрабатывайте только строки, изменившиеся с последнего экспорта, а не геокодируйте заново всю таблицу каждый раз, когда добавляется несколько строк.

Разбиение больших файлов

Очень большие файлы удобнее обрабатывать частями от нескольких сотен до нескольких тысяч строк. Разбиение на части также упрощает проверку заголовков квоты между пакетами и позволяет остановиться до того, как вы выйдете за пределы бесплатного лимита или предоплаченного баланса.

Если в вашей таблице больше нескольких строк, это разница между одним запросом и сотнями обращений туда и обратно. Полная структура запроса и ответа описана на странице прямого геокодирования.