javascript - 拖动后的谷歌地图标记位置

标签 javascript google-maps google-maps-api-3 pass-by-reference

我很可能在这里遗漏了 JavaScript 中的一些基本法则,但我对拖动 Google map 标记后的经纬度位置有疑问。

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

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

我猜它可能是以下之一:

  1. 传递到元素的 data 中的对象是重复的,不是通过引用传递的,因此是一个 jQuery 问题。
  2. Google map 不会自动更新其标记的经纬度位置,这些标记存储在变量或 data 节点中,因此是 Google map 的问题。
  3. 我必须亲自触发 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...
});

关于javascript - 拖动后的谷歌地图标记位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8632142/

相关文章:

javascript - 条形图上的 Chartjs 数字在悬停时闪烁

google-maps - 将Google Maps MarkerClusterer与infowindow集成

Javascript 坚持认为它没有定义,但它完全是

java - debug.keystore 不存在

javascript - 谷歌地图添加新标记并弹出标题

javascript - 我需要获取有关动态 Google map 的数据并使用 API V3 从中创建静态 Google map

javascript - 如何使用 useContext 更改 Context 的值?

javascript - AEM 6.1 复选框启用/禁用标签属性

javascript - 不要在缩放时触发自定义图 block 叠加

javascript - 简单的 jquery 第二个计数器