2011-02-08 40 views
2

我创建使用谷歌地球浏览器插件和API的示例。我试图加载使用fetchKml方法访问和改变在加载KML文件(谷歌地球插件)对象

function addKmlFromUrl(kmlUrl) { 
    google.earth.fetchKml(ge, kmlUrl, kmlFinishedLoading); 
} 

function kmlFinishedLoading(kmlObject) 
{ 
    if (kmlObject) { 
    ge.getFeatures().appendChild(kmlObject); 
    } 
} 

我成功地加载对象KML文件,但一旦它被加载,我希望能够改变一些对飞行参数。我也希望能够解析通过它的点,并做一些额外的事情。我查看了文档和代码示例,但我似乎无法找到一种方法来执行此操作。

任何想法?

回答

1

的kmlObject有DOM就像XML(或任何SGML语言),你将需要递归遍历DOM中的元素,然后改变它适用于你的人。不幸的是,在这个API中没有直接的方法,所以你可能需要自己做饭或者使用一个有你所需功能的库。

类似以下内容可能为你工作。

function addKmlFromUrl(kmlUrl) { 
    google.earth.fetchKml(ge, kmlUrl, kmlFinishedLoading); 
} 

function kmlFinishedLoading(kmlObject) 
{ 
    if (kmlObject) { 
    ge.getFeatures().appendChild(kmlObject); 
    traverseKml(kmlObject); 
    } 
} 

function traverseKml(node) { 
    if(node.getFeatures().hasChildNodes()) { 

    var subNodes = node.getFeatures().getChildNodes(); 
    var length = subNodes.getLength(); 

    for(var i = 0; i < length; i++) { 

     var eachSubNode = subNodes.item(i); 
     var nodeType = eachSubNode.getType(); 

     switch(nodeType) { 
     // kml containers 
     case 'KmlFolder' : 
     case 'KmlDocument' : 
      traverseKml(eachSubNode); 
     break; 
     // do something with all placemarks... 
     case 'KmlPlacemark' : 
      alert(eachSubNode.getName()); 
     break; 
     } 
    } 
    } 
}