Мы заметили, что достаточно часто пользователи клуба сталкиваются с задачей получения координат для списка адресов (или получения адресов для списка координат). При этом встроенный в API геокодер позволяет получать данные только для одного адреса за один запрос.
Для обработки массива адресов мы написали класс множественного геокодирования. Его интерфейс полностью соответствует интерфейсу стандартного класса геокодирования в API, т.е. принимает те же опции и также возвращает объект-обещание (Promise). С его помощью можно делать смешанное гекодирование в одном запросе: для адресов — прямое, для координат — обратное (["Москва", [55.7, 37.5]]).
Также мы написали пример с использованием этого класса.
Класс множественного геокодирования позволяет получить коллекцию геообъектов для списка адресов и координат на клиенте. Полученная коллекция геообъектов может быть использована для отображения на карте или в качестве источника данных. Например, для добавления в кластер.
Использование этого класса позволяет решить проблемы, возникающие из-за асинхронности работы геокодера. Когда для каждого адреса из списка отправляется отдельный http-запрос, при этом время ответа сервера может быть разное, и как следствие, результаты могут прийти в разном порядке, например пятый адрес может прийти вторым и т.д. Написанный нами класс решает сразу две задачи:
1. Расположить найденные результаты в правильном порядке, соответствующем порядку в массиве адресов во входных данных.
2. Дождавшись ответа по всем запросам, сигнализировать о успешном выполнении и отдать агрегированный результат или вернуть ошибку.
Выбирая решение для вашего проекта, рекомендуем учитывать, что иногда лучше прогеокодировать все адреса на сервере, записать их в базу и работать на клиенте уже с координатами. Таким образом вы сэкономите трафик пользователей. Алгоритм множественного геокодирования на сервере подробно рассмотрен в статье «Получение координат для списка адресов».
Множественное геокодирование
15 августа 2012, 12:38