2008-11-27 7 views
8

Me gustaría pasar una x cantidad de ubicaciones geográficas a la API de Google Maps y centrarla en estas ubicaciones y establecer el nivel de zoom apropiado para que todas las ubicaciones estén visibles en el mapa. Es decir. mostrar todos los marcadores que están actualmente en el mapa.Haga que los mapas de Google se centren en geo-locs y acerque el zoom apropiadamente

¿Es esto posible con lo que la API de Google Maps ofrece de forma predeterminada o tengo que resolver la creación yo mismo?

Respuesta

3

Hay varias maneras de hacerlo, pero es bastante fácil si está utilizando la API V2. Consulte esto post for an example, this group post o this post.

+0

Tenga en cuenta que el primer eslabón menciona que getBoundsZoomLevel() es indocumentado - esto ya no es cierto. Implementé algo similar para un proyecto mío, funciona bien, ¡excepto que ojalá supiera sobre GBounds.extend()! –

9

Solía ​​fitBounds (V3 API) para cada punto:

  1. declarar la variable.

    var bounds = new google.maps.LatLngBounds(); 
    
  2. pasar por cada marcador con bucle FOR

    for (i = 0; i < markers.length; i++) { 
        var latlng = new google.maps.LatLng(markers[i].lat, markers[i].lng); 
        bounds.extend(latlng); 
    } 
    
  3. Finalmente llaman

    map.fitBounds(bounds); 
    
+0

este ejemplo no es realmente claro – Francesco

+2

@camelCase: depende de su habilidad, +1 exactamente lo que estaba buscando – Moak

+0

@Moak es posible que desee agregar maxZoom al objeto del mapa para evitar el acercamiento demasiado! – joetsuihk

1

idea de Grey es grande, pero no funciona como es. Tenía que trabajar a cabo un corte para una zoomToMarkers API V3:

function zoomToMarkers(map, markers) 
{ 
    if(markers[0]) // make sure at least one marker is there 
    { 
     // Get LatLng of the first marker 
     var tempmark =markers[0].getPosition(); 

     // LatLngBounds needs two LatLng objects to be constructed 
     var bounds = new google.maps.LatLngBounds(tempmark,tempmark); 

     // loop thru all markers and extend the LatLngBounds object 
     for (var i = 0; i < markers.length; i++) 
     { 
      bounds.extend(markers[i].getPosition()); 
     } 

     // Set the map viewport 
     map.fitBounds(bounds); 
    } 

} 
+0

¡Muchas gracias! –

Cuestiones relacionadas