【问题标题】:Finding Boroughs with Geocoder使用地理编码器查找自治市镇
【发布时间】:2014-10-30 01:55:01
【问题描述】:

我正在为我的 rails 项目使用 Geocoder gem,我似乎遇到了一个小问题。我有一个具有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,但出错了。

【问题讨论】:

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


    【解决方案1】:

    美国的自治市镇并不多(请参阅here)。

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

    也就是说,我在此处对 google maps 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 中看到,除了这些参数之外,它们目前不支持任何东西。也许拉请求是为了这个功能对我也有好处。

    【讨论】:

    • 感谢您的提醒。我现在实际上正在玩这些参数,但正如您乍一看可能知道的那样,事情变得非常冗长。根据我现在拥有的geocoded_by 方法,您会如何建议到达自治市镇并让 Geocoder 处理其余部分(在返回正确的城市、州、国家/地区方面)?我什至不确定我是否应该为自治市镇创建一个全新的属性,但正如你所说,开始时没有那么多。
    • 是的,您需要修补 Geocoder。我在 github 上提交了一个问题,看看他们是否计划支持。
    • 1+ 用于 GitHub 上的功能请求。非常感谢。
    • 功能请求被拒绝@CarlEdwards。如果我是你,我会得到一份你关心的行政区的邮政编码列表,如果你的obj.zipcode 包含其中一个邮政编码,请更新模型以包括一个行政区。有意义吗?
    • 那种。我们可以在聊天中继续吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多