用地理编码器寻找自治市镇

时间:2014-10-30 01:55:02

标签: ruby-on-rails ruby methods geocoding rails-geocoder

我正在使用Geocoder gem作为我的rails项目,我似乎遇到了一个小问题。我有一个具有address属性的用户模型。该属性存储信息如下:

geocoded_by :address do |obj,results|
  if geo = results.first
    obj.state = geo.state
    obj.country = geo.country
    obj.city = geo.city
  end
end

这很好用,但如果我尝试输入一个自治市镇的地址,地理编码只返回城市。例如,如果我尝试保存Brooklyn, New York,它将返回New York, New York,但如果我进入Middletown, Delaware等城镇,则显示其完整位置没有问题。我可以使用一个参数来查询自治市镇吗?我试过geo.borough但是错了。

1 个答案:

答案 0 :(得分:1)

美国的自治市镇并不多(见here)。

正如您可能知道的那样,纽约布鲁克林位于纽约纽约,因此城市数据与纽约的响应这一事实是100%准确的。

那就是说,我在这里给google地图api做的示例通话中看到了The Bronx

https://maps.googleapis.com/maps/api/geocode/json?address=610+Waring+Ave,+Bronx+NY

[2] pry(main)> HTTParty.get('https://maps.googleapis.com/maps/api/geocode/json?address=610+Waring+Ave,+Bronx+NY')

=> {"results"=>
  [{"address_components"=>
     [{"long_name"=>"610", "short_name"=>"610", "types"=>["street_number"]},
      {"long_name"=>"Waring Avenue", "short_name"=>"Waring Ave", "types"=>["route"]},
      {"long_name"=>"Bronx",
       "short_name"=>"Bronx",
       "types"=>["sublocality_level_1", "sublocality", "political"]},
      {"long_name"=>"Bronx County",
       "short_name"=>"Bronx County",
       "types"=>["administrative_area_level_2", "political"]},
      {"long_name"=>"New York",
       "short_name"=>"NY",
       "types"=>["administrative_area_level_1", "political"]},
      {"long_name"=>"United States", "short_name"=>"US", "types"=>["country", "political"]},
      {"long_name"=>"10467", "short_name"=>"10467", "types"=>["postal_code"]}],
    "formatted_address"=>"610 Waring Avenue, Bronx, NY 10467, USA",
    "geometry"=>
     {"location"=>{"lat"=>40.861204, "lng"=>-73.870415},
      "location_type"=>"ROOFTOP",
      "viewport"=>
       {"northeast"=>{"lat"=>40.8625529802915, "lng"=>-73.8690660197085},
        "southwest"=>{"lat"=>40.8598550197085, "lng"=>-73.8717639802915}}},
    "types"=>["street_address"]}],
 "status"=>"OK"}

你可以在this file中看到他们目前不支持除了那些参数之外的任何东西。也许拉出请求是有序的,因为这个功能对我也有好处。