Есть ли способ установить максимальный уровень масштабирования fitBounds()
? Моя проблема в том, что когда карта загружается только в одно место, она увеличивается настолько, насколько это возможно, что действительно вырывает карту из контекста и делает ее бесполезной. Может, я ошибаюсь?
Заранее спасибо!
google-maps
fitbounds
Codey W
источник
источник
Ответы:
Мне нравится решение mrt (особенно, когда вы не знаете, сколько точек вы будете отображать или настраивать), за исключением того, что оно сбрасывает маркер, так что он больше не находится в центре карты. Я просто расширил его на дополнительную точку, вычтя 0,01 из широты и долготы, так что маркер остается в центре. Отлично работает, спасибо mrt!
источник
fitBounds()
метода, заключается в том, что масштабирование происходит асинхронно: stackoverflow.com/questions/2989858/…Вы можете настроить свою карту
maxZoom
вMapOptions
(api-reference) следующим образом:Это предотвратит более глубокое масштабирование карты при использовании
fitBounds()
и даже уберет уровни масштабирования из элемента управления масштабированием.источник
maxZoom
до установки границ , а затем сбросить его снова , используяmap.setOptions({ maxZoom: undefined })
наidle
события произвели за счет изменения границ. Это предотвращает эффект увеличения и уменьшения масштаба вместо сброса масштабаidle
события.Другое решение - расширить границы, если вы обнаружите, что они слишком малы, прежде чем выполнять fitBounds ():
источник
Использование опции MaxZoom лучше всего работает, если вы не приближаетесь к имеющимся отметкам.
источник
После того, как вы добавили все реальные границы, добавьте эти строки
он получает центр реальных границ, затем добавляет две дополнительные точки: одну к северо-востоку и одну к юго-западу от вашего центра
Это эффективно устанавливает минимальный масштаб, измените значение смещения, чтобы увеличить или уменьшить масштаб
источник
Если это для одного места, вы можете вместо этого использовать setCenter () и setZoom ().
источник
ты можешь использовать
таким образом вы устанавливаете свойства карты после того, как карта была инициализирована .... вы можете устанавливать их столько раз, сколько хотите ... но в случае ур ... вы можете установить их до fitBounds ()
удачи, раруту
источник
Чтобы предотвратить слишком большое увеличение карты, я добавил следующую строку кода:
Сразу после этой строки:
Не стесняйтесь изменять уровень масштабирования до любого уровня, который вы не хотите, чтобы карта увеличивалась.
Если у вас есть какие-либо проблемы или вопросы, просто оставьте мне комментарий к сообщению в блоге, которое я написал об этом на http://icode4you.net/creating-your-own-store-locator-map-how-to-prevent-the- карта-из-увеличения-слишком-близко-на-единственном маркере
источник
Мне очень нравится решение mrt, и оно отлично работает, если у вас всегда есть только одна точка для работы. Однако я обнаружил, что если ограничивающая рамка не была основана на одной точке, а точки были очень близко друг к другу, это все равно могло привести к слишком большому масштабированию карты.
Вот способ сначала проверить, находятся ли точки на определенном расстоянии друг от друга, а затем, если они меньше этого минимального расстояния, увеличьте границы на это минимальное расстояние:
Надеюсь, это кому-то поможет!
источник
Это дает вам прямой контроль над максимально допустимым приближением границ.
источник
Что касается меня, ребята, я решил это, создав событие простоя после fitBounds. Работает отлично. Думаю, это одно из самых чистых решений здесь
источник
Я решил с помощью этого фрагмента, поскольку Google Maps V3 управляется событиями:
вы можете указать API, чтобы он вернул масштабирование до нужного значения при срабатывании события zoom_changed :
Я использовал intial, чтобы карта не масштабировалась слишком сильно при загрузке, когда в конечном итоге fitBounds перморфировался, без него любое событие масштабирования более 11 было бы невозможно для пользователя.
источник
После вызова
fitBounds()
метода попробуйте снова настроить уровень масштабирования. Это приведет к тому, что карта будет на этом уровне масштабирования, но центрирована в нужном месте.источник
У меня есть принцип, основанный на ограничении максимального увеличения при подборе границ. У меня работает (проверено на Win 7 - IE 9, FF 13, Chrome 19):
источник
И .. вот еще один.
Та же идея, что и MRT и Ryan, но
(*) Примечание: если поле уже достаточно велико, то добавление этих двух дополнительных точек не должно иметь никакого эффекта. Так что дальнейшая проверка нам не нужна.
РЕДАКТИРОВАТЬ: Я не совсем уверен, правильно ли рассчитано мое соотношение, учитывая, что у нас есть проекция Меркатора. Я могу отредактировать это заново ..
источник
Здесь уже дан ответ Google Maps v3: Enforcing min. уровень масштабирования при использовании fitBounds, он работает так, как ожидалось :) так что теперь, если после подходящих границ масштаб меньше, скажем, 13, вы можете установить новый масштаб, который вы предпочитаете
источник
Вот мое решение, которое также работает, когда два маркера находятся очень близко. Эффективный максимальный уровень масштабирования одинаков в обеих ситуациях. Таким образом, мы не уменьшаем масштаб без необходимости, когда имеется более одного маркера.
Эффект, опять же, обеспечивает максимальное масштабирование без использования параметра maxZoom, что, вероятно, имеет нежелательный эффект, заключающийся в невозможности для пользователя увеличить масштаб, превышающий уровень maxZoom, с помощью элемента управления масштабированием.
Я заранее рассчитал maxLat, minLat, maxLng и minLng ...
источник