优化地图数据

Optimization for map data

本文关键字:数据 地图 优化      更新时间:2024-06-28

我有大量的标记要基于用户视点显示。我正在寻找一种最有效的方式,当用户更改视点时,我可以快速更新我的地图。换句话说,只显示落入边界(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;
};

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

这里有一篇关于的好文章

https://www.mapbox.com/blog/supercluster/?utm_source=newsletter_april&utm_medium=电子邮件&utm_content=超星系团&utm_campaign=newsletter_april

请查看