geocoder DB - ある場所から一定距離の範囲内の緯度経度をもつレコードを抽出


位置情報を使うようなサービスで、ある緯度経度を中心として、その場所から一定距離の範囲内の緯度経度をもつレコードを抽出したいといったユースケースがあると思います。
そんな時にもGem『alexreisner/geocoder』がめっちゃ便利だったので共有です。

アルバイトを10秒で探せるiPhone/Androidアプリ Short.Works」のアルバイト情報の抽出でも大活躍しています!


😼 前置き

alexreisner/geocoder』の基本的な使い方は、拙著『geocoder 地名から緯度経度に変換 or 緯度経度から住所変換が簡単にできるgem - 酒と泪とRubyとRailsと
に書いていますので、もしご興味を持っていただけるようならご一読ください^^

🐯 一定距離の範囲内のレコードを抽出するコード

ある緯度経度を中心として、その場所から一定距離の範囲内の緯度経度をもつレコードを抽出するコードです。

class Venue < ActiveRecord::Base
reverse_geocoded_by :latitude, :longitude
class << self
def within_box(distance, latitude, longitude)
distance = distance # 単位はマイル
center_point = [latitude, longitude] # 緯度経度
box = Geocoder::Calculations.bounding_box(center_point, distance)
self.within_bounding_box(box)
end
end
end

あとはコントローラなどでVenue.within_box(distance, latitude, longitude)と呼び出してもらえれば、与えられた緯度経度から一定の距離の範囲内にあるレコードをよしなに抽出してきてくれます。

ちなみに正確にはmin_radiusといったオプションでより正確に範囲を指定できるようになるっぽいです!

🏀 お願い

GitHubの説明を斜め読みしただけですので、もし間違ってそうならぜひツッコミお願いします!

📚 おすすめの書籍

🖥 サーバについて

このブログでは「Cloud Garage」さんのDev Assist Program(開発者向けインスタンス無償提供制度)でお借りしたサーバで技術検証しています。 Dev Assist Programは、開発者や開発コミュニティ、スタートアップ企業の方が1GBメモリのインスタンス3台を1年間無料で借りれる心強い制度です!(有償でも1,480円/月と格安)