我之前在項目上遇到類似的問題。
變焦管理
根據由我不得不表現出太多的標記,用戶使用的變焦。 所以我必須找到一種方法來根據所使用的縮放級別限制顯示的標記數量。
我使用了markerManager插件(http://google-maps-utility-library-v3.googlecode.com/svn/tags/markermanager/1.0/docs/examples.html)。
function initialize() {
var mapOptions = {
scaleControl: true,
center: new google.maps.LatLng(50, 3),
zoom: 17,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
mgr = new MarkerManager(map);
};
然後,當您添加新標記時,使用管理器設置標記可見的最小和最大zoomLevel。 如果不在縮放範圍內,標記將不會顯示。
function add_marker(lat, lng, zoomMin, zoomMax, img, path, camPos) {
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
icon: "file:///" + path + "/images/" + img + ".png"
});
google.maps.event.addListener(marker, 'click', function() {
form1.jsCamPos = camPos;
form1.changePosition();
});
mgr.addMarker(marker, zoomMin, zoomMax);
}
感謝您能在最大縮放級別和更高的縮放級別,而不是顯示的所有標記添加一些更多的標記來設定你的所有的相關詳細標記,以提示用戶可放大才能看到的相關詳細標記。
這將大大提高您的應用程序的反應性。
標記地圖界限過濾
另一種方法將是異步加載取決於地圖的邊界標記。
例如,您可以向每次移動地圖時激發的bounds_changed事件添加一個偵聽器,然後獲取新邊界並調用一個webService,它將爲您提供新邊界內的所有標記。
google.maps.event.addListener(map, 'bounds_changed', function() {
var lat0 = map.getBounds().getNorthEast().lat();
var lng0 = map.getBounds().getNorthEast().lng();
var lat1 = map.getBounds().getSouthWest().lat();
var lng1 = map.getBounds().getSouthWest().lng();
var parameters = "{'lat0':'" + lat0 + "','lng0':'" + lng0 + "','lat1':'" + lat1 + "','lng1':'" + lng1 + "'}";
/*
The webService should reply something like this :
[
{"lat":50.5215,"lng":2.515,"title":"marker1"},
{"lat":50.5126,"lng":2.5165,"title":"marker2"},
{"lat":50.5127,"lng":2.54564,"title":"marker3"}
];
*/
$.ajax({
type: "POST",
url: webMethod,
data: parameters,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
$.each (msg, function (idx) {
console.log (msg[idx].lat);
console.log (msg[idx].lng);
var marker = new google.maps.Marker({
position: new google.maps.LatLng(msg[idx].lat, msg[idx].lng),
title: msg[idx].title,
map:map
});
});
},
error: function(e){
alert('error!');
}
});
});
如何加快頁面速度?不要在其上加載80,000個標記。認真。這是要處理的大量數據。您可以嘗試放入一些地理定位邏輯,以便只加載距離地圖當前焦點最近的〜100個標記。 –
我希望只有位於可見區域的標記先加載,異步加載。但由於功能原因,我沒有得到如何去做。 – Eleena
.filter()將80,000列表顯示爲顯示> minLat和
dandavis