javascript - 访问和更改加载的 KML 文件中的对象(谷歌地球插件)

标签 javascript iteration kml google-earth-plugin

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

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

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

我正在成功加载该对象,但是一旦它被加载,我希望能够即时更改一些参数。我还希望能够通过其中的点来解析并做一些额外的事情。我查看了文档和代码示例,但似乎找不到执行此操作的方法。

有什么想法吗?

最佳答案

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; 
      } 
    } 
  } 
} 

关于javascript - 访问和更改加载的 KML 文件中的对象(谷歌地球插件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4937739/

相关文章:

oracle - 没有映射的Doctrine 2.0 native 查询

python - 列操作 R

javascript - 在 Google map v3 中切换 KML 层

javascript - getInfoByClass 的简单错误?

javascript - 正确转换 float ?

javascript - chrome contextMenu - 获取选项卡中的窗口对象

java - 为什么输入是 Strings 然后使用 parseInt?

javascript - 从 ArcGIS Online 中的 KML 图层获取范围

ruby - 解析巨大的(~100mb)kml(xml)文件需要*小时*而没有任何实际解析的迹象

javascript - 在 ReactJS 中使用反向数据流进行子级与父级通信的好方法是什么?