Как поставить маркер только в пределах границ, как 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" на карте. Как только он обнаруживает, что центр карты изменился, информационное окно закрывается и слушатель удаляется.

Другие вопросы по тегам