2014-07-02 39 views
0

我正在Google Earth Api上创建3D形状。我想让它们移动并旋转,所以我写了一个脚本来创建多边形,然后更新它们的坐标。结果并不是很好,因为我的3D多边形的所有面都依次缓慢更新。你可以看到它在这里的行动(你必须等待更新5秒):Javascript谷歌地球Api - 立即更新所有多边形坐标(多几何?)

http://jsfiddle.net/pmrotule/64y5Q/

function createPolygon(id, lati, longi, alti){ 

if(!gePoly[id]['placemarks'][polyCount]){ 
var newPoly = true; 
gePoly[id]['placemarks'][polyCount] = ge.createPlacemark(''); 
gePoly[id]['polygons'][polyCount] = ge.createPolygon(''); 
gePoly[id]['polygons'][polyCount].setAltitudeMode(ge.ALTITUDE_ABSOLUTE); 
gePoly[id]['placemarks'][polyCount].setGeometry(gePoly[id]['polygons'][polyCount]); 
var outer = ge.createLinearRing(''); 
} 
    for(i = 0; i < lati.length; i++){ 
     if(newPoly) 
     outer.getCoordinates().pushLatLngAlt(lati[i], longi[i], alti[i]); 
     else{ 
     var gOuter = gePoly[id]['placemarks'][polyCount].getGeometry().getOuterBoundary(); 
     gOuter.getCoordinates().setLatLngAlt(i, lati[i], longi[i], alti[i]); 
     } 
    } 
    if(newPoly) gePoly[id]['polygons'][polyCount].setOuterBoundary(outer); 

ge.getFeatures().appendChild(gePoly[id]['placemarks'][polyCount]); 
polyCount++; 
} 

所以,我正在寻找一种方式来更新所有多边形坐标瞬间。我做了一个奇怪的观察:如果在更新加载期间缩放或平移地图,它会立即执行......它证明有一个解决方案,对吧?

我发现有关几何体集合的多几何体的信息: https://developers.google.com/earth/documentation/geometries#multigeometry

此集合同时加载所有几何(正是我想要的),但它似乎只适用于线而不适用于多边形。如果有人知道如何使它适用于多边形,那么从您那里听到它将非常感激!

回答

0

天啊!我终于找到了解决方案!对于Multigeometry而言,对于多边形来说很容易:它基本上与线条完全相同(我可能在第一次的某个地方犯了错误)。顺便说一下,这不是解决方案。要走的路是使用executeBatch()函数,它将一举完成:

google.earth.executeBatch(ge, function(){ 
    for(i = 0; i < lati.length; i++){ 
    outer.getCoordinates().pushLatLngAlt(lati[i], longi[i], alti[i]); 
    } 
});