La fijación de este problema en 2017
Reducir la caja de contorno ligeramente antes de enviarlo a map.fitBounds()
.
Aquí es una función para reducir el tamaño del cuadro delimitador:
// Values between 0.08 and 0.28 seem to work
// Any lower and the map will zoom out too much
// Any higher and it will zoom in too much
var BOUNDS_SHRINK_PERCENTAGE = 0.08; // 8%
/**
* @param {google.maps.LatLngLiteral} southwest
* @param {google.maps.LatLngLiteral} northeast
* @return {Array[google.maps.LatLngLiteral]}
*/
function slightlySmallerBounds(southwest, northeast) {
function adjustmentAmount(value1, value2) {
return Math.abs(value1 - value2) * BOUNDS_SHRINK_PERCENTAGE;
}
var latAdjustment = adjustmentAmount(northeast.lat, southwest.lat);
var lngAdjustment = adjustmentAmount(northeast.lng, southwest.lng);
return [
{lat: southwest.lat + latAdjustment, lng: southwest.lng + lngAdjustment},
{lat: northeast.lat - latAdjustment, lng: northeast.lng - lngAdjustment}
]
}
utilizar de esta manera:
// Ensure `southwest` and `northwest` are objects in google.maps.LatLngLiteral form:
// southwest == {lat: 32.79712, lng: -117.13931}
// northwest == {lat: 32.85020, lng: -117.09356}
var shrunkBounds = slightlySmallerBounds(southwest, northeast);
var newSouthwest = shrunkBounds[0];
var newNortheast = shrunkBounds[1];
// `map` is a `google.maps.Map`
map.fitBounds(
new google.maps.LatLngBounds(newSouthwest, newNortheast)
);
Tengo una aplicación haciendo lo mismo que codr: ahorro de los límites del mapa actual en el URL, e inicializando el mapa desde los límites de URL al actualizar. Esta solución funciona maravillosamente para eso.
¿Por qué funciona esto?
Google Maps esencialmente lo hace cuando fitBounds()
se llama:
- centrar el mapa en el punto central del cuadro de límite dado.
- Amplía el nivel de zoom más alto donde la ventana contendrá los límites dados dentro de del cuadro de la ventana gráfica.
Si los límites dados sería exactamente coincidir con el puerto de vista, Google Maps no considera que a medida "que contiene" los límites, por lo que se aleja un nivel más.
Me tomó más de 16 horas para aterrizar aquí. Incluso si esto no es un error, debería haber algo de trabajo para aquellos que están intentando hacer esto. –