Javascript 地图数据的优化

Javascript 地图数据的优化,javascript,algorithm,google-maps,optimization,google-maps-api-3,Javascript,Algorithm,Google Maps,Optimization,Google Maps Api 3,我有大量的标记要基于用户视点显示。我正在寻找最有效的方法,当用户更改视点时,我可以快速更新我的地图。换言之,只显示这些属于边界(lg、ln)的标记 目前我的解决方案如下: 在页面加载时,从服务器中提取有关所有位置的所有数据并将其存储在数组中 更新地图 每次用户拖动地图时,删除旧的标记并放置新的标记,这些标记属于绑定 当前的解决方案工作缓慢且效率低下,刷新地图的复杂性增加了O(N*M)其中N需要删除的旧标记和M需要放置在地图上的新标记 我想知道是否有人知道如何使它比这更快 只检测需要更新(删除/添

我有大量的标记要基于用户视点显示。我正在寻找最有效的方法,当用户更改视点时,我可以快速更新我的地图。换言之,只显示这些属于边界(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;
    };
    
    var places=function(){}//某个函数在页面加载时占用了很多位置
    函数更新位置(位置){
    google.maps.Map.prototype.clearMarkers();
    if(places!=null){
    对于(变量i=0;i
    您可以尝试使用。它以较低的缩放级别隐藏标记,以较高的缩放级别显示标记,并允许添加大量标记

    您可以尝试使用。它以较低的缩放级别隐藏标记,以较高的缩放级别显示标记,并允许添加大量标记

    这是一篇关于这方面的好文章


    请看一下

    这是一篇关于这方面的好文章

    请看一看