вручную нарисовать кластер с markerclusterer для карт v3 - PullRequest
3 голосов
/ 27 января 2011

Эй, я использую популярный плагин markerclusterer для карт Google, который можно найти по адресу http://google -maps-utility-library-v3.googlecode.com / svn / trunk / markerclusterer / src / markerclusterer.js

Мне интересно, какую функцию я могу использовать, чтобы вручную добавить кластерный маркер, так как я хотел бы, когда я сильно уменьшу масштабирование, кластеризовать маркеры на стороне сервера перед отправкой огромной нагрузки json поверхwire.

Какая функция вызывается для добавления маркера кластера?

Любая помощь очень ценится

Ответы [ 3 ]

2 голосов
/ 01 февраля 2011

Из-за отсутствия какого-либо другого ответа я сам сделал расширение MarkerClusterer, я уверен, что его можно переписать для лучшего стандарта, но вот что я мог бы придумать:

MarkerClusterer.prototype.AddCluster = function(clat, clng, csize)
{
  var clusterlocation = new google.maps.LatLng(clat, clng)
  var CI = new ClusterIcon(new Cluster(this), this.getStyles, this.getGridSize());
  var index = 0;
  var dv = csize;
  while (dv !== 0) {
    dv = parseInt(dv / 10, 10);
    index++;
  }
  var style = this.styles_[index-1];
  CI.setCenter(clusterlocation);
  $.extend(CI, {sums_ : {text : csize, index: index}, url_ : style['url'], width_ : style['width'], height_ : style['height']});
  CI.setMap(this.map_);
  CI.show();
  CI.triggerClusterClick = function()
  {this.map_.setCenter(clusterlocation);
   this.map_.setZoom(this.map_.getZoom()+1); }
}
1 голос
/ 09 марта 2013

Я адаптировал код @ Jakob для Google Maps API V3.Надеюсь, если кто-нибудь может помочь.

MarkerClusterer.prototype.A

    ddCluster = function(clat, clng, csize)
    {
        this.setZoomOnClick(false);
        if (typeof this.aAddClusterIcons == "undefined"){
            this.aAddClusterIcons = [];
        }

        this.activeMap_ = this.getMap();
        var clusterlocation = new google.maps.LatLng(clat, clng)
        var CI = new ClusterIcon(new Cluster(this), this.getStyles, this.getGridSize());
        var index = 0;
        var dv = csize;
        while (dv !== 0) {
            dv = parseInt(dv / 10, 10);
            index++;
        }
        var style = this.styles_[index-1];
        $.extend(CI, {sums_ : {text : csize, index: index}, url_ : style['url'], width_ : style['width'], height_ : style['height'], anchorIcon_: [clat, clng]});
        CI.setCenter(clusterlocation);
        CI.setMap(this.activeMap_);
        CI.show();

        this.aAddClusterIcons.push(CI);
    }
    MarkerClusterer.prototype.RemoveClusters = function(clat, clng, csize)
    {
        if (typeof this.aAddClusterIcons == "undefined"){
            this.aAddClusterIcons = [];
        }

        $.each(this.aAddClusterIcons, function(iIndex, oObj){
            oObj.onRemove();
        });
        this.aAddClusterIcons = [];
    }

0 голосов
/ 27 января 2011

Если я получу это право, вы можете использовать событие zoom_changed () объекта карты Google , то есть когда map.getZoom()==16 отправляет ваш запрос json с параметром maxNumberOfFetchedPlaces , чтобы ваш сервер могвернуть ограниченное количество результатов. Так как инициализация markerClusterer похожа на
var markerClusterer = new MarkerClusterer(map, fetchedPlacesArray);, у вас не возникнет проблем.

Cheers

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...