Как поставить маркер только в пределах границ, как autoWan infoWindow
Достаточно просто отцентрировать маркер, находящийся за пределами текущих границ карты Google:
if (!map.getBounds().contains(marker.getPosition())) {
myMap.panTo(pos)
}
То, что я хочу сделать, это имитировать автоматическое панораму infoWindow для маркера, где, если маркер не находится в границах, карта перемещается достаточно далеко, чтобы получить его в границах. Есть ли более простой способ сделать это, кроме ручного вычисления расстояния от краев границ и установки "ложного" центра, который перемещает его только на необходимое расстояние? Я попытался использовать FitBounds, и он увеличился и все еще отцентрировал маркер...
1 ответ
Вот JSBin с "хакерским" решением, которое не требует каких-либо вычислений широты и долготы или границ с вашей стороны. Не забудьте заменить YOUR_API_KEY
в HTML с вашим ключом API Карт Google. Нажмите кнопку "Поместить случайный маркер" внизу карты, чтобы увидеть его в действии.
Это решение использует функцию автоматического панорамирования объектов InfoWindow для панорамирования карты достаточно далеко, чтобы маркер находился в пределах границ.
Часть кода, которая обрабатывает панорамирование, находится в map.panToMarker
метод. Вот его тело:
var infoWindow = new google.maps.InfoWindow();
infoWindow.open(this.map, this.marker);
google.maps.event.addListenerOnce(this.map, 'center_changed', function() {
infoWindow.close();
});
Я создаю новое окно InfoWindow и вызываю open
на нем, передавая карту и маркер в качестве аргументов. Это заставляет карту перемещаться к маркеру. Затем я создаю MapsEventListener, который прослушивает событие "center_changed" на карте. Как только он обнаруживает, что центр карты изменился, информационное окно закрывается и слушатель удаляется.