wms tutorial osm org lib example español javascript drag-and-drop openlayers

tutorial - ¿Cómo obtendría la selección de funciones de OpenLayers y JavaScript arrastrar y soltar trabajando juntos?



openlayers tutorial español (1)

Estoy escribiendo una aplicación que usa OpenLayers para permitir a los usuarios arrastrar y soltar archivos en un conjunto predefinido de características que se envían a un servidor con AJAX. Los archivos en sí son datos brutos de equipos geofísicos que el servidor representará como una capa ráster.

He arrastrado y soltado trabajando para el mapa:

var mapelem = $id("map"); mapelem.addEventListener("dragover", FileDragHover, false); mapelem.addEventListener("dragleave", FileDragHover, false); mapelem.addEventListener("drop", FileSelectHandler, false);

Y tengo que destacar sobre el vuelo estacionario con este código:

var sf = new OpenLayers.Control.SelectFeature(boxes, { hover: true, multiple: false, highlightOnly: true }); map.addControl(sf); sf.activate();

El resto del código es principalmente el Ejemplo de cajas - Vector .

El problema es que al arrastrar un archivo al lienzo del mapa, la selección del elemento emergente OpenLayers ya no funciona, y me gustaría recibir los comentarios que le da al usuario para asegurarse de que están soltando el archivo donde lo esperan.

Puedo obtener la posición del cursor en el lienzo:

map.events.register("mousemove", map, function(e) { lonlat = map.getLonLatFromPixel(e.xy); });

Así que puedo hacer una prueba de punto en función en esa función, pero sería bueno poder usar la funcionalidad existente.

¿Existe alguna forma de propagar el mensaje de arrastre a mi capa OpenLayers?


Desde la documentación de arrastrar y soltar de MDN [1]: «Tenga en cuenta que solo se disparan los eventos de arrastre; eventos de mouse como mousemove no se disparan durante una operación de arrastre. »

Por lo tanto, no podrá registrar su controlador de arrastre en el div del mapa. Tal vez podría intentar registrar un controlador de arrastre en cada característica. Aquí un código a prueba a medias (y solo con el renderizador SVG):

boxes.features.forEach(function(f){ elem = $(f.geometry.id); elem.addEventListener("dragover", FileDragHover, false); elem.addEventListener("dragleave", FileDragHover, false); elem.addEventListener("drop", FileSelectHandler, false); })

Espero que pueda puede ayudar.

1 - https://developer.mozilla.org/En/DragDrop/Drag_and_Drop