1
我必須管理地圖約80.000標記集中在法國。 要做到這一點,我決定要視口的邊界,並調用它包含視窗內標記物的動態JSON(用PHP)。而這在「閒置」事件上。刪除標記出視
我面臨的一個問題,這個解決方案。事實上,它已經存在的標記被重新繪製(在相同的位置),其結果權衡地圖白白...
爲了解決這個問題,標記列表之前和JSON查詢後進行比較(感謝jQuery),以便只繪製新的標記。它的工作原理!現在
,我想刪除當前未在地圖上顯示的標記。或者一個標識符列表(我得到它感謝jQuery)由一個ID指定,這也是標記的標題。那麼,如何刪除這樣的標記呢?我指定我正在使用MarkerManager。
否則,如果我不刪除這些標記,它們將在某些情況下重新繪製...例如,您正在查看城市A,您移動地圖以查看城市B,並且你回到城中,有...
下面是代碼:
var map;
var mgr;
var markers = [];
function initialize(){
var mapOptions = {
zoom: 6,
center: new google.maps.LatLng(46.679594, 2.109375)
};
map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);
var mgrOptions = { borderPadding: 50, maxZoom: 15, trackMarkers: false };
mgr = new MarkerManager(map, mgrOptions);
google.maps.event.addListener(map, 'idle', function() {
mapEvent();
});
}
function mapEvent(){
if(map.getZoom() >= 8){
var bounds = map.getBounds();
getSupports(bounds.getNorthEast(), bounds.getSouthWest());
} else {
// Todo
}
}
var markerslistID = new Array();
var markerslistData = {};
function getSupports(ne, sw){
newMarkerslistID = new Array();
newMarkerslistData = {};
// Getting the markers of the current view
$.getJSON('./markerslist.php?nelat='+ne.lat()+'&nelng='+ne.lng()+'&swlat='+sw.lat()+'&swlng='+sw.lng(), function(data) {
for (var i = 0; i < data.points.length; i++) {
var val = data.points[i];
newMarkerslistID.push(val.id);
newMarkerslistData[val.id] = new Array(val.lat, val.lng, val.icon);
}
// List of New Markers TO PLOT
var diffNewMarkers = $(newMarkerslistID).not(markerslistID).get();
// List of Old markers TO REMOVE
var diffOldMarkers = $(markerslistID).not(newMarkerslistID).get();
// Plotting the NEW MARKERS
for(var i = 0; i < diffNewMarkers.length; i++){
var marker = new google.maps.Marker({
position: new google.maps.LatLng(newMarkerslistData[diffNewMarkers[i]][0], newMarkerslistData[diffNewMarkers[i]][1]),
title : diffNewMarkers[i],
icon : './images/'+newMarkerslistData[diffNewMarkers[i]][2]+'.png'
});
mgr.addMarker(marker, 0);
}
/*****************************************
HERE WE HAVE TO REMOVE
THE MARKERS CONTAINED IN diffOldMarkers
*****************************************/
mgr.refresh();
// Switching the new list to the old, for the next event
markerslistID = newMarkerslistID;
markerslistData = newMarkerslistData;
});
}
謝謝您的幫助。
感謝您的回答。但要做到這一點,我必須循環管理器中包含的標記(mgr變量)......但是如何? –