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の説明を斜め読みしただけですので、もし間違ってそうならぜひツッコミお願いします!

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍