줌 레벨을 변경하면 마지막 페이지가로드 된 이후 언제든지지도에 표시된 모든 마커가지도에 표시됩니다. 이는 줌 레벨 변경이 코드에서 setZoom() 호출로 인한 것이 든 줌 슬라이더를 조작했는지에 따라 다릅니다.줌 레벨을 변경하면 내 모든 마커가 Google지도에 다시 표시됩니다.
다른 카테고리에 해당하는 마커를 추가하는 버튼이있는지도 컨트롤 위젯이 있습니다. 그룹에 대한 버튼을 클릭하면지도가 그룹을 나타내는 마커로 채워집니다. 그런 다음 개별 버튼을 클릭하면 그룹 마커가 지워지고 삭제되고 개별 마커가지도에 나타납니다. 기타 카테고리도 마찬가지입니다. 그러나 줌 레벨을 변경하면 페이지가 마지막으로 새로 고쳐진 후지도에 표시된 마커가 다시 나타납니다.
MarkerClustererPlus를 사용하고 있습니다. 이것이 MarkerClustererPlus, Google 코드 또는 내 코드의 버그인지 여부는 알 수 없습니다. 바라건대 후자. 아래에 addMarkers 함수가 포함됩니다. 또한
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);
}
내가 변경하는 경우 : I 때문에 모두 명확하고 새로운 마커를 추가하기 전에 마커를 삭제, 나는 줌의 변화가 자신의 복귀를 트리거 왜 이전 마커가 신경 끄시 고, 다시 와서하는 것이 가능할지 모르겠 확대/축소하면 마커가 더 이상 지워지지 않습니다. 카테고리를 변경하기 위해 버튼을 클릭하면지도에 누적됩니다. 확대/축소 수준을 변경하지 않으면 확실히 발생하지 않습니다.
이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.googlecode.com/svn/tags/markerclustererplus/2.0.9/src/
링크를 제공 할 수 있습니까? 아니면 더 많은 코드를 제공 할 수 있습니까? 적어도 clearOverlays() 및 deleteOverlays() 함수는 무엇입니까? 어디에 markersArray가 만들어지고 지워지는지 궁금합니다. 마커를 지울 때 마커 배열을 지우지 않으면 설명 할 수 있습니다. – puckhead
puckhead, 더 많은 코드로 원래 게시물을 업데이트했습니다. 고맙습니다. – arnoldbird