Клуб API Карт

Cluster groupByCoordinates - ломает карту.

Пост в архиве.
s1blop9
7 августа 2013, 15:07

Есть задача, на определённом уровне зума карты менять groupByCoordinates у кластера на тру, при возвращении уровней обратно, необходимо востанавливать false

Имеется следующий код.

 

 

myMap = new ymaps.Map('map', {

            center: [43.580994, 39.726839],

            zoom: 12,

            behaviors: ["default", "scrollZoom"]

        });

 

myCluster = new ymaps.Clusterer({

            clusterBalloonSidebarWidth: 10,

            clusterBalloonWidth: 290,

            clusterBalloonHeight: 145

        });

 

myMap.events.add('boundschange', function (e) {

            if (e.get('oldZoom') != e.get('newZoom')){

                if (e.get('newZoom') >= 17){

                    myCluster.options.set({groupByCoordinates:true});

                }else{

                    myCluster.options.set({groupByCoordinates:false});

                }

        });


/*Блок заполнения геообжектс пропущен*/

myCluster.add(myGeoObjects);

 

        myMap.geoObjects.add(myCluster);

 


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

Вылетает ошибка, и всё контролы на карте перестают работать. Как и сама карта.

  1. Uncaught TypeError: Cannot read property 'length' of undefined combine.xml?modules=dZergLd4eJedd7einCoZnDnsntnzgigeh5pkeynAirisiokMgzm6m7l…YdBbacecqcNi1j9bJbndUcCaBdkdlaScBaocKb5j4mNmFj3&jsonp_prefix=ymaps2_0_30:1
  1. Uncaught TypeError: Cannot call method 'getCurrentState' of null combine.xml?modules=dZergLd4eJedd7einCoZnDnsntnzgigeh5pkeynAirisiokMgzm6m7l…YdBbacecqcNi1j9bJbndUcCaBdkdlaScBaocKb5j4mNmFj3&jsonp_prefix=ymaps2_0_30:1

 


 

Подскажите как решить "это", или может какой то другой метод как можно справится с задачей выше.

Опытным путём выяснил, что ломает всё это - myCluster.options.set({groupByCoordinates:true}); , безраницы true или false. И не важно где оно вызвана, но именно оно, по велению рандома вызывает ошибку выше.



 

 myCluster = new ymaps.Clusterer({           
            clusterBalloonSidebarWidth: 10,
            clusterBalloonWidth: 290,
            clusterBalloonHeight: 145,
            groupByCoordinates: false
        });
        myClusterGrouped = new ymaps.Clusterer({
            clusterBalloonSidebarWidth: 10,
            clusterBalloonWidth: 290,
            clusterBalloonHeight: 145,
            groupByCoordinates: true
        });


        myMap.events.add('boundschange', function (e) {
            try{
            if (e.get('oldZoom') != e.get('newZoom') &&  (e.originalEvent.type=='statechange')){
                if (e.get('newZoom') >= 17 && !changed){
                    myCluster.removeAll();
                    myClusterGrouped.add(myGeoObjects);
                    changed = true;
                }else{
                    myCluster.add(myGeoObjects);
                    myClusterGrouped.removeAll();
                    changed = false;
                }

            }}catch (e){}
        });

myCluster.add(myGeoObjects);
        myMap.geoObjects.add(myCluster);
        myMap.geoObjects.add(myClusterGrouped);


 Вариант с 2умя кластерами, у которых меняются элементы тоже не работает. Те же ошибки.

Получается любые махинации с кластерами ломают карту.

 

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

Проблема решена сменой

 

на


п.с.

Что у вас за обезьянки сидят что такие баги в стейбл выпускают

Не забывайте, что вы общаетесь в клубе с этими обезьянками. Давайте будем более корректными по отношению друг к другу. Это был извесный баг, мы его починили, как вы сами убедились.

Тоже возникает такая ошибка, и в "2.0" и в "2.0-stable".

Метки с контейнерами (balloon-ами), на территории Россия и рядом с её границами (пограничные СНГ).

Добавляются в кластеризатор.

Возникает при перемещении по карте - не всегда - при перемещении по карте, примерно через 10-15 секунд.

FireFox:
Сперва - TypeError: this._lc[e] is undefined
а потом - при попытке перемещения по карте куча - TypeError: t is null

Google Chrome:
Сперва - Uncaught TypeError: Cannot read property '24' of undefined
а потом  - Uncaught TypeError: Cannot call method 'getCurrentState' of null

Всё это для скрипта с длиннющим URL:
https://api-maps.yandex.ru/2.0.33/release/combine.xml?modules=....&jsonp_prefix=ymaps2_0_33 (строка 1)


И ещё, при центре карты на координатах:
65.35051500621049,-161.91980416086798
прекращается добавление меток на карту с ошибкой:

FireFox:
TypeError: this._lc[h[0]] is undefined


И ещё, вдруг что если:
Все эти ошибки не повторяются при zoom-е более 5-и.

 

Всё это для скрипта с длиннющим URL:
https://api-maps.yandex.ru/2.0.33/release/combine.xml?modules=....&jsonp_prefix=ymaps2_0_33 (строка 1)

Строка 1, как Вы понимаете для отладки бесполезна,

подключите АПИ в режиме debug, &mode=debug

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

Лучше приложить ссылку на эту страницу

 

На данный момент ссылку передать не могу.


FireFox:

Первый - TypeError: this._grid[gridX] is undefined
var cell = this._grid[gridX][gridY],
combin...s2_0_33 (строка 2628)

за тем: TypeError: actionManager is null
var currentState = actionManager.getCurrentState(),
combin...s2_0_33
"2.0-stable" (строка 47649)
"2.0" (строка 47660)

Google Chrome:
http://yadi.sk/d/xwrsyy9ZCoQPf

Uncaught TypeError: Cannot read property '8' of undefined combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:2628
imports.util.augment._removeCluster combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:2628
imports.util.augment._forEach combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:2492
imports.util.augment._onTileBoundsMove combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:2310
imports.util.augment._onTileBoundsChange combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:2288
ArrayImplementation._callListeners combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33217
ArrayImplementation.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33167
imports.util.augment.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:9689
TileBoundsGetter._onMapMove combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:1514
(anonymous function) combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:1498
ArrayImplementation._callListeners combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33217
ArrayImplementation.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33167
PriorityEventManager._notify combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:25907
PriorityEventManager.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:25848
Map._onActionChange combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:23685
ArrayImplementation._callListeners combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33217
ArrayImplementation.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33167
imports.util.augment.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:9689
ActionManager._applyBounds combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:46973
ActionManager._onActionEnd combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:46899
ArrayImplementation._callListeners combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33217
ArrayImplementation.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33167
imports.util.augment.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:9689
BaseAction.end combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:47642
imports.util.augment.end combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:23955
(anonymous function) combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:28427
30
Uncaught TypeError: Cannot call method 'getCurrentState' of null combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:47650
BaseAction.fixTick combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:47650
imports.util.augment.tick combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:23950
imports.util.augment.tick combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:28408
imports.behavior.factory.create._onMove combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:4328
ArrayImplementation._callListeners combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33217
ArrayImplementation.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33167
imports.util.augment.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:9689
Engine._fireEvent combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:55858
Engine._onMouseMove combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:55779
ArrayImplementation._callListeners combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33217
ArrayImplementation.fire combine.xml?modules=4542@S4Y!V!Z!Y!27,@Q6n@$3C!I4-5f4.4{8x8w5a8C4=4)4,![5h!_!=!{5l4`4[4}5e5d8~4:9b7…:33167
TouchMapper._onMouseEvent

 Могу предположить, что сбой вызывает то, что размер ячейки  кластера не кратен 2^n. Попробуйте поставить не 35, а 32 например. Баг остается?

Действительно, работает :)
Стоит в описании кластеризатора текст добавить об этом - http://api.yandex.ru/maps/doc/jsapi/2.x-stable/ref/reference/Clusterer.xml

Да, надо это зачинить, спасибо за репорт.