2011-02-23 23 views
5

Ok Soy un novato en OpenLayers. El problema que tengo es esto ...OpenLayers event.register no registrando

En mi javascript, después de inicializar el mapa, agregar la capa OSM base y centrar, mi código realiza una búsqueda ajax de puntos para que los marcadores se agreguen al mapa, todos los marcadores están en grupos, por lo que crea una nueva capa para cada grupo y agrega los marcadores a la capa del grupo. Pero, antes de agregar el marcador a la capa, hace un registro de eventos de mousedown con una función de alerta simple.

El problema aquí es que cuando voy a hacer clic en un marcador, el cursor simplemente gira hacia una mano como si pensara que quiero arrastrar el mapa. Es como si hubiera alguna otra capa encima que impida el clic. Probé el registro de la consola en lugar de la alerta solo para asegurarme, pero en realidad nunca desencadena el clic del evento. Es difícil hacer un ejemplo de código que mostrará la imagen completa del código, pero aquí hay un fragmento:

function createMarker(lat, lon) { 
    var icon = new OpenLayers.Icon('/mapicon/icon-b.png', new OpenLayers.Size(12, 20), new OpenLayers.Pixel(-6, -10)); // this is a custom image 
    lonlat = new OpenLayers.LonLat(lon, lat); 
    var marker = new OpenLayers.Marker(lonlat, icon.clone()); 
    return marker; 
} 

marker = createMarker(lat,lon,'Example Title'); 
marker.events.register('mousedown', pin, function(evt) { alert('help!'); OpenLayers.Event.stop(evt); }); 

estoy golpeando una pared y si yo no estuviera calva, estaría tomando el pelo . ¿Alguien tiene alguna idea?

+0

añade un enlace en mi respuesta. –

Respuesta

4

Prueba esto:

function createMarker(lat, lon) { 
    var icon = new OpenLayers.Icon('/mapicon/icon-b.png', new OpenLayers.Size(12, 20), new OpenLayers.Pixel(-6, -10)); 
    lonlat = new OpenLayers.LonLat(lon, lat); 
    var marker = new OpenLayers.Marker(lonlat, icon.clone()); 
    return marker; 
} 

marker = createMarker(lat,lon,'Example Title'); 
marker.events.register('mousedown', marker, function(evt) { 
    alert('help!'); 
}); 

El segundo parámetro de la función de registro debería ser objeto que desea enlazar el evento. Siempre tengo en mi mente el ejemplo del caso objeto encima del ratón para OpenLayers.Map:

map = new OpenLayers.Map('divmap'); 
map.events.register('mouseover', map, function(evt) { 
    // Do stuff 
}); 

espero que le ayude. ¡Feliz codificación!

4

Tal vez debería ver los eventos de capa en su lugar. Supongo que estás usando una capa vectorial para tus puntos. En ese caso, mira el Vector layer documentation sobre el manejo de eventos.

Tener diferentes capas que deberían recibir los eventos del mouse debería funcionar.

Además, eche un vistazo a this sample en la página OL.

Disculpa si te digo lo obvio, y ya lo has intentado.

EDIT:

Realizada a partir de su respuesta de que es posible que desee echar un vistazo this question que pedí y luego respondió con un corte OL. Tal vez puedas sacar algo de eso.

10

Gracias por la ayuda a todos. El problema es (y la documentación OL es HORRIBLEMENTE patética, por lo que no indica esto en ninguna parte) que tiene que ver con el orden en el que creas las capas. En mi código, recorro una serie de nombres de capas y estaba creando una capa de marcador y una capa vectorial para cada nombre. Lo intenté primero con crear la capa de marcador y luego crear primero la capa de vector y tuvo el mismo efecto de lisiado de clic. Así que traté de pasar una vez para crear todas las capas de vectores primero. El ciclo de nuevo y crear las capas de marcador y eso funcionó.

OL es un gran sistema de mapeo. Es una pena que tengan una documentación tan pobre. Las muestras son casi inútiles. Si OL es una cosa tan impulsada por la comunidad, ¿por qué no hay foros OL? Tuve que venir aquí porque parece ser el único lugar donde los usuarios de OL hacen algún tipo de publicación.

+1

http://osgeo-org.1560.n6.nabble.com/OpenLayers-Users-f3910695.html – tomfumb

2

Tengo el mismo problema y creo que he encontrado la solución:

vistazo a esto: Capture feature events on different layers

El problema parece ser que no se puede escuchar diferentes eventos en diferentes capas al mismo tiempo, solo puedes hacer en la capa activa.

PS: Yo no lo probamos sin embargo ...

2

Una manera sencilla de hacerlo:

map.events.listeners.mousedown.unshift({ 
    func: function(){ 
     alert('hola muheres'); 
    } 
}); 

caso simplemente sustituto desea en lugar de "MouseDown"