Есть другая тема на эту тему, что тоже очень хорошо. Проблема, которую мне пришлось решить, заключалась в том, что вместо того, чтобы устанавливать границы вручную и проверять содержание центра, я хотел установить границу при загрузке страницы, а затем разрешить перетаскивание на край при увеличении.
Итак, я установил границы панорамирования при загрузке карты, один раз.
Затем я проверяю, находится ли карта на максимальном увеличении, и если да, возвращаю начальный центр.
При увеличении я хочу перемещаться по КРАЮ начальных границ, а не просто проверять, содержится ли CENTER, потому что это расширит допустимое панорамирование на половину области просмотра.
К сожалению, несмотря на то, что это хорошо выполнено и хорошо работает при медленном панорамировании, при быстром панорамировании это немного прерывисто.
Если у вас есть предложения о том, как этого можно избежать, я был бы признателен.
map = new google.maps.Map( // defaults
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
)
);
});