0

我有 gps 路线,每条路线大约有 20.000 点。我想在谷歌地球插件(使用谷歌地球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 的 simple.js和 tile canvas 引擎(这是我的 2d 演示)。对于 3D,我需要类似的东西。

我听说 google earth 支持 3d 模型的几种变体,它们具有不同的细节层次,它可以根据距离替换适当的版本。

就我而言,轨道的一部分可能非常接近视点,而另一部分可能非常远。我只需要简化远端部分并在相机移动时重新计算它。我想像划分立方 3d 瓷砖的空间这样的事情,使折线具有不同的精度,这取决于持有它的瓷砖立方体的数量。

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

4

1 回答 1

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);
 }
}
于 2013-11-06T02:55:12.250 回答