À l'aide de setZoom() après l'utilisation de fitBounds() avec Google Maps API V3
Je suis en utilisant fitBounds() pour définir le niveau de zoom sur ma carte aussi inclure tous les marqueurs qui est actuellement affichée. Cependant, lorsque je n'ai qu'un marqueur visible, le niveau de zoom est à 100% (... le niveau de zoom de 20 je crois...). Cependant, je ne veux pas qu'il soit loin de zoom de sorte que l'utilisateur peut ajuster la position du marqueur, sans avoir à effectuer un zoom arrière.
J'ai le code suivant:
var marker = this.map.createMarker(view.latlng, this.markerNumber);
this.map.bounds.extend(view.latlng);
this.map.map.setCenter(this.map.bounds.getCenter());
this.map.map.fitBounds(this.map.bounds);
if (this.markerNumber === 1) {
this.map.map.setZoom(16);
}
this.markerNumber++;
où cela.carte.limites précédemment définies comme suit:
this.map.bounds = new google.maps.LatLngBounds();
Cependant, le problème que j'ai est que la ligne this.map.map.setZoom(16);
ne fonctionne pas si j'utilise this.map.map.fitBounds(this.map.bounds);
, cependant, je sais que la ligne de code est correct, parce que quand je commenter la fitBound() en ligne, le setZoom() comme par magie commence à fonctionner.
Des idées comment je résoudre ce problème? Je suis en train de réfléchir à mettre un par maxzoom niveau comme une alternative si je ne peux pas obtenir ce travail.
- L' .carte.la carte est en effet là ou est-ce une erreur?Si possible, télécharger une page de test et de fournir un linkso on peut voir le problème avec plus de facilité.
- Je vais avoir le même problème. Aimerait savoir un correctif.
- .carte.la carte était là sur le but. Le premier fait référence à ma carte objet et le second à la google map de l'objet. Depuis, j'ai nettoyé ce problème de mon code.
- voir stackoverflow.com/questions/2437683/...
Vous devez vous connecter pour publier un commentaire.
Bien, j'ai pensé à elle. Apparemment, le fitbounds() se produit de manière asynchrone, donc vous devez attendre pour un
bounds_changed
événement avant de définir le zoom fonctionne.Mise à jour: Voir @Nequin de la réponse à l'aide de
addListenerOnce
pour une meilleure solution qui ne nécessite pas un délai d'attente.addListenerOnce()
qui permettrait d'en finir avec laremoveListener()
appel.Cette solution fonctionne mieux... au lieu d'attendre sur le délai d'attente pour retirer de l'auditeur. Appelez directement avant d'utiliser
fitBounds
(je crois que l'appel après fonctionnera aussi bien).google.maps.event.addListenerOnce
au lieu de l'ajout et de retrait de l'auditeur.addListenerOnce
.J'ai trouvé le supplément de zoom à être un peu choquante. Si vous définissez la par maxzoom option avant d'appeler fitBounds (et puis unset il dans le rappel), vous pouvez l'éviter:
J'ai simple et la solution sale.
Utiliser Si d'autre ...
J'ai juste ajouté une ligne à la fonction
addBounds(position)
et il a fixé, comme le montre l'exemple suivant:Je pense que la bonne façon de le faire est que vous devez définir le niveau de zoom après
map.fitBounds(bounds)
. Simplement ajoutermap.setZoom(16)
aprèsmap.fitBounds(bounds)
. Il fonctionne très bien pour moi.Toutes les solutions avec les écouteurs d'événement n'a pas fonctionné pour moi (ce.getZoom() est toujours pas défini dans le rappel, et ce.setZoom() n'a aucun effet).
J'ai trouvé cette solution qui fonctionnait bien: