2

我正在使用谷歌地球浏览器插件和 API 创建一个示例。我正在尝试使用 fetchKml 方法加载一个 kml 文件

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

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

我已成功加载对象,但一旦加载,我希望能够即时更改一些参数。我还希望能够解析其中的要点并做一些额外的事情。我查看了文档和代码示例,但我似乎找不到这样做的方法。

有任何想法吗?

4

1 回答 1

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; 
      } 
    } 
  } 
} 
于 2011-02-24T18:12:14.403 回答