-1

我有大量的標記我想顯示基於用戶的觀點。我正在尋找最有效的方式,當用戶更改視點時,我可以快速更新地圖。換句話說,只顯示落入邊界(lg,ln)的這些標記。地圖數據的優化

目前我的解決方案如下:

  1. 在頁面加載把所有數據來自服務器的所有地方,並將其存儲在陣列。
  2. 更新地圖
  3. 每當用戶拖動地圖刪除舊的標記,並把新其落入約束

目前的解決方案的工作,但是進展緩慢和低效,複雜性刷新地圖,需要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; 
}; 

回答

0

你可以嘗試使用Google Map Marker Clusterer。它將標記隱藏在較低的縮放級別,並以較高的縮放級別顯示它們,並允許添加大量的標記。