2011-04-16 189 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