【问题标题】:Google Maps marker position after dragged拖动后的谷歌地图标记位置
【发布时间】:2012-01-27 18:18:52
【问题描述】:

我很可能在这里遗漏了 JavaScript 中的一些基本法则,但我有一个关于 Google 地图标记在拖动后的纬度位置的问题。

我成功地将标记添加到地图,并将这些添加的标记分配给变量,或者更准确地说,我正在使用 jQuery 将这些标记添加到地图 div 元素的 data,使用 @987654322 @。

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

我猜它可能是以下之一:

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

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

提前干杯。

【问题讨论】:

  • 如果我可以在不看起来像白痴的情况下撤回问题,我会的。它确实更新了位置,我只是忘了重新输出到我的 JS 控制台。呵呵。
  • 我相信你可以删除问题!
  • 现在太晚了,我的白痴将永远存在。
  • :-)) 不,你可以标记它并要求管理员删除它:-)

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


【解决方案1】:

我看到你已经解决了你的问题,但是 也许它对其他阅读此问题的人有所帮助。

Google 地图在 dragend 之后用新的 LatLng-Object 覆盖标记的位置。如果将标记的位置 (LatLng-Object) 存储在变量中,则该变量包含对先前定义的 LatLng-Object 的引用。在拖动后,标记的位置会更新,但 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...
});

【讨论】:

  • 应该知道你会回复 Adrian ;o)
猜你喜欢
  • 1970-01-01
  • 2012-05-30
  • 2016-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 2011-08-07
  • 2016-08-30
相关资源
最近更新 更多