我正在尝试获取两个不同值的纬度和经度值。这些是在我的里程模型中的start
和end
属性中设置的。
geocoded_by :end, :latitude => :latitude, :longitude => :longitude
geocoded_by :start, :latitude => :start_lat, :longitude => :start_lon
我的里程模型中有以下属性:
start
start_lat
start_long
end
latitude
longitude
根据里程模型顶部的geocoded_by
行,仅对其中一个属性进行地理编码。有没有办法让地理编码器gem处理这两个属性?
答案 0 :(得分:5)
简短的回答是否定的。
但是不难推出自己的解决方案。基本上geocoded_by:设置一种简单的方法,使用少量选项(lat / long列名等)从回调对地址lat / long进行地理编码。
有一种用于查找地址的lat / lng的实用方法:
Geocoder.coordinates(the_start_address)
=> [42.700149, -74.922767]
所以你可以使用geocoded_by:方法来处理你的例子中的结束lat / long,然后做类似的事情
before_save :geocode_the_start_address
def geocode_the_start_address
coords = Geocoder.coordinates(self.start)
self.start_lat = coords[0]
self.start_long = coords[1]
end
老实说,我自己更加一致地命名--start_address,end_address,start_lat,start_long等。我还使用自定义方法对起始地址和结束地址进行地理编码,而不是geocoded_by,因此代码更加一致。
答案 1 :(得分:1)
我同意约翰保罗,但我会在after_save
中这样做 - 所以,基本上,你的Milage
模型会在创建的起始地址上执行地理编码,然后在创建之后(例如,已在起始地址上执行了地理编码,并且您具有有效的起始地址),使用单独的回调对结束地址执行地理编码。