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 的国家/地区

GeoLocation - 获取国家的 ISO 代码

CLGeocoder 在其他国家/地区的返回位置

folium Choropleth 世界地图:国家/地区的默认值

如何显示/隐藏来自特定国家/地区的内容 [关闭]

基于国家/地区的Mysql排除和包含