使用markerclusterer为map v3手动绘制一个簇

时间:2011-01-26 22:52:36

标签: javascript jquery google-maps google-maps-api-3

嘿我正在使用流行的markerclusterer插件,可以在http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer.js找到谷歌地图

我想知道我可以使用什么功能手动添加群集标记,因为我希望,当我缩小很多时,在通过网络发送大量json之前将标记服务器群集。

调用什么函数来添加群集标记?

非常感谢任何帮助

3 个答案:

答案 0 :(得分:2)

由于缺少任何其他答案,我自己对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 :(得分:1)

我改编了@ 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 = [];
    }

答案 2 :(得分:0)

如果我说得对,你可以使用zoom_changed() event of google map object,即当map.getZoom()==16使用 maxNumberOfFetchedPlaces 参数发送你的json请求时,你的服务器可以返回有限数量的结果。由于markerClusterer初始化就像是 var markerClusterer = new MarkerClusterer(map, fetchedPlacesArray);你没有问题。

干杯