Клуб API Карт

Множественное геокодирование и балуны

demonwulf
8 декабря 2013, 17:44

Здравствуйте, уважаемые коллеги!

 

Столкнулся с проблемой, необходимо внедрить множественное кодирование на сайт.

Адреса будут передоваться в JS автоматически и хотелось бы передавать при помощи переменных необходимый заголовок и описание. Как это можно реализовать?

 

<script src="//api-maps.yandex.ru/2.0.31/?load=package.full&lang=ru-RU" type="text/javascript"></script>
 
<script type="text/javascript">
function init() {
    var myMap = new ymaps.Map('map', {

            center: [54.985096, 61.4],
            zoom: 10,
            behaviors: ['default', 'scrollZoom']
        });

    // Можно создать выборку из запроса к геокодеру.
    // В этом случае результаты запроса будут добавлены в выборку после того,
    // как сервер вернет ответ.
    var objects = ymaps.geoQuery(ymaps.geocode('Челябинск, Братьев кашириных 33'))
    // Также в выборку можно добавлять несколько запросов к геокодеру.
    // Они выполнятся по цепочке.
        .add(ymaps.geocode('Челябинск, Братьев кашириных 34'))
        .add(ymaps.geocode('Челябинск, Братьев Кашириных 118а'))
        .add(ymaps.geocode('Челябинск, Мира 37'))
    // После того, как все запросы обработаются, они будут добавлены на карту.
        .addToMap(myMap);
   
    // Обратите внимание, что все операции асинхронные, поэтому для продолжения
    // работы с выборкой следует дождаться готовности данных.
    objects.then(function () {
        // Этот код выполнится после того, как все запросы к геокодеру
        // вернут ответ и объекты будут добавлены на карту.
objects.get(3).balloon.open();
    });
}
ymaps.ready(init);
</script>
 
<div style="width: 100%; height: 500px;" id="map"></div>

 

Пробовал различные варианты из клуба, но ничего не подошло. Надеюсь вы сможете мне помочь.

Спасибо

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

Зачем эти адреса нужно геокодировать каждый раз?

Почему бы сразу не создать метки по координатам

все происходит на битриксе. Данные хранятся в переменной:

,

 

В итоге получается: Город, Улица, Дом

Отображение планируется так: вывести каталог с элементами и для каждого элемента передавать переменные.

то есть в Битриксе нельзя сохранить координаты с объектом?

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

 

Пользователь заполняет беллютень -> система автоматически определяет данные на карте, а так же выводить все возможные объекты по всей карте.

 

То что будет заполняться пользователем, можно геокодировать и сохранять в базу ввиде адреса + координаты (тут множественное геокодирование не нужно)

Все возможные объекты по всей карте создаются уже по координатам без геокодирования.

 

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

Давайте вернемся к балуну, как его можно вывести для каждого элемента? Используя выше описанный код

Перебираете objects с помощью метода each и каждому объекту задаете балун контент балуна.

object.properties.set('balloonContent', 'мой контент');

отлично, но можно ли немного поконкретнее.. Вот так получается?

 

 

 

 

Правильно я понял?

var balloons = ['содержимое балуна 1', 'содержимое балуна 2'', 'содержимое балуна N'], i = 0;

objects.then(function () {

    objects.each(function (object) {

         object.properties.set('balloonContent', balloons[i++]);

    });

});

странно, но ничего не отобразилось...

код такой

 


 

дайте ссылку, посмотрим

 Сайт :-)карта на главной странице

Аааа.. в тех метках что приходят из геокодера балун выводит свойсто balloonContentBody

 

поменяйте на 

object.properties.set('balloonContentBody', balloons[i++]);

Что сказать - Вы гений! Спасио Вам! Низкий поклон! (+1)