2014-10-30 1 views
1

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

В США очень мало городов (см. here).

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

То есть, я вижу The Bronx в образце вызова я сделал с помощью Google Maps API здесь:

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, что они в настоящее время не поддерживает ничего, кроме эти параметры. Возможно, запрос на растяжение подходит, так как эта функция будет хорошо для меня.

+0

Спасибо за голову. Я на самом деле сейчас играю с этими параметрами, но, как вы, наверное, знаете, с первого взгляда, все становится очень длинным. Как бы вы порекомендовали добраться до района и позволить Geocoder обрабатывать остальные (с точки зрения возврата правильного города, штата, страны) на основе метода «geocoded_by», который у меня есть сейчас? Я даже не уверен, должен ли я создать совершенно новый атрибут для городских кварталов, но, как вы сказали, на самом деле их не так много. –

+0

Ya, вам нужно будет исправить геокодер. Я представил вопрос о github, чтобы убедиться, что это то, что они планируют поддерживать. – Anthony

+0

1+ для запроса функции на GitHub. Его очень ценят. –