Javascript 谷歌地球插件重新渲染

Javascript 谷歌地球插件重新渲染,javascript,google-earth-plugin,Javascript,Google Earth Plugin,我正在尝试在GE插件中设置点的动画。问题是,每次我更改基础几何体时,它似乎都会重新渲染自己,最终导致插件冻结 var lineString = ge.createLineString(''), placemark = ge.createPlacemark(''), coords = lineString.getCoordinates(), features = ge.getFeatures(); placemark.setGeometry(lineStri

我正在尝试在GE插件中设置点的动画。问题是,每次我更改基础几何体时,它似乎都会重新渲染自己,最终导致插件冻结

var lineString = ge.createLineString(''),
    placemark  = ge.createPlacemark(''),
    coords     = lineString.getCoordinates(),
    features   = ge.getFeatures();

placemark.setGeometry(lineString);
features.appendChild(placemark);

myPoints.forEach(function(point) {
  // google earth re-renders on every one of these calls
  coords.pushLatLngAlt(point.lat, point.lng, 0);
});

// I want something explicit, like this, instead
placemark.redraw();
它不是将所有更改应用于LineString坐标,然后对placemark调用重新渲染方法,而是每次都重新渲染

我的第一个想法是做一些双缓冲。但是我加载了很多点,而且我无法负担双倍的内存使用率

这方面有什么办法吗

编辑:

我尝试删除几何体,编辑它,然后再添加回来。地点标记刚刚闪过…:/

placemark.setGeometry(null);

myPoints.forEach(function(point) {
  coords.pushLatLngAlt(point.lat, point.lng, 0);
});

placemark.setGeometry(lineString);
编辑:

我确实设法通过使用

一些想法:

  • 通过使用
  • 用于修改几何图形时的时间。
    • 一种类似的技术更像是一种黑客,但在frameend不够时可能是一种替代方法
  • 如果要连接行字符串(或者可以预生成多个行字符串段),那么请尝试使用to而不是一次推一个来最小化javascript/插件互操作

我看到你编辑了你的问题,说你找到了executeBatch函数,这很有帮助。在每次迭代过程中,您必须推送很多点才能看到插件挂起。

您能否给出一个使用KMLCORDARRAY.push(KmlObjectBase coordOrList)的示例,因为在API AFAIK和KMLCORDARRAY中没有创建独立KMLCORDARRAY的方法。push(KMLCORDARRAY)仅在连接线字符串时才有用。如果有多个行字符串(或者可以预生成多个行字符串),则可以执行
lineString1.getCoordinates().push(lineString2.getCoordinates)
。不清楚这是否与原OP的问题有关。此后,我遇到了另一个类似于使用frameend的可能相关的黑客,我更新了上面的答案。
google.earth.executeBatch(ge, function() {
  myPoints.forEach(function(point) {
    coords.pushLatLngAlt(point.lat, point.lng, 0);
  });
});