Станом на середину 2016 року офіційного способу обмеження видимої площі немає. У більшості спеціальних рішень для обмеження меж є недолік, оскільки вони не обмежують межі точно так, щоб вони відповідали виду карти, вони обмежують її лише в тому випадку, якщо центр карти знаходиться поза вказаними межами. Якщо ви хочете обмежити межі накладеного зображення, як я, це може призвести до поведінки, як показано нижче, де карта підкладеного зображення видно під накладкою нашого зображення:
Щоб вирішити цю проблему, я створив бібліотеку , яка успішно обмежує межі, тому ви не можете вийти з накладки.
Однак, як і інші існуючі рішення, воно має "вібруюче" питання. Коли користувач достатньо агресивно натискає на карту, після того, як вони відпустять ліву кнопку миші, карта все ще продовжує панорамитися сама по собі, поступово сповільнюючись. Я завжди повертаю карту назад до меж, але це призводить до певної вібрації. Цей ефект панорамування не може бути зупинений будь-якими засобами, наданими API Js на даний момент. Здається, що поки Google не додасть підтримку для чогось типу map.stopPanningAnimation (), ми не зможемо створити безперебійний досвід.
На прикладі використання згаданої бібліотеки я міг отримати найгладший досвід із суворими межами:
function initialise(){
var myOptions = {
zoom: 5,
center: new google.maps.LatLng(0,0),
mapTypeId: google.maps.MapTypeId.ROADMAP,
};
var map = new google.maps.Map(document.getElementById('map'), myOptions);
addStrictBoundsImage(map);
}
function addStrictBoundsImage(map){
var bounds = new google.maps.LatLngBounds(
new google.maps.LatLng(62.281819, -150.287132),
new google.maps.LatLng(62.400471, -150.005608));
var image_src = 'https://developers.google.com/maps/documentation/' +
'javascript/examples/full/images/talkeetna.png';
var strict_bounds_image = new StrictBoundsImage(bounds, image_src, map);
}
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("maps", "3",{other_params:"sensor=false"});
</script>
<body style="margin:0px; padding:0px;" onload="initialise()">
<div id="map" style="height:400px; width:500px;"></div>
<script type="text/javascript"src="https://raw.githubusercontent.com/matej-pavla/StrictBoundsImage/master/StrictBoundsImage.js"></script>
</body>
Бібліотека також може автоматично обчислити мінімальне обмеження масштабу. Потім це обмежує рівень збільшення за допомогоюminZoom
атрибута карти.
Сподіваємось, це допомагає тому, хто хоче знайти рішення, яке повністю дотримується заданих меж і не хоче дозволити панірувати їх.
if (x < minX) x = minX;
іif (x > maxX) x = maxX;
не виключати один одного? Чому ви зосереджуєте полотно на координатах minX / maxX та maxX / maxY, хоча вони не є координатами центру?