2015-01-07 1 views
3

Я искал высоко и низко для решения этого без везения, поэтому я сейчас здесь разместить ...геокодирования несколько адресов

Я использую Геокодировать камень на моем RoR приложении.

Это подход к геокодируете несколько адресов на одной и той же модели в документации, и это не работает, как это геокодированием только последний метод:

geocoded_by :start_address, latitude: :start_latitude, longitude: :start_longitude 
geocoded_by :end_address, latitude: :end_latitude, longitude: :end_longitude 

Я пытался написать пользовательский метод для решения это:

geocoded_by :geocode_user_addresses 
after_validation :geocode 

def geocode_user_addresses 
home_address_joined = [home_address, city].compact.join(', ') 
work_address_joined = [work_address, city].compact.join(', ') 
home_coordinates = Geocoder.search(home_address_joined) 
work_coordinates = Geocoder.search(work_address_joined) 
self.home_latitude = home_coordinates.latitude 
self.home_longitude = home_coordinates.longitude 
self.work_latitude = work_coordinates.latitude 
self.work_longitude = work_coordinates.longitude 
end 

это дает мне эту ошибку, когда я пытаюсь геокодирования адреса:

undefined method `latitude' 

Любые идеи о том, с чего начать? Аналогичная проблема отсутствует, но решение не получило общего доступа: Rails geocoder gem issues

+0

Checkout решение, предложенное в [https://stackoverflow.com/questions/29655702/geocoding-multiple-addresses -in-one-model] (https://stackoverflow.com/questions/29655702/geocoding-multiple-addresses-in-one-model) Это работает как магия –

ответ

2

Geocoder.search возвращает массив данных местоположения.

В образце при условии, вы можете получить широту и долготу с:

self.home_latitude = home_coordinates[0].geometry["location"]["lat"] self.home_longitude = home_coordinates[0].geometry["location"]["lng"]