2010-02-26 63 views
0

我有以下代碼,它可以讓用戶在Google地圖上繪製兩個點。然後,我希望能夠抓住每個點(標記)被拖動到新位置的事件。我在JavaScript很糟糕,花了幾個小時試圖做到這一點,所以我認爲是時候我得到一些幫助..Google地圖添加2個GEvent偵聽器。 1爲每個標記

我想要做的是讓用戶在地圖上拖動兩個點(標記)。然後,我希望能夠讓我的腳本將位置(lat,long)寫入文檔。然後我將計算這些距離作爲我正在製作的航運應用程序的一部分。

我想將標記(點)拖到新位置時更新文檔內容(lat,long)。

另外,我修正了一個小學生的錯誤,其中的點變數在switch語句中被剝離。我的問題是通過在switch語句中移動Add事件偵聽器語句來解決的。由於炮擊:)

接下來的事情,現在是嘗試並計算出兩點

之間的距離(直線距離)再次感謝您的幫助..感謝一如既往!

的作品更新的代碼:

 var map = null; 
    var geocoder = null; 
    var zoom = 15; 
    var first_point = false; 
    var boundary = new Array(); 
    var cCount = 0; 


    var point1; 
    var point2; 

    function initialize() { 
     if (GBrowserIsCompatible()) { 
      first_point = false; 
      map = new GMap2(document.getElementById("map_canvas")); 
      var center = new GLatLng(37.4419, -122.1419); 
      map.setCenter(center, zoom); 

      GEvent.addListener(map, "click", function(overlay,point) 
      { 
       if (overlay != null) 
       {} 
       else 
       { 
        var n = boundary.length; 

        switch (cCount) 
        { 
         case 0: 
          point1 = new GMarker(point,{draggable: true}); 
          map.addOverlay(point1); 
          cCount++; 
          GEvent.addListener(point1, "dragend", function() 
           { 
            alert('P1 Dragged'); 
           }); 
          break; 
         case 1: 
          point2 = new GMarker(point,{draggable: true}); 
          map.addOverlay(point2); 
          cCount++; 
          GEvent.addListener(point2, "dragend", function() 
           { 
            alert('P2 Dragged'); 
           }); 
          break; 
         case 2: 
          map.clearOverlays(); 
          cCount=0; 
          break; 
        } 
       } 
      }); 
      map.addControl(new GSmallMapControl()); 
      geocoder = new GClientGeocoder(); 
     } 
    } 
+0

cCount在哪裏定義? if語句在開始時關閉了addListener,所以剩下的代碼就掛起了。你能澄清你想要做什麼嗎? – RedBlueThing 2010-02-26 01:07:59

+0

所以,我已經更新了這篇文章,使其更有意義。第一次運行抱歉,我有點壓力。 – conor 2010-02-26 01:39:53

回答

0

我採取了你的代碼,並提出以下修正:

  • 修正不平衡括號我在註釋中。
  • 將兩個addListener調用移入switch語句,以便在附加事件時,point1和point2變量仍處於範圍內。

您可以check out the example heresource)。

編輯:

下面是一些JavaScript代碼來獲取(米)的兩點之間的直線距離:

/* Convert degress to radians */ 
function deg2rad(deg) { 
    return deg/(180/Math.PI); 
} 

/* Calculate distance between two points */ 
function point_distance(a, b) { 
    var r = 6378700; 
    var lat1 = a.y; 
    var lat2 = b.y; 
    var lon1 = a.x; 
    var lon2 = b.x; 
    var dist = r * Math.acos(Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2)) + 
       Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2)) * 
       Math.cos(deg2rad(lon1 - lon2))); 
    return dist; 
} 

這是基於地球是6378700米的大致半徑。

相關問題