Как отменить операцию перетаскивания маркера карты Google? - PullRequest
7 голосов
/ 27 февраля 2011

Как видно из следующего кода, маркеры можно перетаскивать. В некоторых случаях, если маркер опущен в неправильную область (полигон), я хотел бы отменить событие перетаскивания, и, следовательно, маркер автоматически вернется в исходное положение.

function placeMarker(latlng, color, isDraggable) {
    var marker = new GMarker(latlng, { icon: getIcon(color), draggable: true });
    map.addOverlay(marker);
    GEvent.addListener(marker, "dragend", function () {
        //redraw polygons again
    });
    GEvent.addListener(marker, "click", function () {
        var latlng = marker.getPoint();
        map.openInfoWindowHtml(marker.getPoint(), latlng.y + ", " + latlng.x);
    });
    return marker;
}

Вопрос в том, как отменить событие перетаскивания маркера, если он уже добавлен в событие dragend?

Ответы [ 2 ]

1 голос
/ 05 сентября 2017

По прошествии этих лет все еще не может найти никаких решений, и снова сталкиваюсь с этой проблемой.Хотелось бы, чтобы был event.cancelDrag() для вызова.

Все, что я могу придумать, это проверить, принадлежит ли маркер mypolygon, если нет, переместить его туда, где он был раньше:

  • Вкл. dragstart сохранить текущее местоположение как preLocation
  • вкл. dragend использовать containsLocation(e.latLng, mypolygon)
    • да => ничего не делать
    • нет: установить маркерместоположение по preLocation.

на карте Google содержится расположение

google map События

1 голос
/ 27 февраля 2011

Я не помню, чтобы Google Map API поддерживал его, но вы можете использовать эту функцию для себя, сохраняя перемещения маркеров в стеке и извлекая старую позицию, когда вам это нужно. Я знаю, что это не исчерпывающий ответ. Это просто общая идея. Но я надеюсь, что это поможет.

...