문제

줌 레벨의 변경은 마지막 페이지로드 이후 언제든지 맵에있는지도에 모든 마커가 나타납니다. 줌 레벨 변경이 내 코드에서 setZoom () 호출로 인한 것인지 또는 확대 / 축소 슬라이더를 작동하기 때문에시기가 충족됩니다.

다른 카테고리에 해당하는 마커를 추가하는 단추가있는지도 제어 위젯이 있습니다. 따라서 그룹에 대한 단추를 클릭하면 맵은 그룹을 나타내는 마커로 채 웁니다. 그런 다음 개인 버튼을 클릭하면 그룹 마커가 지워지고 삭제되고 개별 마커가지도에 나타납니다. 다른 범주와 함께. 줌 레벨의 변경은 페이지가 마지막으로 새로 고쳐지기 때문에지도에있는 마커를 가져옵니다.

MarkerClustererPlus를 사용하고 있습니다. Google의 코드 또는 코드에서 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();
}
.

마지막으로, 여기에는 markerclustererPlus 라이브러리가 있습니다. http://google-maps-utility-library-v3.garoglecode.com/svn/tags/markerclusterplus/2.0.9/src/

도움이 되었습니까?

해결책

MarkerClusterer에 대해 많이 알지 못하지만 일어나는 것으로 보이는 것처럼 보입니다. 새로운 MarkerCluster를 만드는 기능을 호출 할 때마다 오래되었지만 이전 프로그램은 결코 삭제되거나 제거되지 않으므로 확대 / 축소 변경 한 모든 인스턴스가 생성되지 않습니다.그들이 가지고있는 마커를 다시 그려라.MarkerClusterer의 ClearMarkers 또는 Removermarkers 메서드를 사용해 보시고 MarkerClusterer의 한 인스턴스 만 만들어 Cal AddMarkers 마분을 만드는 대신 재사용합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top