0

当有人单击已通过 KML 加载的地标时,我正在尝试添加网络链接。我所做的是将事件处理程序附加到地球并检查用户是否单击了地标。

在 html 上,有一个按钮,点击后会从 google earth 中删除网络链接(请参阅 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);
}        
4

1 回答 1

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);

于 2013-06-19T16:56:36.320 回答