Клуб API Карт

охват карты при добавлении кластеров

d.andrushchenko
15 апреля 2013, 16:35

Событие "objectsaddtomap" ведет себя странно. Нажимаю на кнопку - показать точки (кластеры), иногда карта охватывает все точки иногда событие "objectsaddtomap" вообще не вызывается. Вызывается только когда я делаю зум (с размеров города - до размеров страны) - только когда точку видно тогда и срабатывает это событие. Есть список точек, выбираем 1 - показываем все точки на карте (автозум), нажимаю на кластеры, смотрю все точки кластер, опять нажимаю на кнопку смены точек - остаюсь на прежнем месте, точки исчезают т.к. они в другом месте, но при этом они где-то в стороне, а мне надо сразу чтобы экран охватывал все точки.

Вот код:

 

cluster.add(collection);

myMap.geoObjects.add(cluster);

 

// функция расчета области видимости всех точек на карте

var visible = function(coords) {

var result = [[999,999],[0,0]], i, l;

console.log(coords.length);

for (i = 0, l = coords.length; l; --l, ++i) {

result[0][0] = Math.min(result[0][0], coords[i][0]);

result[0][1] = Math.min(result[0][1], coords[i][1]);

result[1][0] = Math.max(result[1][0], coords[i][0]);

result[1][1] = Math.max(result[1][1], coords[i][1]);

}

return result;

},

visibleOn;

 

// загрузка кластера на карту

cluster.events.add('objectsaddtomap', function() {

console.log('objectsaddtomap');

isCluster = true;

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

var geoObjectState = cluster.getObjectState(collection[i]);

if (geoObjectState.isShown) {

if (!geoObjectState.isClustered) collection[i].options.set('iconImageHref', '<?php echo base_url(); ?>images/metka.png');

}

}

if (!geoObjectState.isShown) {

if (visibleFlag != false) {

visibleOn = visible(coords);

myMap.setBounds(visibleOn);

}

}

visibleFlag = false;

});

 

 

Может стоит использовать другие события?! Суть в том, что это люди, которые были в разных местах. Выбираю человека А - показываются его точки (кластеры). Наживаю например на кластер, смотрю что-там. Теперь выюираю другого ч-ка, событие "objectsaddtomap" не сработало. Я остаюсь на прежнем месте, но нету ниодной точки т.к. они где-то в стороне. Событие "objectsaddtomap" срабатывает только когда я увеличиваю масштаю карты и вижу точку-кластер, вот тогда в консоли видно что срабатывает евент.  

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

вообщем на карте что-то есть но событие "objectsaddtomap"  не срабатывает т.к. визуально этих точек не видно, как проверить что на карте что-то есть и охватить экраном все точки?!

нельзя просто так взять и охватить кластеры =)

Не очень поняла постановку задачи. Вам нужно, чтобы при клике на человека перебирались все точки, которые имеют к нему отношение (они могут быть в кластере и вне его). И карта позиционировалась так, чтобы все точки были видны. Так?