拖动后的Google地图标记位置

时间:2011-12-25 23:29:19

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

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

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

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

我猜它可能是以下之一:

  1. 传递给元素的data的对象是重复的,不是通过引用传递的,因此是jQuery问题。
  2. Google地图不会自动更新其标记的latlng位置,存储在变量或data节点中,因此也会更新Google Maps问题。
  3. 我必须亲自点燃dragend事件以更新位置(听起来像一个奇怪的解决方案)。
  4. 我基本上是在查询这个问题,看看我是否需要将它作为一个问题记录在任何地方,或者我是否只是一个白痴。来自其他强化的Google Mappers的任何输入都会对我有所帮助。

    提前干杯。

1 个答案:

答案 0 :(得分:6)

我见过你已经解决了你的问题但是 也许这对其他人阅读这个问题很有帮助。

谷歌地图在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...
});