2013-06-04 81 views
1

我使用谷歌地球插件api來創建和顯示用戶的地標。創建和顯示標的如何獲取地標上點擊點的經度,緯度和高度?

Exampale代碼:

function createPlacemark(){ 
    var polygonPlacemark = ge.createPlacemark('Polygon'); 
    var polygon = ge.createPolygon(''); 
    polygon.setAltitudeMode(ge.ALTITUDE_ABSOLUTE); 
    polygonPlacemark.setGeometry(polygon); 
    var outer = ge.createLinearRing(''); 
    polygon.setOuterBoundary(outer); 

    var coords = outer.getCoordinates(); 
    coords.pushLatLngAlt(35.3,33.3544921875,1200); 
    coords.pushLatLngAlt(35.3,33.3544921875,1200); 
    coords.pushLatLngAlt(35.3,33.3544921875,1000); 
    coords.pushLatLngAlt(35.3,33.3544921875,1000); 
    ge.getFeatures().appendChild(polygonPlacemark); 
    } 

現在我需要知道用戶是否點擊了標(我用事件偵聽器做)什麼在點的經度,緯度和海拔高度他點擊的地標。

的問題是,谷歌地球返回地球表面上而不是在點擊標的「click」事件的值。在某些情況下,多邊形不會放置在地球上(如在試驗代碼中),並且這些值不合適。

我試圖找到一種方式來獲得點擊標時打開氣囊的位置,但沒有成功。

是否有一種方式來獲得,價值觀?

編輯:
我使用類似於下面的代碼簡化財產以後:

<html> 
    <head> 
     <script type="text/javascript" src="https://www.google.com/jsapi"></script> 
     <script type="text/javascript"> 
      var ge; 
      google.load("earth", "1"); 

      function init() { 
      google.earth.createInstance('map3d', initCB, failureCB); 
      } 

      function initCB(instance) { 
      ge = instance; 
      ge.getWindow().setVisibility(true); 
      } 

      function failureCB(errorCode) { 
      } 


      google.setOnLoadCallback(init); 

      function createPlacemark(){ 
       var polygonPlacemark = ge.createPlacemark('Polygon'); 
       var polygon = ge.createPolygon(''); 
       polygon.setAltitudeMode(ge.ALTITUDE_ABSOLUTE); 
       polygonPlacemark.setGeometry(polygon); 
       var outer = ge.createLinearRing(''); 
       polygon.setOuterBoundary(outer); 
       polygonPlacemark.setDescription('test'); 
       var coords = outer.getCoordinates(); 
         coords.pushLatLngAlt(35.3,33.3544921875,1200); 
       coords.pushLatLngAlt(35.35,33.3544921875,1200); 
       coords.pushLatLngAlt(35.35,33.3544921875,1000); 
       coords.pushLatLngAlt(35.3,33.3544921875,1000); 
       ge.getFeatures().appendChild(polygonPlacemark); 

        lookAt = ge.getView().copyAsLookAt(ge.ALTITUDE_RELATIVE_TO_GROUND); 
       lookAt.setLatitude(35.33); 
       lookAt.setLongitude(33.3544921875); 
       lookAt.setRange(4500); 
       lookAt.setTilt(45); 
       lookAt.setHeading(90); 

        // Update the view in Google Earth 
       ge.getView().setAbstractView(lookAt); 
       google.earth.addEventListener(polygonPlacemark , 'click', doEvent); 
    } 

      function doEvent(event) { 
      document.getElementById("alt").value=event.getAltitude(); 
      document.getElementById("lon").value=event.getLongitude(); 
      document.getElementById("lat").value=event.getLatitude();  
     } 

     </script> 
    </head> 
    <body> 
      <div id="map3d" style="height: 820px; width: 1680px;"></div> 
      <button id="bCreatePlacemark" type="button" onclick="createPlacemark()">Create Placemark</button><br> 
      <input id="lon" /><br> 
      <input id="lat" /><br> 
      <input id="alt" /> 


    </body> 
    </html> 

回答

0

你不告訴你如何連接你的事件處理程序,但它聽起來像你附加它到GEGlobe或GEWindow對象而不是KmlPlacemarks。

事件監聽連接到特定的地標,你會做一些像這樣。

google.earth.addEventListener(polygonPlacemark , 'click', doSomething); 
function doSomething(event) { 
    var lat = event.getTarget().getGeometry().getLatitude(); 
    var lng = event.getTarget().getGeometry().getLongitude(); 
    // do something with lat, lng 
} 

如果你想創建一個「所有」事件處理程序,處理上,你可以使用GEGlobe對象,然後使用條件邏輯來篩選標的物做這一切的地標click事件。

google.earth.addEventListener(ge.getGlobe(), 'click', doSomething); 
function doSomething(event) { 
    if (event.getTarget().getType() == 'KmlPlacemark') { //check the event target 
    var lat = event.getTarget().getGeometry().getLatitude(); 
    var lng = event.getTarget().getGeometry().getLongitude(); 
    // do something with lat, lng 
    } 
} 

編輯:

基於您的評論,它像要附加click事件到polygon本身的聲音,然後解壓縮事件發生的位置。如果是的話,這應該工作。

google.earth.addEventListener(polygon , 'click', doSomething); 
function doSomething(event) { 
    var lat = event.getLatitude(); 
    var lng = event.getLongitude(); 
    var alt = event.getaltitude(); 
    // do something with lat, lng, alt 
} 
+0

感謝。不幸的是,這不適合我。 'event.getTarget()。getGeometry()。get ...();'不返回值(我已經嘗試了你的兩個建議)。當我用'event.getLongitude()替換它時,'它返回值,但是,當然,這不是我要搜索的。 – Maz

+0

請注意,我需要在地標的地點,而不是地標本身的座標。換句話說,我需要氣球出現的點。 – Maz

+0

然後,只需使用條件邏輯地標的,但後來使用event.getLongitude()和getLatitude()來獲取點擊的位置。這樣,點擊事件只會在地標上觸發,但您將獲得實際點擊的座標,而不是地標的座標。 – Fraser

相關問題