当有人点击通过KML加载的地标时,我正在尝试添加网络链接。我所做的是将一个事件处理程序附加到地球,并检查用户是否点击了地标。
在html上,有一个按钮,单击该按钮,在单击时从谷歌地球中删除网络链接(请参阅trackRemoval)。第一次点击地标时,一切似乎都有效。
问题是当第二次点击地标时(删除网络链接后),对createNetworkLink的调用失败。附件是相关的代码片段。
有人能看出我做错了吗?
var ge = new Array(2);
function clickHandler(event) {
if (event.getTarget().getType() == 'KmlPlacemark') {
event.preventDefault();
var placemark = event.getTarget();
var device = placemark.getName();
var networkLink = ge[0].createNetworkLink(device + "link");
var link = ge[0].createLink("");
networkLink.setDescription("Vechicle view for" + device);
networkLink.setName("Track for " + device);
networkLink.setFlyToView(true);
link.setHref("http://x.x.x.x/blah/blah.kml");
link.setRefreshMode(ge[0].REFRESH_ON_INTERVAL);
link.setRefreshInterval(60);
networkLink.setLink(link);
ge[0].getGlobe().getFeatures().appendChild(networkLink);
}
}
function initgeaor(instance) {
google.earth.addEventListener(instance.getGlobe(), 'click', clickHandler);
}
function trackRemoval() {
var device = this.name;
var networklink = ge[0].getElementById(device + "link");
ge[0].getGlobe().getFeatures().removeChild(networklink);
}
答案 0 :(得分:1)
请参阅https://developers.google.com/earth/documentation/reference/interface_kml_object
请参阅方法release()
的说明。根据我的经验,这种“不确定的时间”很难衡量。因此,如果从GE中删除对象,然后尝试添加具有相同ID的另一个对象,GE会抱怨并且不会创建该对象 - 除非“不确定的时间量”已经过去。
您可以在removeChild()
和release()
网络链接后使用计时器。
每次创建时,您也可以为新的KmlNetworkLink提供不同的ID,这样就不会发生冲突。我不确定这是否适合您。 var networkLink = ge[0].createNetworkLink(device + "link" + idNumber);