1

我正在尝试获取两个不同值的纬度和经度值。这些是在属性startend我的里程模型中设置的。

geocoded_by :end, :latitude  => :latitude, :longitude => :longitude
geocoded_by :start, :latitude  => :start_lat, :longitude => :start_lon

我的 Mileage 模型具有以下属性:

start
start_lat
start_long
end
latitude
longitude

根据geocoded_byMileage 模型顶部的行,仅对其中一个属性进行地理编码。有没有办法让 geocoder gem处理这两个属性?

4

2 回答 2

5

最简洁的答案是不。

但推出自己的解决方案并不难。基本上 geocoded_by:设置了一种简单的方法来对来自回调的地址 lat/long 进行地理编码,其中包含一些选项(lat/long 列名等)。

有一种实用方法可以查找地址的 lat/lng:

Geocoder.coordinates(the_start_address)
     => [42.700149, -74.922767]

所以你可以使用 geocoded_by: 方法来处理你的例子中的结束纬度/经度,然后做类似的事情

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,这样代码就更一致了。

于 2013-06-15T20:48:13.047 回答
1

我同意 John Paul 的观点,但我会这样做after_save- 所以,基本上,让您的Milage模型在创建时对起始地址执行地理编码,然后在创建完成后(例如,在起始地址上执行地理编码,您有一个有效的起始地址),使用单独的回调对结束地址执行地理编码。

于 2013-06-19T15:37:44.433 回答