拖动后的Google地图标记位置

des*_*key 2 javascript google-maps pass-by-reference google-maps-api-3

我可能在这里遗漏了JavaScript中的一些基本规律,很可能,但我对拖动谷歌地图标记后的latlng位置有疑问.

我成功地将标记添加到地图中,并将这些添加的标记分配给变量,或者更准确地说,我使用jQuery将这些标记添加到data地图的div元素中,使用jQuery.data().

现在,当我在地图上拖动这些标记时,我出现了问题.我了解dragend事件,以及如何触发/捕获它及其数据,包括拖动后的新latlng位置.话虽如此,我理解JavaScript中的对象是通过引用传递的,所以我无法理解为什么存储在元素中的标记引用的位置不会自动更新以反映新位置?

我想它可能是以下之一:

  1. 传递给data元素的对象是重复的,不是通过引用传递的,因此是jQuery问题.
  2. Google地图不会自动更新存储在变量或data节点中的标记的latlng位置,因此也会更新Google Maps问题.
  3. 我必须亲自点燃dragend事件以更新位置(听起来像一个奇怪的解决方案).

我基本上是在询问这个问题,看看我是否需要将它作为一个问题记录在任何地方,或者我是否只是一个白痴.其他强化的Google Mappers的任何输入都会对我有所帮助.

提前干杯.

小智 7

我已经看到你已经解决了你的问题,但也许这对其他人阅读这个问题很有帮助.

谷歌地图在dragend之后用新的LatLng-Object覆盖Marker的位置.如果将标记的位置(LatLng-Object)存储在变量中,则该变量将保存对先前定义的LatLng-Object的引用.在dragend之后,标记的位置被更新但不是LatLng-Object本身.

我们来看看下面的代码:

var ll  = new google.maps.LatLng(52, 0.054);
var m   = new google.maps.Marker({
    position: ll,
    draggable: true,
    title: 'hello world'    
});

google.maps.event.addListener(m, 'dragend', function(ev){
    alert(ll.lat() + ' ' + ll.lng()); // always the same LatLng-Object...
    alert(m.getPosition()); // new LatLng-Object after dragend-event...
});
Run Code Online (Sandbox Code Playgroud)