Rails Geocoder 限制地区/国家
Posted
技术标签:
【中文标题】Rails Geocoder 限制地区/国家【英文标题】:Rails Geocoder restrict region/country 【发布时间】:2015-01-07 17:12:24 【问题描述】:我想限制对纬度/经度的搜索。对于特定地区(即新西兰)。
Google 提供了一些可以设置的参数来实现结果,例如:'componentsRestriction' 和 'region'。我尝试在 config/initializers/geocoder.rb 中设置相同的内容,但没有成功。这是我的代码。
Geocoder.configure(
:lookup => :google,
:timeout => 5,
:units => :km,
# version 1
:google =>
:components => :country => 'NZ',
:region => 'NZ',
,
# version 2
:components => :country => 'NZ',
:region => 'NZ',
)
这是来自 google 的文档,其中允许指定额外参数,例如用于查找的区域。 https://developers.google.com/maps/documentation/geocoding/
【问题讨论】:
您遇到了什么问题? 你有没有弄明白这件事?我有同样的问题,我不想包括该区域:在每次调用 Geocoder.search 时。 【参考方案1】:这有点晚了,但我正在研究同样的问题。查看了配置中的初始化程序选项(见下文),我相信您无法在初始化程序中设置区域。可能是因为有些 API 支持它而有些不支持。
https://github.com/alexreisner/geocoder/blob/master/lib/geocoder/configuration.rb
我将地理编码器与 Google 地图一起使用,并找到了几种方法。在我的示例中,我正在寻找 Kenilworth。这是英国的一个地方,但是在没有地区的情况下进行查询时,我在新泽西州得到了凯尼尔沃思。我相信这是因为谷歌有美国地区的偏见,这是我所预料的。我正在使用 geocoder's near 根据用户输入的标准在我的场地模型中查找场地。在示例中,我假设我的 near 参数有 1 英里的距离。
方法一
将区域传递给搜索或坐标方法:
Geocoder.search("Kenilworth", :params => :region => "gb")
Geocoder.coordinates("Kenilworth", :params => :region => "gb" )
搜索返回一个数组,该数组将包含城镇所需的纬度\经度。坐标将只返回纬度和经度坐标,对于我的需要,这是最好的选择。
要使用 near 方法,您可以获取提取的坐标并在 near 中使用它们:
Venue.near(Geocoder.coordinates("Kenilworth", :params => :region => "gb" ), 1 )
方法二
将国家连接到指定的位置参数中:
Venue.near( params["location"] << ", United Kingdom" , 1)
制作:
Venue.near("Kenilworth, United Kingdom", 1 )
我相信这两种方法都只会对谷歌使用 1 次 API 调用。但我目前无法验证,因为我无法登录谷歌开发者控制台查看 API 使用情况。
我已经读到该地区可能会受到影响,但我在测试中使用它没有任何问题。
希望这将帮助其他人解决同样的问题。
【讨论】:
以上是关于Rails Geocoder 限制地区/国家的主要内容,如果未能解决你的问题,请参考以下文章
使用 htaccess 和 GeoIP 阻止特殊地址或 URL 的国家/地区