Поиск районов с помощью геокодера

Я использую гем Geocoder для своего проекта 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, но получил ошибки.


person Carl Edwards    schedule 30.10.2014    source источник


Ответы (1)


В США не так уж много районов (см. здесь).

Как вы, наверное, знаете, Бруклин, Нью-Йорк находится в Нью-Йорке, Нью-Йорке, поэтому тот факт, что городские данные соответствуют Нью-Йорку, является точным на 100%.

Тем не менее, я вижу The Bronx в примере вызова API карт Google здесь:

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"}

В этом файле видно, что они в настоящее время не поддерживает ничего, кроме этих параметров. Может быть, запрос на вытягивание подходит, поскольку эта функция была бы полезна и для меня.

person Anthony    schedule 30.10.2014
comment
Спасибо за внимание. Я на самом деле играю с этими параметрами прямо сейчас, но, как вы, вероятно, знаете с первого взгляда, все становится очень затянутым. Как бы вы порекомендовали получить район и позволить Geocoder справиться с остальным (с точки зрения возврата правильного города, штата, страны) на основе метода geocoded_by, который у меня есть сейчас? Я даже не уверен, стоит ли мне создавать совершенно новый атрибут для районов, но, как вы сказали, для начала их не так много. - person Carl Edwards; 30.10.2014
comment
Да, вам нужно будет пропатчить Geocoder. Я отправил вопрос на github, чтобы узнать, планируют ли они его поддерживать. - person Anthony; 30.10.2014
comment
1+ для запроса функции на GitHub. Его очень ценят. - person Carl Edwards; 30.10.2014
comment
Запрос функции был отклонен @CarlEdwards. На вашем месте я бы получил список почтовых индексов интересующего вас района, и если ваш obj.zipcode содержит один из этих почтовых индексов, обновите модель, включив в нее район. Есть смысл? - person Anthony; 30.10.2014
comment
Что-то вроде. Можем ли мы продолжить это в чате? - person Carl Edwards; 30.10.2014