2

AlexReisnerのRubyGeocoderを使用し、.nearメソッドを見つけると非常に便利です。私たちが持っている1つの質問は、原点から距離xと距離yの間のオブジェクトを検索できるように設定する方法です(現時点では、.nearメソッドは見た目の最大距離のみを設定します): ドキュメントはこちら

私たちは次のようなものを探しています:

places = Place.near("Washington", min_distance, max_distance).reorder("score")

または、.reorder(別の「スコア」フィールドでソートするために使用している)を使用せずに同じ効果が得られるようにクエリを変更する方法

私たちが望む最終結果は、原点からxマイルからyマイルの間にあるスコア順に並べられた場所を持つ機能です。

4

2 に答える 2

1

Geocoder によって生成されたクエリにはdistance列が含まれているため、最小距離の条件を追加するだけで済みます。次に例を示します。

Venue.near("Washington", max_distance).having("distance >= ?", min_distance)

HAVINGではなくを使用する必要があることに注意してくださいWHERE

于 2013-04-03T16:53:16.487 に答える
1

私の知る限り、ネイティブに実装されていません。

ActiveRecord を使用している場合は、Geocoder のプライベート クラス メソッド(105 行目から 147 行目までを参照) を使用して、多かれ少なかれアルゴリズムを使用して独自の「リバース」メソッドをロールバックすることができます。

  • 最小距離クエリの境界ボックスを計算するGeocoder::Calculations#bounding_box
  • バウンディング ボックス内のすべてのレコードを検索する SQL を構築し、かつ#distance_sql(lat,lon,options)>= min_distanceを使用する

このロジックをwhereスコープ内に詰め込み、 にチェーンするとnear、出来上がりです! 怠けていると感じたら、メソッド全体をコピーして貼り付け、<=述語を変更することもできます。

余談ですが、ジオコーダーの github で機能リクエストを提出することをお勧めします。実装が迅速になると思います。

于 2013-01-31T13:34:36.893 に答える