2011-02-26 22 views
7

Como puede ver en el siguiente código, los marcadores se pueden arrastrar. En algunos casos, si se deja caer un marcador en un área incorrecta (polígono), me gustaría cancelar el evento de caída y, en consecuencia, el marcador vuelve automáticamente a su ubicación original.Cómo cancelar una operación de arrastrar marcador de Google Map?

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

La pregunta es ¿cómo puedo cancelar el evento de arrastre del marcador cuando ya está cayó en dragend evento?

+1

Por qué no utilizar una ventana de información para mostrar el marcador de lat/lng, y no cometer el marcador se puede arrastrar a todos? –

+0

Simplemente declare su propiedad arrastrable como falsa y su propiedad clicable como verdadera. Seguirán escuchando los clics y los eventos de mouseover. – amenadiel

+0

@MattBall Necesito ser arrastrable. –

Respuesta

1

Todavía no hemos podido encontrar ninguna solución después de estos años y una vez más nos encontramos con este problema. Ojalá hubiera event.cancelDrag() para llamar.

Todo lo que puedo pensar es para comprobar si el marcador pertenece a mypolygon si no moverlo de nuevo a donde estaba antes:

  • En dragstart guardar la ubicación actual como preLocation
  • en dragend uso containsLocation(e.latLng, mypolygon)
    • sí => hacer nada
    • no: establecer la ubicación del marcador a preLocation.

google map containsLocation

google map Events

1

No recuerdo que Google Map API lo admita, pero usted puede cumplir esta función guardando los movimientos de los marcadores en una pila y extrayendo la posición anterior cuando la necesite. Sé que no es una respuesta irrefutable. Es solo una idea general. Pero espero que sea útil.

+0

Realmente, ¿por qué no quieres hacer que el marcador sea indivisible? –

+0

Ese es el método que se implementa aquí: [El blog de Duncan - API de Google Maps - marcadores bloqueables bloqueables] (https://duncan99.wordpress.com/2015/03/21/google-maps-api-locked-draggable-markers /) – ChrisW

Cuestiones relacionadas