通过基于区域的网络链接的kml文件访问带有Google Earth api的地标

时间:2012-01-06 16:44:39

标签: google-maps google-maps-api-3 google-earth google-earth-plugin

我使用区域化的kml文件加载了大量的地标。 (生成大约1000 kml文件)。 例如,我有一个按钮,当点击相机飞到我想要访问的地标的位置时。所以我认为在此过程之后会加载包含此地标的kml文件。让我们说这是5.kml,我试图使用getElementByUrl方法获取地标对象。但这并没有奏效。我也可以使用ge.getElementsByType(" KmlPlacemark")方法,但我需要一个循环来获取我需要的地标对象。这有效,但我找不到让它快速工作的方法。以下是我的代码

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处于活动状态时)。等待你的答案。感谢。

1 个答案:

答案 0 :(得分:1)

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