优化地图数据
Optimization for map data
我有大量的标记要基于用户视点显示。我正在寻找一种最有效的方式,当用户更改视点时,我可以快速更新我的地图。换句话说,只显示落入边界(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;
};
您可以尝试使用Google Map Marker Clusterer。它在低缩放级别隐藏标记,在高缩放级别显示标记,并允许添加大量标记。
这里有一篇关于的好文章
https://www.mapbox.com/blog/supercluster/?utm_source=newsletter_april&utm_medium=电子邮件&utm_content=超星系团&utm_campaign=newsletter_april
请查看
相关文章:
- 不显示带有本地json文件数据的谷歌地图脚本
- 缓存谷歌地图数据
- 谷歌地图/Angular JS:地图更新并不总是反映数据,并且可以't删除标记
- 如何在D3.js中绘制地图投影上的点,并使用范围滑块过滤数据
- 我的地图数据's不会使用php存储在mysql数据库中
- 美国地图插件,具有状态数据/悬停功能的新按钮
- 将iPhone位置数据输入谷歌地图
- 将数据加载到地图上的更好解决方案
- 使用来自URL的JSON数据来显示谷歌地图标记-如何
- D3-多年渲染'美国地图上的州数据价值
- 从地图框 API 获取地理 JSON 数据以确定多边形中的点
- D3中荷兰的自定义数据地图
- 数据地图-根据给定的x和y坐标检索国家代码
- 数据地图获取国家代码列表
- 我如何传递事件变量/在地图上放置一个标记-当绑定完成事件在数据地图&D3
- 数据地图显示了印度的小尺寸地图
- 我们如何为d3数据地图创建一个onclick事件?
- JS库创建一个类似Google消费者晴雨表的数据地图
- 数据地图-加载不同国家的地图以及世界地图
- 如何使用外部topoJSON文件绘制数据地图