Клуб API Карт

множество точек на карте с одинаковыми координатами

d.andrushchenko
7 марта 2013, 15:45

у меня есть нарпимер 5 адерсов, при этом координаты А1=А2=А3=А4 и А5. Для каждой метки своя инфа. как сделать так чтобы iconContent-ы как-то различались?! Ато у меня накарте вместо 5 точек, только 2. При этом инфа 1,2,3,4 точек налазит друг на друга и видна инфа только последней...

 

res.geoObjects.get(i).properties.set('iconContent', '<b>' + a + '</b>' + '<br/>' + companyname[i] + '<br/>' + address[i] + '<br/>' + timefrom[i] + ' - ' + timetill[i]);

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

Кластер все-таки лучше для групп точек, при использовании класетра очень близкие точки у вас объединятся. Содержимое иконки будет число точек в кластере, а вот по клику на иконку в балуне очень даже удобно можно отобразить информацию по этим точкам (имя компании, адрес и даты), очень советую.

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

res.geoObjects.get(i).properties.set('iconContent', '' + a + '' + '
' + companyname[i] + '
' + address[i] + '
' + timefrom[i] + ' - ' + timetill[i]);

устанавливаю свойства (название компании, адресс, время начала, время конца чеголибо), но если 4 адреса - это ОДИНАКОВЫЕ КООРДИНАТЫ, то у меня будет виден только один балун с информацией (который последним загрузился на карту). Как сделать так чтобы для 4 одинаковых адресов был общий балун?!

Прочитайте про кластеры. Как и сказал   это простое решение вашей проблемы.

Если хотите без кластеров, то рекурсивную функцию сделайте, которая проверяет есть ли уже точки с такими координатами, и если есть, пусть добавляет\уменьшает этой точке какие-нибудь доли секунд в координатах. Так у вас получатся точки на карте с некоторым небольшим разбросом.

Кстати откройте секрет почему 4 точки в одном месте.

>правильно понял кластеры это если точки рядом

В вашем случае, когда точки ну совсем рядом, - кластеры рулят.

приложение для торговых агентов у них за день, например, по 5 визитов в разные компании, но иногда в одну и ту же контору по несколько раз надо заезжать, надо 1) показать на карте места куда надо заехать 2) проложить маршрут между местами в соответствии с назначенным временем например первое место в 9-00 - начало маршрута (в балуне цыфра 1), второе - на 10-00 - цифра 2 и так до конца. Если есть парочка визитов в одну и ту жзе фирму то надо сделать общий балун, где будет показывтаься информация по визитам. . 

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

 

 multiGeocoder

                        .geocode(address)

                            .then(

                                function (res) {

                                    for (var i = 0; i < timefrom.length; i++) {

                                        res.geoObjects.get(i).properties.set('iconContent', '' + a + '' + '
' + companyname[i] + '
' + address[i] + '
' + timefrom[i] + ' - ' + timetill[i]);

                                        visitRouters[i] = res.geoObjects.get(i).geometry.getCoordinates();

                                        a++;

                                    }

                                    visitRouters.unshift(myPlacemark.geometry.getCoordinates());

                                    res.geoObjects.options.set('preset', 'twirl#violetStretchyIcon');

                                    collection = res.geoObjects;

                                    myMap.geoObjects.add(res.geoObjects);

                                },

                                function (err) {

                                    console.log(err);

                                }

                    );

Используйте кластеризатор.

Просто используйте кластеризатор. Примеры в документации и песочнице.

ок! вопрос в том, что collection = res.geoObjects (результат геокодирования) не воспринимается кластером как массив геообьектов

                                    clusterer.add(collection);

                                    myMap.geoObjects.add(clusterer);

Вытаскиваем метки из коллекции, добавляем в массив, добавляем массив в кластер.

Можно даже просто сформировать массив ручками.

Например 

 

visitRouters[i] = res.geoObjects.get(i).geometry.getCoordinates();
clusterData.push(res.geoObjects.get(i))

 

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