Я видел много неправильных или слишком сложных решений, поэтому решил опубликовать рабочее, элегантное решение .
Причина, по которой setZoom()
не работает должным образом, заключается в том, что fitBounds()
является асинхронным, поэтому он не дает гарантии, что он немедленно обновит масштаб, но ваш вызов setZoom()
зависит от этого.
То, что вы могли бы рассмотреть, это установить параметр карты minZoom
перед вызовом fitBounds()
и затем очистить его после его завершения (чтобы пользователи могли по-прежнему уменьшать масштаб вручную, если захотят):
var bounds = new google.maps.LatLngBounds();
// ... (extend bounds with all points you want to fit)
// Ensure the map does not get too zoomed out when fitting the bounds.
gmap.setOptions({minZoom: 6});
// Clear the minZoom only after the map fits the bounds (note that
// fitBounds() is asynchronous). The 'idle' event fires when the map
// becomes idle after panning or zooming.
google.maps.event.addListenerOnce(gmap, 'idle', function() {
gmap.setOptions({minZoom: null});
});
gmap.fitBounds(bounds);
Кроме того, если вы также хотите ограничить максимальное увеличение, вы можете применить тот же трюк со свойством maxZoom
.
См. Документы MapOptions .
.