2012-09-17 2 views
3

Je voudrais créer une carte avec quelques épingles dessus (en utilisant une brochure). Lorsque l'utilisateur clique sur l'un d'entre eux, la carte doit se déplacer jusqu'à ce que la broche se trouve au bas de la carte dans le centre horizontal.Utiliser simultanément panTo et panBy

Ma carte est de 400 pixels Hight, donc je suis en utilisant ce code:

map.panTo(new L.LatLng(lat, lng)); 
map.panBy(new L.Point(0, -200)); 

Il fonctionne comme un charme - que l'IE a quelques problèmes avec elle: Il commence à se déplacer vers le centre de la map (panTo), mais dès qu'il se déplace vers le bas aussi (panBy) il s'arrête pour effectuer le déplacement vers le centre.

Comment combiner ces deux mouvements? Je ne peux pas attendre jusqu'à ce que panTo ait centré la carte, car cela ferait sauter la carte de haut en bas si la broche est dans la moitié inférieure de la carte.

+1

Ajuster la valeur lat/lng pour inclure la traduction? Cela pourrait être trop compliqué cependant; vous devez calculer la valeur résultante en fonction du réglage de zoom actuel du widget. – Shmiddty

+0

Cela me semble très compliqué. Connaissez-vous une page avec un exemple? – Christopher

+0

A partir des documents de brochure, vous pouvez obtenir le point lat/long en pixels en utilisant: 'latLngToPoint ( latlng, zoom)' modifier cela, puis le convertir en lat/long avec: 'pointToLatLng ( zoom) 'source: http://leaflet.cloudmade.com/reference.html#icrs – Shmiddty

Répondre

6

Extrait de la brochure docs, vous pouvez obtenir le point lat/long en pixels en utilisant:

latLngToPoint(<LatLng> latlng, <Number> zoom)

modifier que, puis reconvertir en lat/long avec:

pointToLatLng(<Point> point, <Number> zoom)

source: http://leaflet.cloudmade.com/reference.html#icrs

+7

Les fonctions sont accessibles via 'map.options.crs' (' map = L.map ('map') ') – Christopher