2011-03-02 3 views
3

J'ai travaillé sur un moyen pour les utilisateurs de déplacer un marqueur sans faire glisser. Fondamentalement, l'utilisateur clique sur le marqueur et ouvre la bulle de la fenêtre d'information. Dans la bulle est un lien vers une fonction javascript qui définit un événement de clic sur la carte. Lorsque l'utilisateur clique quelque part sur la carte, il est supposé déplacer le marqueur jusqu'au point cliqué.openlayers marker moveTo seulement précis à un niveau de zoom spécifique

Dans ma carte, j'ai 18 niveaux de zoom. Au niveau de zoom 15, ce processus fonctionne parfaitement. Si je zoome après avoir cliqué une fois, le marqueur se déplace toujours exactement là où je clique. Mais alors, si je rafraîchis et recommence au niveau de zoom 16 et essaie de cliquer quelque part, le marqueur est déplacé vers une position plus haute et plus vers la gauche. En répétant ce processus à des niveaux de zoom plus élevés, le marqueur est déplacé encore plus haut et vers la gauche sur la carte (à distance). Effectuer les opérations ci-dessus à des niveaux de zoom inférieurs à 15 fonctionne également très bien.

Voici un extrait du code:

lmLayer = new OpenLayers.Layer.Markers("Landmark Creation"); 
map.addLayer(lmLayer); 
var marker = landmark['landmark_1234'];// this just pulls the marker out of storage 
map.events.register("click", lmLayer, function(evt){ 
    var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY); 
    marker.moveTo(pixel); 
    OpenLayers.Event.stop(evt); 
}); 

Je console connecté les clics clientX et clientY et ils font inscrire le droit coordonnées x/y des bords gauche et en haut du navigateur. Mais il semble que l'OL a mal calculé le mouvement à des niveaux de zoom supérieurs à 15.

Des idées?

+0

ce que les systèmes de coordonnées que vous utilisez pour la carte et la couche de marquage? Comment sont-ils déclarés? –

Répondre

1

un peu solution en attendant la correction de bug

lmLayer = new OpenLayers.Layer.Markers("Landmark Creation"); 
map.addLayer(lmLayer); 
var marker = landmark['landmark_1234']; 

map.events.register("click", lmLayer, function(evt){ 
    var pixel = new OpenLayers.Pixel(evt.clientX,evt.clientY); 
    marker.lonlat = pixel; 
    marker.moveTo(pixel); 
    // workaround 
    marker.draw(); 
    lmLayer.redraw(); 
    OpenLayers.Event.stop(evt); 
}); 

Cheers, J.

Questions connexes