Google Maps, Ruby on Rails, уровень масштабирования с одним маркером

Я добавляю поддержку карт Google с помощью apneadiving / Google-Maps-for-Rails (спасибо, офигенный камень)

Однако я нахожу один небольшой сбой, который, скорее всего, является моей ошибкой.

auto_zoom отлично работает, когда маркеров несколько. Однако, когда есть только один маркер, он увеличивается до максимального уровня, что некрасиво.

«масштабирование» будет работать только тогда, когда auto_zoom имеет значение false, так что это не то, что мне нужно.

Таким образом, вы можете использовать «maxZoom», но теперь пользователи не могут увеличивать масштаб вручную за пределы этой точки, а это не то, что мне нужно.

Это можно обойти? Имеет ли смысл мое объяснение? Является ли это ограничением API Карт Google?

Спасибо...


person Enric Ribas    schedule 28.04.2011    source источник


Ответы (3)


Такое поведение связано со встроенной функцией auto_zoom в API Google Maps.

Один из способов обойти это — установить для него значение false в методе gmaps:

<%= gmaps({
       "map_options" => { "auto_zoom" => false},
       "markers"     => { "data" => @json }
      })
%>

А затем используйте gmaps4rails_callback в соответствии с вашими потребностями (убедитесь, что у вас есть версия не ниже 0.7.9)

<script type="text/javascript" charset="utf-8">
  function gmaps4rails_callback() {
    if (Gmaps4Rails.markers.length == 1) {
     //only one marker, choose the zoom level you expect
     Gmaps4Rails.map.setZoom(2);
    }
    else{
     //more than one marker, let's auto_zoom
     Gmaps4Rails.map_options.auto_zoom = true;
     Gmaps4Rails.adjust_map_to_bounds();
    }
  }
</script>
person apneadiving    schedule 28.04.2011
comment
где вы помещаете этот обратный вызов? в представлении? если да, то где именно? - person pruett; 22.07.2011
comment
@pruett: я немного изменил API с версии 0.10.0, см. пример здесь: stackoverflow.com/questions/6741452/ - person apneadiving; 22.07.2011
comment
@apneadiving: хм... не уверен, что понимаю, как это реализовать. Я использую 0.10.2, но не могу увеличить масштаб до максимального. у меня есть только один маркер на страницу, и я пытаюсь использовать простое решение, подобное приведенному ниже, но оно не работает. Есть предположения? - person pruett; 22.07.2011
comment
@apneadiving: я пытаюсь это: <%= gmaps({ "map_options" => {"auto_adjust" => false, "auto_zoom" => false, "zoom" => 15 }, "markers" => {"data" => @json } }) %> похоже, это не работает для меня. Я пытаюсь просто уменьшить масштаб до максимального значения по умолчанию. - person pruett; 22.07.2011
comment
@pruett: пожалуйста, задайте новый вопрос: это может быть полезно кому-то еще - person apneadiving; 22.07.2011
comment
@apneadiving мой плохой :) я разместил это здесь: [stackoverflow.com/ вопросов/6795200/adjust-zoom-gmaps4rails] спасибо за помощь! - person pruett; 22.07.2011

Я добился этого немного другим способом, так как знаю, что у меня всегда будет только один маркер на моей карте. Я относительно новичок в рельсах, но этот метод кажется вам немного «чище», чем использование JS.

У меня есть широта и долгота, хранящиеся в моей модели (закодированные геокитом во время создания), поэтому, на мой взгляд, я сделал следующее:

<%= gmaps({
       "map_options" => {"auto_zoom" => false, "zoom" => 15, "center_latitude" => @listing.lat, "center_longitude" => @listing.lng },
       "markers"     => {"data" => @markers }
      })
%>

@markers — это мой JSON, созданный blah.to_gmaps4rails, а «листинг» — моя модель.

person DaveStephens    schedule 30.04.2011
comment
да. Это работает правильно. Но моя проблема возникла, когда я добавил более одного маркера. Затем вам нужно выполнить решение javascript выше. Спасибо! - person Enric Ribas; 02.05.2011

спасибо это помогло мне...

{"auto_zoom" => false, "zoom" => 15, "center_latitude" => @listing.lat, "center_longitude" => @listing.lng }, "markers" => {"data" => @markers } }) %>
person jimmi    schedule 27.06.2013