【问题标题】:Accessing and altering objects in a loaded KML file (google earth plugin)访问和更改加载的 KML 文件中的对象(谷歌地球插件)
【发布时间】:2011-02-08 20:01:20
【问题描述】:

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

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

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

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

有什么想法吗?

【问题讨论】:

    标签: javascript iteration kml google-earth-plugin


    【解决方案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; 
          } 
        } 
      } 
    } 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 2011-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多