2011-02-08 70 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; 
     } 
    } 
    } 
}