我正在使用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
但是错了。
答案 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中看到他们目前不支持除了那些参数之外的任何东西。也许拉出请求是有序的,因为这个功能对我也有好处。