2012-04-22 17 views
52

Tengo este código que representa un mapa.Google maps API V3 método fitBounds()

function initialize() { 
    var myOptions = { 
     center: new google.maps.LatLng(45.4555729, 9.169236), 
     zoom: 13, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 

panControl: true, 
mapTypeControl: false, 
panControlOptions: { 
      position: google.maps.ControlPosition.RIGHT_CENTER 
     }, 
zoomControl: true, 
zoomControlOptions: { 
    style: google.maps.ZoomControlStyle.LARGE, 
    position: google.maps.ControlPosition.RIGHT_CENTER 
}, 
scaleControl: false, 
streetViewControl: false, 
streetViewControlOptions: { 
    position: google.maps.ControlPosition.RIGHT_CENTER 
      } 
     }; 
    var map = new google.maps.Map(document.getElementById("mapCanvas"), 
     myOptions); 



var Item_1 = new google.maps.LatLng(45.5983128 ,8.9172776); 

var myPlace = new google.maps.LatLng(45.4555729, 9.169236); 

var marker = new google.maps.Marker({ 
    position: Item_1, 
    map: map}); 

var marker = new google.maps.Marker({ 
    position: myPlace, 
    map: map}); 

var bounds = new google.maps.LatLngBounds(myPlace, Item_1); 
map.fitBounds(bounds); 

    } 

Incluso si los dos puntos están separados de 25 kilometros puedo obtener este resultado:

enter image description here

Aunque me gustaría hacer un zoom nivel superior.

gusta esta

enter image description here

uso el método fitBounds()

var bounds = new google.maps.LatLngBounds(myPlace, Item_1); 
    map.fitBounds(bounds); 

, gracias por su apoyo

Respuesta

119

Esto sucede porque LatLngBounds() no toma dos puntos arbitrarios como parámetros, pero los puntos SW y NE

usar el método .extend() en un objeto vacío límites

var bounds = new google.maps.LatLngBounds(); 
bounds.extend(myPlace); 
bounds.extend(Item_1); 
map.fitBounds(bounds); 

demo en http://jsfiddle.net/gaby/22qte/

29

LatLngBounds debe definirse con puntos en (sur-oeste, noreste) orden. Tus puntos no están en ese orden.

El arreglo general, especialmente si usted no sabe los puntos serán definitivamente en ese orden, es extender una grada vacías:

var bounds = new google.maps.LatLngBounds(); 
bounds.extend(myPlace); 
bounds.extend(Item_1); 
map.fitBounds(bounds); 

La API resolver los límites.

+7

¡Hah! Simplemente golpeado. Los teclados iPad no facilitan la escritura rápida. –

18

Tengo el mismo problema que usted describe aunque estoy construyendo mis LatLngBounds según lo propuesto anteriormente. El problema es que las cosas son asíncrono y llamando map.fitBounds() en el momento equivocado le puede dejar con un resultado como en el P. La mejor manera que he encontrado es para realizar la llamada en un controlador inactivo como esto:

google.maps.event.addListenerOnce(map, 'idle', function() { 
    map.fitBounds(markerBounds); 
}); 
+1

Gracias, esto fue de gran ayuda para mí porque estaba geocodificando direcciones a coords, y luego mapeando a esos coords, pero no estaba funcionando – andrewtweber

+0

Me he encontrado con un problema similar debido a que el HTML que contiene no se muestra aún durante una llamada 'fitBounds()', por lo que aparentemente el zoom no se pudo resolver solo. Asegurándome de que el mapa se muestra primero antes de intentar hacer zoom me ayudó. – stevo

+1

HUUUGE ayuda, gracias por esta respuesta –

6
var map = new google.maps.Map(document.getElementById("map"),{ 
       mapTypeId: google.maps.MapTypeId.ROADMAP 

      }); 
var bounds = new google.maps.LatLngBounds(); 

for (i = 0; i < locations.length; i++){ 
     marker = new google.maps.Marker({ 
      position: new google.maps.LatLng(locations[i][1], locations[i][2]), 
      map: map 
     }); 
bounds.extend(marker.position); 
} 
map.fitBounds(bounds); 
+2

Cool me funciona. Gracias @MAMASSi –

Cuestiones relacionadas