Обновление markerclusters - PullRequest
5 голосов
/ 17 мая 2011

У меня настроена карта Google с маркерами, предоставляемыми через канал JSON. Поскольку задействовано большое количество маркеров (более 600), я использовал markerclusterer v3, чтобы ускорить процесс. Все работает нормально, пока я не попытаюсь изменить маркеры, отображаемые с помощью кнопок выбора. Мне назначена эта функция для радио кнопок:

function activities(markerarray,mapused,actType) {
    for(i in markerarray) {
        if(markerarray[i].activity[actType] == null) {
            markerarray[i].setMap(null);
    }
        else {
            markerarray[i].setMap(mapused);
    }
}
return markerarray;
}

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

Ответы [ 2 ]

6 голосов
/ 18 мая 2011

Чтобы обновить кластер, сначала нужно вызвать метод resetViewport();, чтобы скрыть его, а затем использовать метод redraw(); для пересчета кластеров.

Использование функции setMap (null) для маркера не отменяет ее регистрацию в markerClusterer, для отмены регистрации можно использовать функции removeMarkers(marker, opt_nodraw) или removeMarkers(markers, opt_nodraw). Из моего опыта это дорогие операции. Установка функции opt_nodraw на true не приведет к перерисовке, что улучшит производительность.

Вы можете сначала удалить группу маркеров, если opt_nodraw установить на true, а затем resetViewport(); redraw(); позже.

1 голос
/ 17 мая 2011

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

Я кэширую все элементы на заднем плане как отдельные маркеры, фильтрую их при необходимости

    displayItems: function(infilter){
        this.markerCluster.clearMarkers();
        var matches = infilter.matches(this.markers);
        this.markerCluster.addMarkers(matches);

    }

this.markers - это мой кеш маркеров, а this.markerCluster - мой объект markerCluster - оба глобальные.

Вы не можете напрямую редактировать кластер, но вы можете добавлять и удалять маркеры для markerCluster.объект, используя addMarker / removeMarker, который, в свою очередь, удалит их из кластера и перерисовает его.

...