2012-08-07 104 views
0

我試圖在有人點擊已通過KML加載的地標時添加網絡鏈接。我所做的是將事件處理程序附加到全球,並檢查用戶是否單擊了地標。將網絡鏈接添加到Google地球失敗

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

回答

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