优化巨大的gps跟踪绘制谷歌地球插件

时间:2013-11-05 17:59:07

标签: javascript performance google-earth-plugin

我有gps路线,每个路线有大约20.000点。我想在google earth插件上绘制它们(使用google earth api)。这是执行此操作的简单代码:

var drawTracks = function(data) {
  var trackPlacemark = ge.createPlacemark("");
  var trackModel = ge.createLineString("");
  trackPlacemark.setGeometry(trackModel);
  ge.getFeatures().appendChild(trackPlacemark);
  for (var i = 0; i < data.length; i++) {
    trackModel.getCoordinates().pushLatLngAlt(data[i].lat,data[i].lng,data[i].alt);
  }
}

它有效,但似乎数据太大,绘制一个轨道需要大约一分钟,插件停留一秒后,然后轨道消失。

那么有什么解决方案可以改善这项任务的性能吗?似乎必须在线上进行简化,并且点的数量必须取决于距离轨道的距离。

我已经为2D谷歌地图解决了这个任务 - 我使用Mourner's simplify.js并平铺画布引擎(here's my demo for 2d)。我需要类似3D的东西。

我听说谷歌地球支持三种不同级别细节的3D模型,它可以根据距离适当地调整版本。

在我的情况下,轨道的一部分可能非常接近视角,而另一部分 - 非常远。我只需要简化远端部分并在摄像机移动时重新计算它。我想像是将立方体三维瓷砖划分为空间,以便折线具有不同的精度,并且与包含它的瓷砖立方体的数量具有相关性。

与谷歌地图不同,地球是黑盒子,很难理解里面发生了什么,以及已经优化了什么。因此,对谷歌地球插件的链接,示例和优化的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

说,5米腿的20000点达到100千米的视野, 所以你可能看不到100米的细节。 附近十米以内的一些点可以忽略不计。

var j=k=0;
for (var i = 0; i < data.length; i++) {
   if(Math.abs(data[i].lat-j)>0.00001||Math.abs(data[i].lng-k)>0.00001){
   j=data[i].lat;k=data[i].lng;
   trackModel.getCoordinates().pushLatLngAlt(data[i].lat,data[i].lng,data[i].alt);
 }
}