我想显示以用户所在位置为中心的Google地图。我愿意使用gmaps4rails
和geokit-rails
宝石,因为我猜这些是最好的。
到目前为止我所做的是地图初始化:
<div style='width: 800px;'>
<div id="map" style='width: 800px; height: 400px;'></div>
</div>
<script>
$(document).ready(function(){
handler = Gmaps.build('Google');
handler.buildMap({ provider: {}, internal: {id: 'map'}}, function(){
markers = handler.addMarkers([
{
"lat": 0,
"lng": 0,
"picture": {
"url": "https://addons.cdn.mozilla.net/img/uploads/addon_icons/13/13028-64.png",
"width": 36,
"height": 36
},
"infowindow": "hello!"
}
]);
handler.bounds.extendWith(markers);
handler.fitMapToBounds();
});
});
</script>
工作正常。现在的问题是根据用户IP获得纬度和纵向。这就是我想要的,但我没有得到任何结果。在控制器中我尝试使用geokit gem获取位置,但它失败了:
def view
@location = IpGeocoder.geocode('181.169.135.95') #I know here I should use `request.remote_ip`, but as I am on localhost I can't
end
我是从geokit github得到的,但它无效。
您可以使用地理编码器随时获取IP的位置 如下例所示:
location = IpGeocoder.geocode(&#39; 12.215.42.19&#39;)
其中Location是包含纬度,经度,城市,州和国家/地区代码的GeoLoc实例。此外,成功的价值也是如此。
我收到以下错误:uninitialized constant WineryController::IpGeocoder
。任何人都可以解释一下这意味着什么,以及如何继续?我怀疑这可能是非常愚蠢的事情,但我仍然是铁杆的新手。
答案 0 :(得分:0)
尝试这样的事情:
<强> application_controller.rb 强>
class ApplicationController < ActionController::Base
# Auto-geocode the user's ip address and store in the session.
geocode_ip_address
def geokit
@location = session[:geo_location] # @location is a GeoLoc instance.
end
end
然后在您的视图中,您可以通过访问哈希值来显示IP地址:
<%= [@location['lat'],@location['lng']] %>
这里的关键教训是Ruby会话是一种哈希数据类型。因此,必须通过调用散列键来检索散列值,例如@location['lat']
和@location['lng']
。