2009-04-29 10 views
0

J'ai l'impression d'avoir atteint un bug ou d'avoir oublié quelque chose. J'ai écrit du code qui énumère toutes les fonctions vectorielles d'un calque OpenLayers Vector - pour vérifier si la souris est à l'intérieur d'une entité vectorielle - si c'est le cas, il affiche des informations basées sur la fonction.OpenLayers .containsPoint après pan

J'ai dû écrire mes propres méthodes pour cela parce que les contrôles OpenLayers existants (sélectionnez etc) s'arrêtent après avoir trouvé une fonctionnalité sous la souris, et la possibilité d'empiler plusieurs entités les unes sur les autres.

Mon problème est que la méthode .containsPoint semble utiliser des coords avant un 'pan'. Après un zoom avant ou arrière, la géométrie semble être au bon endroit et .containsPoint fonctionne correctement lorsque je passe la souris sur la carte.

Ai-je besoin de faire quelque chose après la carte a été éreinté de mettre à jour quelque chose (la géométrie de fonction)

Répondre

2

Je me rends compte que cette question a presque eu son premier anniversaire, et elle n'est peut-être plus valide, mais je vais essayer de répondre quand même. OpenLayers.Control.DragPan fait un appel à la carte lorsque vous avez terminé le panoramique.

Si vous cochez la fonction de balayage panoramique OpenLayers.Map, vous verrez ce commentaire à l'intérieur:

// only call setCenter if not dragging or there has been a change 

La logique suivante dans la fonction reflète ce commentaire.

Alors oui, chaque fois que vous avez terminé panning vous devez faire quelque chose comme:

dragpan.handler.up = function(evt) 
{ 
    dx = dragpan.handler.last.x - evt.x; 
    dy = dragpan.handler.last.y - evt.y; 
    var centerPx = map.getViewPortPxFromLonLat(map.getCenter()); 
    var newCenterPx = centerPx.add(dx, dy); 
    var newCenterLonLat = map.getLonLatFromViewPortPx(newCenterPx); 
    map.setCenter(map.getCenter() + dragpan.handler.xy); 
} 

... et les choses devraient par magie pour vous.

+0

.. comme vous l'avez dit, il est presque à la question 1er anniversaire - je l'ai fait réparer ... Je ne peux me rappeler que j'ai dû appeler une méthode différente. J'allais afficher la réponse - mais j'étais «inquiet» de poser et de répondre à mes propres questions, à l'époque ... – Adrian

0

Sans un exemple de code extrait de code, il est très difficile de répondre. OpenLayers est capable de sélectionner plusieurs objets sur un clic de souris. Avez-vous déjà essayé OpenLayers 2.8?