Geocoder gemをチェックしてください。ActiveRecord と、PostgreSQL を含むいくつかの DB エンジンをサポートしています。
Venue
モデルがある場合は、それにジオコーディングを追加して、次のようなことを行うことができます。
nearby_places = Venue.near([lat, long], distance)
このプロジェクトのGitHubには、高度なクエリの例もあり、以下に完全に引用されています。
オブジェクトをクエリする場合 (ActiveRecord を使用している場合)、 within_bounding_box スコープを使用して、半径 (円) ではなく正方形内を調べることもできます。
distance = 20
center_point = [40.71, 100.23]
box = Geocoder::Calculations.bounding_box(center_point, distance)
Venue.within_bounding_box(box)
これにより、特に緯度/経度列のインデックスと組み合わせて使用すると、クエリのパフォーマンスが大幅に向上します。ただし、返される結果には、距離と方位の属性が含まれないことに注意してください。パフォーマンスを向上させ、距離と方位情報にアクセスしたい場合は、両方のスコープを使用してください。
Venue.near(center_point, distance).within_bounding_box(box)