我很可能在这里遗漏了 JavaScript 中的一些基本法则,但我对拖动 Google map 标记后的经纬度位置有疑问。
我成功地向 map 添加了标记,并将这些添加的标记分配给了一个变量,或者更准确地说,我正在使用 jQuery 将这些标记添加到 map 的 div 的 data
元素,使用 jQuery.data()
。
现在,当我在 map 上拖动这些标记时出现了问题。我了解 dragend
事件,以及如何触发/捕获它及其数据,包括拖动后的新 latlng 位置。话虽如此,我的理解是 JavaScript 中的对象是通过引用传递的,所以我不明白的是为什么存储在元素中的标记引用的位置没有更新以自动反射(reflect)新位置?
我猜它可能是以下之一:
- 传递到元素的
data
中的对象是重复的,不是通过引用传递的,因此是一个 jQuery 问题。 - Google map 不会自动更新其标记的经纬度位置,这些标记存储在变量或
data
节点中,因此是 Google map 的问题。 - 我必须亲自触发
dragend
事件来更新位置(听起来是个奇怪的解决方案)。
我基本上是在查询这个,看看我是否需要在任何地方将它记录为一个问题,或者我是否只是一个白痴。来自其他经过强化的 Google Mappers 的任何输入都对我很有帮助。
提前干杯。
请您参考如下方法:
我看到你已经解决了你的问题,但是 也许对其他人阅读这个问题有帮助。
Google map 在拖动后用新的 LatLng 对象覆盖标记的位置。如果您将标记的位置 (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...
});