通过基于区域的网络访问谷歌地球api的地标链接的kml文件

问题描述:

我有一大堆使用区域化kml文件加载的地标。 (生成大约1000公里的文件)。 例如,我有一个按钮,当点击相机飞到我想访问的地标的位置。所以我认为包含这个地标的kml文件在这个过程之后被加载。假设这是5.kml,我尝试使用getElementByUrl方法获取地标对象。但是这不起作用。我也可以使用ge.getElementsByType(“KmlPlacemark”)方法,但我需要一个循环来获取我需要的地标对象。这工作,但我找不到一种方法,使其工作速度快。下面是我的代码通过基于区域的网络访问谷歌地球api的地标链接的kml文件

google.earth.addEventListener(ge.getView(), 'viewchangeend', function() {     
     // after button click and camera centered on the placemark with id 1767 
     var p = ge.getElementByUrl('http://localhost/Test/5.kml#1767'); 
     alert(p.getId()); // this does not work because p is null 
     var placemarks = ge.getElementsByType('KmlPlacemark'); 
     for (var i = 0; i < placemarks.getLength(); ++i) { 
     var placemark = placemarks.item(i); 
     if(placemark.getId() == 1767) 
     {    
      alert(placemark.getId()); // this works  
      return; 
     } 
    }  
}); 

function button_click() 
{ 
    var camera = ge.getView().copyAsCamera(ge.ALTITUDE_RELATIVE_TO_GROUND); 
    camera.setLatitude(30); 
    camera.setLongitude(50); 
    camera.setAltitude(2000); 
    ge.getView().setAbstractView(camera); 
    } 

我想我找到了一种方法来访问这是从KML导入的对象(时区beomes有效)。等待你的答案。谢谢。

NetworkLink不会将文件加载到DOM中,这就是为什么getElementByUrl找不到您要查找的地标。您需要获取KML。 This article应该有助于解释在Google地球API中加载KML的不同方式。

+0

我的问题是通过IIS的文件访问问题,我猜。我修复了它,并且我的代码正常工作。相机将缩放到地标,以便检索包含该地标的kml文件,然后我可以修改我的地标的样式。在文章中,它说你不能在**显示之前修改加载的KML文件**,但目前看来,我可以在加载KML并显示地标后更改样式。顺便说一句好的文章。 – 2012-01-10 21:27:51