Клуб API Карт

Нужна помощь по балунам при массовом геокодировании!

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

Всем доброго времени суток, пожалуйста подскажите! Я не особо силен в js

 

var myMap = new ymaps.Map("map", {

    center: [59.93853, 30.313497],

    zoom: 10,

    behaviors: ['default', 'scrollZoom', 'drag']

}), myCollection;

 

var search_query = Array();

$('input[name="map"]').each(function () {

    search_query.push('"' + $(this).val() + '"');

})

 

 

var mGeocoder = new MultiGeocoder({

    boundedBy: myMap.getBounds()

});

 

// Геокодирование массива адресов и координат.

mGeocoder.geocode(search_query)

    .then(function (res) {

    // Асинхронно получаем коллекцию найденных геообъектов.

    myCollection && myMap.geoObjects.remove(myCollection);

    myMap.geoObjects.add(myCollection = res.geoObjects);

}, function (err) {

    console.log(err);

});

 

 

Делает следующее: собирает параметры value из из объектов input hidden

нужно добавить балуны с с произвольным содержанием, например считанным из параметра data того же hiddеn объекта, не могу понять на каком этапе подключать контент балуна?

 

и второй вопрос, средствами yandex.API можно сделать такую вещь:

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

11 комментариев

 

не могу понять на каком этапе подключать контент балуна?

 на этппе получения коллекции найденных геообъектов.

2. Кластеризатор?

 

 

 

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

 

2. Не знаю ка это правильно называется, возможно и кластеризатор, попробую подробней описать

пример есть улица Симеоновская 30 у нее определнные координаты, если геокодировать, то появится точка на карте, все замечательно, но у меня сайт занимается арендой квартир и у меня может быть такая ситуация, что в доме 30 по улице симеоновской сдаются 3 квартиры (например 22, 23, 24) и нужно чтобы ставилось не 3 точки на карте, фактически в одно место карты, а одна точка, но в балуне было написано:

Симеоновская 30

сдается квартира 22

сдается квартира 23

сдается квартира 24

 

Здесь я не прошу прям код как все делается, хотя бы направление для поиска, если есть такая возможность, если возможности решить такую проблему средсвами апи нет, попробую частично ее решить на уровне серверных скриптов и правильной выборки из БД

 

 

ах да, еще вопрос, у меня на карту аяксом грузятся около 1000 объектов, от сервера ответ приходит через 0,5 сек, а на карту 1000 объектов грузится еще секунд 10, как можно ускорить загрузку?

 

1. myGeoObject.properties.set("balloonContentBody", "

мое содержимое

");
2. кластеризатор

есть много способов оптимизации
1. не грузить 1000 объектов за раз
2. кластеризатор
3. активные области

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

mGeocoder.geocode(search_query)

.then(function (res) {

       // Асинхронно получаем коллекцию найденных геообъектов.

myCollection && myMap.geoObjects.remove(myCollection);

myMap.geoObjects.add(myCollection = res.geoObjects);

   },

или я путаю?

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

 

про остальное спасибо, я почитаю!

 

Нужно перебрать все объекты в геоколлекции и каждому проставить содержимое балуна

понял, спасибо!

 

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

грубо говоря заменить весь этот код:

var search_query = Array();

$('input[name="map"]').each(function(){

search_query.push('"'+$(this).val()+'"');

})

 

 

var mGeocoder = new MultiGeocoder({ boundedBy : myMap.getBounds() });

 

// Геокодирование массива адресов и координат.

mGeocoder.geocode(search_query)

.then(function (res) {

       // Асинхронно получаем коллекцию найденных геообъектов.

myCollection && myMap.geoObjects.remove(myCollection);

myMap.geoObjects.add(myCollection = res.geoObjects);

   },

   function (err) {

       console.log(err);

});

 

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

Если можно обойтись без мультигеокодирования лучше так и сделать.
Проблем не должно возникнуть.

Большое спасибо, за помощь! 

Сделал все с кластерами, получилось очень хорошо, только теперь есть вопрос по маркерам кластера, можно как-то сделать, что бы маркеры кластеров и точек были одинаковыми и были просто синей точкой? (для кластера точка может быть просто чуть больше)

лучше на каждый новый вопрос создавать новую тему в клубе

да, я уже создал тему по этому вопросу, не могли бы посмотреть? http://clubs.ya.ru/mapsapi/replies.xml?item_no=39282