我目前正在使用OpenLayers 6来显示移动地图应用程序生成的地理数据。这包括一个“实时”GPS位置,每秒最多更新10次。通过更新图层上的功能,我可以以这种速度运行我的应用程序,而不会出现任何问题。
第二个功能是让GPS在地图上留下“面包屑”。这些点每秒添加10次到特定层。我一直在用
WebGLPointsLayer
在我遇到问题之前,展示这些将性能大幅提升到25000分的分数。使用以下代码添加这些点:
图层初始化:
this.gpsBreadcrumbsLayer = new WebGLPointsLayer({
source: new Vector({}),
style: {
symbol: {
symbolType: 'circle',
size: 10,
color: 'rgba(0,0,255,1)'
}
}
});
基于接收到的lonLat([lon,lat])添加功能
const source = this.gpsBreadcrumbsLayer.getSource();
source.addFeature(new Feature(new Point(fromLonLat(lonLat))));
我正在寻找一种高性能的解决方案,它允许我在地图上绘制±25k点以上的点,而不会影响地图的性能和响应能力。我见过一些例子,可以轻松处理±250k点,但这些点只加载一次,并且不会以每秒10次的速度动态添加。
我也不确定OpenLayers在引擎盖下是如何工作的,但就性能而言,当添加功能时,OpenLayers似乎正在重新绘制整个层,因为随着时间的推移,它会逐渐降低性能。每当我停止添加点时,我会看到性能恢复,即使已经生成的点仍然在地图上。
TL;博士
我需要一种方法来动态增加10点每秒到一个层,可以很容易地上升到100.000点没有明显的性能影响。
网络杀手
帮了我很多忙,但当我达到2万5千分时,速度会变慢。