8

我正在通过 apneadiving / Google-Maps-for-Rails 添加谷歌地图支持(感谢真棒宝石)

然而,我发现了一个小故障,这很可能是我的错。

当有多个标记时,auto_zoom 效果很好。但是,当只有一个标记时,它会放大到不漂亮的最大级别。

“缩放”仅在 auto_zoom 为假时才有效,所以这不是我想要的。

因此,您可以使用“maxZoom”,但现在用户无法手动放大超出该点,这不是我想要的。

有没有解决的办法?我的解释有道理吗?这是 Google Maps API 的限制吗?

谢谢...

4

3 回答 3

17

此行为是由于auto_zoomgoogle maps api 中的内置函数造成的。

解决此问题的一种方法是falsegmaps方法中将其设置为:

<%= 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>
于 2011-04-28T19:51:14.523 回答
2

我以稍微不同的方式实现了这一点,因为我知道我的地图上只会有一个标记。我对 Rails 比较陌生,但是在您看来,这种方法比使用 JS 感觉更“干净”。

我的模型中存储了 lat 和 lng(在创建时由 geokit 编码),我认为以下内容也是如此:

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

@markers 是我由 blah.to_gmaps4rails 创建的 JSON,“listing”是我的模型。

于 2011-04-30T13:46:27.157 回答
0

谢谢这对我有帮助...

{"auto_zoom" => false, "zoom" => 15, "center_latitude" => @listing.lat, "center_longitude" => @listing.lng }, "markers" => {"data" => @markers } }) %>
于 2013-06-27T04:19:11.770 回答