Карты Google, Ruby on Rails, Уровень масштабирования с одним маркером - PullRequest
8 голосов
/ 28 апреля 2011

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

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

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

«zoom» будет работать только тогда, когда auto_zoom имеет значение false, так что это не то, что я хочу.

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

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

Спасибо ...

Ответы [ 3 ]

17 голосов
/ 28 апреля 2011

Это происходит из-за встроенной функции auto_zoom в API карт Google.

Чтобы обойти это, нужно установить значение 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>
2 голосов
/ 30 апреля 2011

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

В моей модели хранятся значения lat и lng (закодированные geokit во время создания), поэтому, на мой взгляд, было следующее:

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

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

0 голосов
/ 27 июня 2013

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

{"auto_zoom" => false, "zoom" => 15, "center_latitude" => @isting.lat, "center_longitude" => @ list.lng}, "markers" => {"data" => @markers} }) %>
...