Клуб API Карт

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

Пост в архиве.

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

 

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

Адреса будут передоваться в 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)