Как получить положение маркера перед перетаскиванием?

В Google Maps API v2 я хочу сохранить предыдущее местоположение перед перетаскиванием маркера, однако, когда я начинаю перетаскивать маркер, он всегда будет переходить в какое-то более высокое местоположение, поэтому в обратном вызове onMarkerDragStart я не могу получить последнюю позицию.

Это баг или можно решить проблему?


person Flybywind    schedule 17.02.2013    source источник


Ответы (2)


то что маркер "прыгает" так это потому что иначе маркер не было бы видно из-за проведенного над ним пальцем. Чтобы получить положение маркера, вы должны сохранить его до начала перетаскивания. Документация довольно ясна:

Вызывается, когда маркер начинает перетаскиваться. Доступ к местоположению маркера можно получить с помощью getPosition(); это положение может отличаться от положения до начала перетаскивания, потому что маркер всплывает над точкой касания.

Таким образом, идея состоит в том, чтобы сохранить позицию «кэшированной» и получить их из этой кэшированной переменной, когда начинается перетаскивание.

person N Dorigatti    schedule 05.06.2017
comment
Проблема в том, что у меня есть сотни маркеров, размещенных на карте. В идеале я не хочу кэшировать его. - person rafa; 13.06.2017
comment
Я вижу, к сожалению, нет никакого метода, но все равно, вы кешируете только позицию, а не весь маркер... извините, но для этого нет доступного API, к сожалению... - person N Dorigatti; 13.06.2017

Пример, который может решить ваш вопрос

function makeMarker(iPos) {
    var marker = new google.maps.Marker({
        position: iPos,
        draggable: true,
        map: map,
        zIndex: 1001 
    });
    google.maps.event.addListener(marker, 'dragstart', function() {
        iPos = marker.getPosition();
    });         
    google.maps.event.addListener(marker, 'dragend', function(event) {    
        console.log("Position after dragging: ", event.latLng.toUrlValue(6));
        console.log("Position before dragging: ", iPos.toUrlValue(6));
    });     
}
person Gevorgyan    schedule 19.09.2018