Є ще одна нитка на цю тему, яка теж дуже хороша. Проблема, яку мені довелося вирішити, полягала в тому, що замість того, щоб встановлювати межі вручну та перевіряти утримання центру, я хотів встановити межу при завантаженні сторінки, а потім дозволити перетягування до краю, якщо збільшено.
Тож я встановив межі панорамування при завантаженні карти один раз. Потім я перевіряю, чи на карті все ще максимальне збільшення, і якщо так, повертаю початковий центр. Якщо збільшено, я хочу панорамувати до краю початкових меж, а не просто перевірити, чи міститься ЦЕНТР, оскільки це збільшить дозволене панорамування на половину області перегляду.
На жаль, незважаючи на те, що це робить роботу і працює нормально, коли панорамування здійснюється повільно, це трохи відхиляється, якщо ви швидко рухаєтеся.
Якщо у вас є пропозиції щодо того, як цього можна уникнути, я буду вдячний.
map = new google.maps.Map(
document.getElementById("map22"),
{
disableDefaultUI : true,
zoomControl : true,
zoom : 7,
minZoom : 7,
maxZoom : 10,
center : new google.maps.LatLng(
64.99473104134819,
-19.22332763671875
),
mapTypeId : google.maps.MapTypeId.ROADMAP
}
);
function borders(){
return {
maxLat : map.getBounds().getNorthEast().lat(),
maxLng : map.getBounds().getNorthEast().lng(),
minLat : map.getBounds().getSouthWest().lat(),
minLng : map.getBounds().getSouthWest().lng(),
center : map.getCenter()
}
}
google.maps.event.addListenerOnce(map,'idle',function() {
limit = borders();
});
google.maps.event.addListener(map,'drag',function() {
if(map.getZoom() == 7) return map.setCenter(limit.center);
current = borders();
if( current.maxLng < limit.maxLng && current.minLng > limit.minLng ) activeCenterLng = current.center.lng();
if( current.maxLat < limit.maxLat && current.minLat > limit.minLat ) activeCenterLat = current.center.lat();
map.setCenter(
new google.maps.LatLng(
activeCenterLat,
activeCenterLng
)
);
});
restriction
опцію для обмеження області перегляду карти. Погляньте на приклад та пояснення на stackoverflow.com/a/54717220/5140781 .