2011-04-28 22 views
8

我加入谷歌地图与apneadiving /谷歌 - 地图换铁轨(感谢真棒宝石)谷歌地图,Ruby on Rails的,缩放级别的一个标志

我发现一个轻微的毛刺的支持,然而,很可能是我的错。

auto_zoom在存在多个标记时效果很好。但是,当只有一个标记时,它会放大到最大程度,这不是很漂亮。

只有当auto_zoom为false时,“缩放”才会起作用,所以这不是我想要的。

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

有没有办法解决这个问题?我的解释是否合理?这是Google Maps API的限制吗?

谢谢...

回答

17

此行为是由于谷歌地图API的auto_zoom内置功能。

一个解决的情况是将其设置为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> 
+0

真棒。谢谢! – 2011-04-28 20:26:18

+0

你把这个回调放在哪里?在视图中?如果是的话,究竟在哪里? – pruett 2011-07-22 18:12:24

+0

@pruett:我稍微改变了自0.10.0以来的api,请看这里的一个例子:http://stackoverflow.com/questions/6741452/how-to-get-the-id-field-and-send-to-the -view – apneadiving 2011-07-22 18:42:28

2

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

我有经纬度并储存在我的模型(在创建时间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创建,“上市”是我的模式。

+0

是的。这工作正常。但是,当我添加多个标记时,我的问题就出现了。然后你需要做上面的javascript解决方案。谢谢! – 2011-05-02 15:19:14

0

感谢帮我...

{ “auto_zoom”=>假, “缩放”=> 15, “center_latitude”=> @ listing.lat, “center_longitude”=> @ listing.lng}, “markers”=> {“data”=> markers} %>