2016-03-27 1 views
0

J'ai une application web, écrite en utilisant Angular.js et angular-leaflet-directive, qui affiche une sélection de routes sur une carte. J'ai inclus quelques marque-pages pour faciliter la navigation vers certaines zones et donc baser la navigation sur l'étendue de la carte en utilisant les attributs center et zoom.Est-il possible d'utiliser simultanément les attributs center et bounds dans Leaflet.js?

Je suis maintenant comprenant également la fonctionnalité de déterminer si une route est visible dans la mesure actuelle de la carte, en utilisant:
map.getBounds().contains([roadLatA, roadLngA]) || map.getBounds().contains([roadLatB, roadLngB]), où se réfèrent A et B aux points d'extrémité d'une route.

Cela fonctionne parfaitement au chargement de la page mais après toute sorte d'interaction (par exemple glisser, zoom événements) lorsque getBounds() est appelée à nouveau, il retourne la même LatLng pour chaque coin de la boîte englobante, qui sont les valeurs qui sont définies comme les coordonnées center par défaut. Après beaucoup de refactoring je ne peux pas trouver un moyen d'incorporer à la fois center et getBounds() avec succès.

Est-il possible ou existe-t-il une limitation dans la directive angulaire-leaflet ou leaflet.js, ce qui signifie que les deux méthodes de définition de l'étendue de la carte entrent en conflit les unes avec les autres?

+0

Le comportement 'getBounds' que vous décrivez est très étrange. Avez-vous une chance de partager plus de code, reproduisant éventuellement votre problème en ligne? (par exemple sur Plunker) – ghybs

Répondre

0

J'ai maintenant résolu le problème, le problème était en appelant leafletData.getMap() sans passer dans le id de l'élément de la carte.

Ce comportement me lancer comme l'appel getMap() initial (sans id) était de retour l'objet carte correcte, mais sur les appels suivants (après intervention de l'utilisateur), le $promise n'a pas été résolu et je ne recevais pas non défini ou d'autres erreurs. Je devine que la fonction getBounds() était alors appelée sur le mauvais objet de carte.