2013-11-18 3 views
-2

У меня есть приложение для карты Google, и пользователь может выполнить поиск маркера. Поиск имеет текущий mapBounds, так что я могу выполнять поиск только в текущем виде. Однако, если у меня нет никаких результатов в текущем представлении - я пытаюсь выполнить поиск в пределах 100 км от центра карты.Масштаб карты, чтобы содержать данные границы карты

Если я нахожу место в пределах 100 км, я хочу уменьшить масштаб карты, чтобы показать местоположения, которые я нашел.

На сервере я просматриваю все свои местоположения и получаю точки sw и ne. Таким образом, в основном в моем ответе ajax я могу напрямую создавать latLngBounds (нет необходимости цитировать местоположения маркеров и расширять границы).

Проблема в том, что я стараюсь делать map.fitBounds (mynewbounds); Ничего не произошло. Карта остается такой, какая есть.

Похоже, что поскольку центр карты является центром новых границ, карта не хочет двигаться. Если я буду map.pantobounds, тогда карта перемещается в северо-западный угол границ.

Поведение pantoBounds, как ожидается, в соответствии с документацией: https://developers.google.com/maps/documentation/javascript/reference

If the bounds is larger than the map, the map will be shifted to include the northwest corner of the bounds 

Любые идеи, как сделать карту масштаба в целях сдерживания новых границ?

+0

Итак, когда вы добавляете новый маркер через AJAX, вы не обновляете границы? Но вы пытаетесь сделать 'fitBounds' без нового маркера? – putvande

+0

У меня есть координаты для моих новых границ. Ответ ajax имеет новые границы, поэтому я создаю их следующим образом: var myBounds = new google.maps.LatLngBounds ( \t новый google.maps.LatLng (данные [0] .boundaries.s, data [0] .boundaries. w), новый google.maps.LatLng (данные [0] .boundaries.n, data [0] .boundaries.e)); Он работает (я нарисовал прямоугольник, чтобы увидеть, где новые границы, и они правильные). К сожалению, карта не перемещается, чтобы показать их ... –

+0

Вот несколько скриншотов, чтобы проиллюстрировать проблему. 1. https://www.diigo.com/item/image/48vz2/c4qu - здесь все в порядке, так как у нас есть местоположения в текущем виде. 2. https://www.diigo.com/item/image/48vz2/wvp8 - здесь я увеличен. В текущем виде нет местоположений, но в радиусе поиска 100 км находятся местоположения. Однако подходящие изображения не уменьшают масштаб, чтобы показать их. 3. https://www.diigo.com/item/image/48vz2/i7cx - это показывает, что происходит, когда я использую panToBounds ... что тоже не полезно. 4. https://www.diigo.com/item/image/48vz2/op0v - этого я хочу достичь. –

ответ

3

Хорошо, я только что понял, что происходит. Прямо перед тем, как я установил границы, я пытался удалить события zoom_out и dragend. К сожалению, я решил использовать событие clearListeners, которое удаляло все события, установленные на карте (даже те, которые не заданы мной). Таким образом, кажется, что проблемы fitBounds - это событие zoom_changed, но карта не реагировала на него, поскольку все слушатели были удалены.

Как только я удалил правильные события с помощью removeListener (listenerInstance), функция fitBounds начала вести себя так, как ожидалось.

Так что, как предупреждение всем остальным! Не используйте clearListeners, если вы не знаете, что делаете. Он удаляет все события, назначенные объекту карты, что может привести к неприятному поведению!

Смежные вопросы