프랑스에 집중된 약 80.000 개의 마커 맵을 관리해야합니다. 이렇게하려면 뷰포트 범위를 가져 와서 뷰포트 내부에 마커가 포함 된 동적 JSON (PHP 포함)을 호출하기로 결정했습니다. 그리고 이것은 "유휴"이벤트에.뷰포트에서 마커 제거
이 솔루션에 문제가 있습니다. 사실, 이미 존재하는 마커는 (동일한 위치에서) 다시 플롯되어 결과적으로 아무것도 계산되지 않습니다.
해결하기 위해 JSON 쿼리 전후의 마커 목록을 비교합니다 (덕분에 jQuery)를 사용하여 새 마커 만 플롯합니다. 그리고 그것은 작동합니다!
이제 현재 맵에 표시되지 않은 마커를 제거하고 싶습니다. 또는 마커의 제목 인 ID로 지정된 마커 목록 (jQuery 덕택에 얻을 수 있음). 그렇다면 어떻게 마커를 삭제할 수 있습니까? 나는 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;
});
}
여러분의 도움에 감사드립니다 : 당신은 여기
코드는 ... 다시 도시 A와 얻는다.
감사를. 하지만 이렇게하려면 관리자 (mgr 변수)에 포함 된 마커를 반복해야합니다. 그러나 어떻게? –