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