Google Maps map.getBounds () subito dopo una chiamata a map.fitBounds
-
29-09-2019 - |
Domanda
Chiamo getBounds () subito dopo una chiamata a fitBounds (), e ho pensato che avrei avuto un back legato valida come ricentrata mappa e zoom per adattarsi i limiti. Purtroppo, getBounds () sta tornando a zero.
Il codice per riprodurre questo è il seguente:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8"/>
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"></script>
<style>
#map {
width: 800px;
height: 400px;
}
</style>
</head>
<body>
<div id='map'></div>
<script>
var myLatlng1 = new google.maps.LatLng(-38.397, 150.644);
var myLatlng2 = new google.maps.LatLng(-34.897, 150.844);
var myLatLngBounds = new google.maps.LatLngBounds(myLatlng1, myLatlng2);
var myOptions = {
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(0, 0),
zoom: 0
}
var map = new google.maps.Map(document.getElementById("map"), myOptions);
map.fitBounds(myLatLngBounds);
console.log(map.getMapTypeId());
console.log(map.getZoom());
console.log(map.getBounds());
</script>
</body>
</html>
C'è qualcosa che mi manca? Non sono stato in grado di trovare qualsiasi cosa nella documentazione su questa situazione. Il più vicino che ottenga è una nota sulla getBounds che dice:
Se la mappa non è ancora inizializzato (vale a dire la maptype è ancora nulla), o al centro e zoom non sono stati impostati, allora il risultato è nullo.
Si noti che i rendimenti getZoom indefinito, anche. Fa fitBounds () non impostato questo valore?
Modifica Ho aggiornato il codice con uno zoom e un centro di default, secondo i suggerimenti di Marcelo.
Soluzione
Si dovrà ottenere i limiti dopo l'evento bounds_changed.
Altri suggerimenti
@CrazyEnigma suggerito , è possibile ottenere i limiti dopo l'evento bounds_changed
viene attivato:
map.fitBounds(myLatLngBounds);
google.maps.event.addListener(map, 'bounds_changed', function() {
console.log(map.getMapTypeId());
console.log(map.getZoom());
console.log(map.getBounds());
});
È possibile che questo sarebbe stampare il seguente alla console:
roadmap
6
Object
Si noti che se si desidera solo getBounds
e fare qualcosa una volta, è necessario sostituire addListener
con addListenerOnce
(Grazie, @Tomas).
Usa addListenerOnce quando tilesloaded
google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
map.setCenter(myLatLngBounds)
});
La risposta è nel vostro preventivo. È necessario impostare il centro e zoom per la mappa da inizializzare.
Si noti che nella documentazione per la specifica oggetto MapOptions, i valori del centro e lo zoom sono contrassegnati come richiesta ??em>:
http://code.google.com/apis /maps/documentation/javascript/reference.html#MapOptions