2011-04-16 241 views
48

我是新的谷歌地圖,我正在努力學習它。谷歌地圖v3可拖動標記

marker = new google.maps.Marker(
{ 
    map:map, 
    draggable:true, 
    animation: google.maps.Animation.DROP, 
    position: results[0].geometry.location 
}); 

這是我標記的位置,當我初始化標記位置比我知道的地名(例如:XY街道,紐約),但由於可拖動選項它正在發生變化,我的問題是如何獲得新的地名,我需要什麼事件處理程序。

回答

102

我終於找到了答案:

marker = new google.maps.Marker(
{ 
    map:map, 
    draggable:true, 
    animation: google.maps.Animation.DROP, 
    position: results[0].geometry.location 
}); 
google.maps.event.addListener(marker, 'dragend', function() 
{ 
    geocodePosition(marker.getPosition()); 
}); 

function geocodePosition(pos) 
{ 
    geocoder = new google.maps.Geocoder(); 
    geocoder.geocode 
    ({ 
     latLng: pos 
    }, 
     function(results, status) 
     { 
      if (status == google.maps.GeocoderStatus.OK) 
      { 
       $("#mapSearchInput").val(results[0].formatted_address); 
       $("#mapErrorMsg").hide(100); 
      } 
      else 
      { 
       $("#mapErrorMsg").html('Cannot determine address at this location.'+status).show(100); 
      } 
     } 
    ); 
} 
+0

什麼是「dragend變化「和它使用的地方?我複製你的代碼並運行,但是我不能在狀態或結果的內部打印 – IshaS 2015-08-19 09:40:32

+1

dragend是一個由google maps API觸發的事件,它監聽標記被放回地圖 – toobulkeh 2015-09-23 18:00:18

+1

@ohlala你的代碼對我來說工作得很好,但是'#mapSearchInput'中的地址不是根據我的要求,例如,如果我將商標放在不顯示商店名稱的商店上,但顯示沒有商店名稱的街道地址。 Plz幫助 – Sandeep 2016-02-09 06:42:41

12

設置使用LAT /郎在地圖上的位置,並且使標記拖動

  • 使用LAT /郎最初在設置標記在地圖上的給定點

  • 地址變量用於標題目的。它可以被忽略。

  • draggable:true使標記可拖動。

  • 使用事件偵聽器google.maps.event.addListener(標記, 'dragend',函數(標記)要監聽的標記位置

    function showMap(lat,lang,address) { 
    var myLatLng = {lat: lat, lng: lang}; 
    
        var map = new google.maps.Map(document.getElementById('map_canvas'), { 
         zoom: 17, 
         center: myLatLng 
        }); 
    
        var marker = new google.maps.Marker({ 
         position: myLatLng, 
         map: map, 
         title: address, 
         draggable:true, 
        }); 
    
        google.maps.event.addListener(marker, 'dragend', function(marker){ 
         var latLng = marker.latLng; 
         currentLatitude = latLng.lat(); 
         currentLongitude = latLng.lng(); 
         jQ("#latitude").val(currentLatitude); 
         jQ("#longitude").val(currentLongitude); 
        }); 
    } 
    
+0

這是偉大的 - 完美的工作 – deebs 2016-09-12 20:33:16

+1

^^請注意代碼區域外的雜散花括號。我試圖改變它,但無論我嘗試了什麼,我都無法讓代碼標記在此答案上正確工作。有人知道爲什麼其他人可以修復它嗎? – freeworlder 2017-02-07 23:10:09