Клуб API Карт

Множественное геокодирование

a.chebotareov
5 марта 2014, 15:48
Множественное геокодирование

Нередко у пользователей API возникает задача геокодирования множества географических объектов. Например, когда на карте необходимо отметить сразу несколько городов, улиц или станций метро. Обычно геокодирование выполняется на стороне клиента, то есть запросы геокодеру отправляет бразуер. При множественном геокодировании такая практика может приводить к уменьшению скорости отображения объектов на карте и к увеличению трафика. Кроме этого, существует вероятность превысить суточный лимит в 25 000 запросов к геокодеру.

Решение проблемы — геокодирование данных на стороне сервера. Для реализации геокодирования на серверной стороне разработан Node.js-модуль (multi-geocode), который использует HTTP-сервис геокодирования. Данный модуль позволяет осуществлять поиск сразу множества объектов по их географическим названиям. Полученный результат может быть добавлен на карту с помощью встроенных функций API. Посмотреть более развернутый пример можно в следующих файлах: index.jssource.json (исходные данные), gecoded.json (результат геокодирования). Обратите внимание, что с помощью этого модуля можно делать только прямое геокодирование.

Если на карте необходимо искать всегда одни и те же географические объекты, то нет смысла производить геокодирование на каждом клиенте отдельно. В этом случае целесообразно выполнить его один раз на стороне сервера и кэшировать полученный результат. А клиентам передавать уже данные, подготовленные для добавления на карту, таким образом можно уменьшить количество запросов к геокодеру.

Описание геокодирования на стороне сервера добавлено на сайт API Яндекс.Карт в раздел Руководство разработчика.

6 комментариев
Подписаться на комментарии к посту

Правильно ли я понимаю, что для использования функционала модуля multi-geocoder необходимо разработать server-side node.js приложение, к которому бразузерный JavaScript будет обращаться с помощью XHR и получать результаты геокодирования?

Нет, модуль это и есть server-side node.js приложение.

Оно геокодирует ваш список адресов.

Адреса могут браться из базы, CSV файла, JSON файла, и т.д.

полученный JSON можно сохранить ввиде файла или разложить в БД.

В примере к модулю данные берутся из JSON файла и сохраняются в JSON файл

 

Сохраненные в JSON-файле адреса можно отдать клиенту по XHR с помощью jQuery и добавить на карту

с помощью geoQuery, примерно так:

 

jQuery.getJSON('_url_to_json_', function (json) {

    ymaps.geoQuery(json).addToMap(myMap);

});

Разобрался. Спасибо!

Просмотрев исходники multi-geocoder, пришел к выводу, что "под капотом" работает то же самое "единичное" геокодирование с запросами по адресу http://geocode-maps.yandex.ru/1.x/ . Я прав?

Если "да", то планируется ли реализация аналогичного функционала множественного геокодирования на других языках с публикацией исходников?

Да, сервис геокодирования в любом случае обрабатывает только один адрес за раз.

 

Лично я не планирую, может кто-нибудь в клубе поделится

Спасибо!