1

2 つの異なる値の緯度と経度の値を取得しようとしています。これらは、属性startendマイレージ モデルで設定されます。

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マイレージ モデルの最上部にある行に応じて、属性の 1 つだけがジオコーディングされます。両方の属性をジオコーダgemで処理する方法はありますか?

4

2 に答える 2

5

短い答えはノーです。

しかし、独自のソリューションを展開するのは難しくありません。基本的に geocoded_by: いくつかのオプション (緯度/経度の列名など) を使用して、コールバックから緯度/経度の住所をジオコーディングする簡単な方法を設定します。

住所の緯度/経度を検索するためのユーティリティ メソッドがあります。

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

私はジョン・ポールに同意しafter_saveますが、基本的には、Milage作成時にモデルに開始アドレスでジオコーディングを実行させ、作成が行われた後に行います (たとえば、開始アドレスでジオコーディングが実行され、有効な開始アドレスがある場合)、別のコールバックを使用して終了アドレスでジオコーディングを実行します。

于 2013-06-19T15:37:44.433 に答える