Клуб API Карт

Два и более placemark'a расположенные на визуально неразличимой близости друг от друга

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

Здравствуйте.

 

В виду спицифики моей предметной области, у меня может выйти так, что два и более placemark'a будут находится очень близко друг к другу, так что их даже на максимальном приближении не различишь(будем считать, что они вовсе имеют одинаковые координаты, хотя порой мизерное различие все-таки есть). Т.о. если на скопление placemark'ов навести мышкой, то отобразится только один балун относящийся к тому маркеру, на который навели, достучаться до других мышкой нереально.

Я так подозреваю, что нужно использовать кластеры, но вот что я заметил: если координаты маркеров отличаются совсем немного, то кластер не появляется, а если координаты маркеров совпадают, то появляется.

 

Так вот теперь у меня вопрос к знатокам: можно ли как-то заставить кластер объединять точки в каком-то радиусе, так чтоб даже при максимальном приближении, кликнув по нему можно было хотябы показать балун, со списком этих меток? Если да, то как?)

 

 

Спасибо

10 комментариев
Sergey Konstantinov
28 января 2016, 03:27

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

Алексей Yarrr!
28 января 2016, 03:27

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

Sergey Konstantinov
28 января 2016, 03:27

Маловероятно, я на практике такого не встречал.

Вероятно это как раз то, о чем говорит qfox. Вот две координаты [59.1261, 31.69], [59.1261, 31.6901], при значении по-умолчанию gridSize и максимально доступном приближении кластеризатор не заменяет точки на кластер, они остаются наложены друг на друга, но стоит поменять значение gridSize, например, на 31 точки начинают сбиваться в кластер.

Sergey Konstantinov
28 января 2016, 03:27

В рамках грид-кластеризации эта проблема, в общем-то, неразрешима. Здесь проще всего, наверное, подправить координаты близко стоящих объектов так, чтобы они были совсем одинаковы.

Скажите, а можно ли сделать кастомный балун для кластера?

Я так понимаю нужно использовать templateLayoutFactory, но как внутри тогоже build получить доступ к списку вершин, которые скрывает кластер?

Я уже сделал, возможно не очень правильно, так что буду рад любой критике:

clusterBalloonLayout = ymaps.templateLayoutFactory.createClass('', {

    build: function () {

        this.constructor.superclass.build.call(this)

 

        var placemarks = this.getData().cluster.getGeoObjects()

          , $cnt = $(this.getParentElement()).find('.balloon')

          , cntHtml = ''

 

        for(var i = 0, elem; i < placemarks.length; i++) {

            elem = placemarks[i] 

 

            cntHtml +=              

                '' + 

                    '' +

                        '' +

                    '' +

                    '' +

                        '' + elem.properties.get('title') + '' +

                    '' +

                ''

        }

 

        $cnt.html(cntHtml)

    }

})

 

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

Sergey Konstantinov
28 января 2016, 03:27

Сделали всё правильно.

Про хвост балуна не понял, можно скриншот, а лучше страницу с примером?

Вот так было, а хотелось чтобы было так.

Я уже решил проблему невидимого хвостика добавив в кластеризатор clusterBalloonOffset: [0, 27]