我有大量的標記我想顯示基於用戶的觀點。我正在尋找最有效的方式,當用戶更改視點時,我可以快速更新地圖。換句話說,只顯示落入邊界(lg,ln)的這些標記。地圖數據的優化
目前我的解決方案如下:
- 在頁面加載把所有數據來自服務器的所有地方,並將其存儲在陣列。
- 更新地圖
- 每當用戶拖動地圖刪除舊的標記,並把新其落入約束
目前的解決方案的工作,但是進展緩慢和低效,複雜性刷新地圖,需要O(N*M)
其中N
舊標誌被刪除,並且需要在地圖上放置新的標記M
。
我不知道有人有想法如何使它比這更快嗎?
如何只檢測需要更新(刪除/添加)的標記?
我通常會尋找任何優化建議 - 這可能是算法改進,技術或體系結構(在後端處理?)。
當前代碼:
var places = function(){} // Some function that pulls a lot of places on page load
function updatePlaces(places){
google.maps.Map.prototype.clearMarkers();
if(places != null){
for(var i = 0; i < places.length; i++){
var lat = places[i].lat;
var lng = places[i].lng;
var position = new google.maps.LatLng(lat, lng);
if(map.getBounds().contains(position) && placedMarkers < markerLimitNumber) {
var marker = new MarkerWithLabel({
position: position,
draggable: false,
raiseOnDrag: true,
map: map,
labelContent: '',
labelAnchor: new google.maps.Point(-10, 15),
labelClass: "labels", // the CSS class for the label
labelStyle: {opacity: 1.0},
icon: 'images/markers/grey_circle_small.png'
});
marker.addListener('click', function(){});
markers.push(marker);
placedMarkers = placedMarkers + 1;
}
}
}
}
google.maps.Map.prototype.clearMarkers = function() {
for(var i=0; i < markers.length; i++){
markers[i].setMap(null);
}
markers = new Array();
placedMarkers = 0;
};