Положение маркера Google Maps после перетаскивания - PullRequest
2 голосов
/ 26 декабря 2011

Возможно, здесь отсутствует какой-то фундаментальный закон в JavaScript, вполне возможно, но у меня есть вопрос, касающийся положения маркера Google Maps после его перетаскивания.

Я успешно добавляю маркеры на карту и назначаю эти добавленные маркеры переменной, или, если быть более точным, я использую jQuery для добавления этих маркеров в data элемента div карты, используя jQuery.data().

Теперь у меня возникает проблема, когда я перетаскиваю эти маркеры по карте. Я понимаю событие dragend и то, как его запустить / перехватить, и его данные, включая новую последнюю позицию после перетаскивания. При этом у меня было понимание, что объекты в JavaScript передаются по ссылке, поэтому я не могу понять, почему позиция ссылки на маркер, сохраненная в элементе, не обновляется для автоматического отражения новой позиции?

Полагаю, это может быть одно из следующих:

  1. Объекты, переданные в data элемента, дублируются, не передаются по ссылке, и, следовательно, проблема jQuery.
  2. Карты Google не обновляют автоматически последние позиции своих маркеров, хранящихся в переменных или data узлах, и, следовательно, проблема с Google Картами.
  3. Я должен сам запустить событие dragend, чтобы обновить позицию (звучит как странное решение).

Я в основном запрашиваю это, чтобы узнать, нужно ли мне регистрировать это как проблему где-либо, или я просто идиот. Любой вклад от других закоренелых Google Mappers действительно помог бы мне здесь.

Приветствия заранее.

1 Ответ

6 голосов
/ 03 января 2012

Я видел, что вы решили свою проблему, но, возможно, это будет полезно для других, читающих этот вопрос.

Карты Google перезаписывают положение маркера новым объектом LatLng после драже.Если вы сохраняете положение (LatLng-Object) маркера в переменной, переменная содержит ссылку на ранее определенный LatLng-Object.После драже обновляется позиция маркера, но не самого объекта LatLng.

Давайте посмотрим на следующий код:

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...
});
...