缩放级别的任何更改会导致所有标记出现在上一个页面加载以来在地图上的地图上的地图上。如果缩放级别更改是由于我的代码中的setzoom()调用,或者因为我操作zoom滑块,这是正确的。

我有一个带有按钮的地图控制小部件,用于添加与不同类别对应的标记。因此,您单击组的按钮,地图填充表示组的标记。然后您单击“各个”按钮,清除并删除组标记,并且在地图上显示各个标记。等等与其他类别。但是缩放级别的任何变化都会带回地图上一直在地图上的任何标记。

我正在使用markerclustererplus。我不知道这是否在谷歌的代码或我的代码中是Markerclustererplus的错误。希望后者。我将在下面包含我的添加函数。由于我都清除并删除了标记,然后添加了新的标记,我不知道以前的标记返回,从未注明缩放更改触发其返回:

function addMarkers(map,flag) { 

  clearOverlays();
  deleteOverlays();

  if ('event' == flag) {
    data = himaps_event_data;
  } else if ('story' == flag) {
    data = himaps_story_data;
  } else if ('group' == flag) {
    data = himaps_group_data;
  } else {
    data = himaps_user_data;
  }

  for (var k in data) {
    var item = data[k];
    var latLng = new google.maps.LatLng(item.lat, item.lng);
    var marker = new google.maps.Marker({'position': latLng});
    markersArray.push(marker); 
  } 

  var markerCluster = new MarkerClusterer(map, markersArray);  
}
.

此外,如果我更改缩放,则标记不再清除。如果我单击按钮以更改类别,它们只需继续在地图上累积。如果我不改变缩放级别,那绝对不会发生。

通过请求,这里的代码更多:

function clearOverlays() {
  if (markersArray) { 
    for (var i = 0; i < markersArray.length; i++ ) {
      markersArray[i].setMap(null);
    }
  }
}

function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
}

/* map controls */
(function($) {
  Drupal.behaviors.himaps = {
  attach: function(context, settings) {
    $('.map-controls button').click(function() {
      flag = this.id.replace('map-',''); 
      addMarkers(map,flag);
    });
  }
  }
})(jQuery);


/* homepage map */
function newMap(clat,clng) {
  if (!clat) {
    clat = 37.65;  
  }
  if (!clng) {
    clng = -97.43;  
  }
  var myOptions = {
    scrollwheel: false,
    mapTypeControl: false,
    mapTypeControlOptions: {
        style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
        position: google.maps.ControlPosition.LEFT_CENTER
    },
    panControl: false,
    panControlOptions: {
        position: google.maps.ControlPosition.LEFT_CENTER
    },
    zoomControlOptions: {
        style: google.maps.ZoomControlStyle.LARGE,
        position: google.maps.ControlPosition.LEFT_CENTER
    },
    draggable: true,
    center: new google.maps.LatLng(clat, clng),
    zoom: 4,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  };

  return new google.maps.Map(document.getElementById("map-canvas"), myOptions);

}

var map;
var markersArray = [];
var geocoder; 
var marker;
var listener;

google.maps.event.addDomListener(window, 'load', initmapping);

function initmapping() { //aka initialize()
  map = newMap();
  addMarkers(map,'group');
  geocoder = new google.maps.Geocoder();
}
.

最后但并非最不重要的是,这里是markerclusterplus库: http://google-maps -utility-library-v3.googlecode.com/svn/tags/markerclusterplus/2.0.9/src/

有帮助吗?

解决方案

我对Markerclusterer不太了解,但是似乎发生的是每次打电话给您的添加函数,您都会创建一个新的Markerclusterer,但旧的MarkerClusterer,但旧的是从未销毁/删除,因此在缩放更改您已创建的所有实例重绘他们拥有的标记。尝试MarkerClusterer的ClearMarkers或RemoverMarkers方法,也只创建一个MarkerClusterer的一个实例并重使用,而不是每次Cal添加标记创建新的一个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top