Rails Geocoder限制地区/国家

时间:2014-11-11 07:52:13

标签: ruby-on-rails ruby restriction country

我想限制搜索纬度/长度。对于特定地区(即新西兰)。

Google提供了一些可以设置以实现结果的参数,例如:' componentsRestriction'和'地区'。我试图在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/

1 个答案:

答案 0 :(得分:1)

有点迟到,但我看的是同一个问题。查看配置中的初始化程序选项(见下文)后,我相信您无法在初始化程序中设置区域。可能是因为某些API支持它而有些API不支持。

https://github.com/alexreisner/geocoder/blob/master/lib/geocoder/configuration.rb

我正在使用Google地图的地理编码器,并找到了几种方法。在我的例子中,我正在寻找凯尼尔沃思。它是英国的一个地方,但是在没有地区的情况下查询时,我会在新泽西州找到凯尼尔沃思。我相信这是因为谷歌有美国的区域偏见,我希望如此。我正在使用地理编码器附近根据用户输入的标准在我的场地模型中找到场地。我假设示例中的near参数距离为1英里。

方法1

将区域传递给搜索或坐标方法:

Geocoder.search("Kenilworth", :params => {:region => "gb"})
Geocoder.coordinates("Kenilworth", :params => {:region => "gb"} )

搜索返回一个数组,该数组将具有城镇所需的lat \ long。坐标将返回纬度和经度坐标,根据我的需要,这是最佳选择。

要使用near方法,您可以获取提取的坐标并在附近使用它们:

Venue.near(Geocoder.coordinates("Kenilworth", :params => {:region => "gb"} ), 1 )

方法2

将国家/地区连接到指定的位置参数:

 Venue.near( params["location"] << ", United Kingdom" , 1)

产:

Venue.near("Kenilworth, United Kingdom", 1 )

我相信这两种方法只会对谷歌使用1次API调用。目前我无法验证,因为我无法登录Google开发者控制台查看API使用情况。

我已经读过这个地区可能有点受伤但我在测试中使用它并没有任何问题。

希望这可以帮助其他人解决同样的问题。