Geocoderで半径XXm以内の何かを探す。
setupなどは参考サイトで。
僕が使ったのは、near機能です。
ActiveRecordモデル#nearメソッドを使うと、1km以内のレコードとかを探してきてくれます。
かっこいいです。
実行
A.near('35.659, 139.703', 0.6, :units => :km).collect(&:id) #=> 0.6とすると600mになります
結果
A Load (29.3ms) SELECT as.*, 6371.0 * 2 * ASIN(SQRT(POWER(SIN((35.659 - as.latitude) * PI() / 180 / 2), 2) + COS(35.659 * PI() / 180) * COS(as.latitude * PI() / 180) * POWER(SIN((139.703 - as.longitude) * PI() / 180 / 2), 2))) AS distance, MOD(CAST((ATAN2( ((as.longitude - 139.703) / 57.2957795), ((as.latitude - 35.659) / 57.2957795)) * 57.2957795) + 360 AS decimal), 360) AS bearing FROM `as` WHERE (as.latitude BETWEEN 35.65360407036449 AND 35.66439592963551 AND as.longitude BETWEEN 139.6963588631264 AND 139.7096411368736 AND (6371.0 * 2 * ASIN(SQRT(POWER(SIN((35.659 - as.latitude) * PI() / 180 / 2), 2) + COS(35.659 * PI() / 180) * COS(as.latitude * PI() / 180) * POWER(SIN((139.703 - as.longitude) * PI() / 180 / 2), 2)))) BETWEEN 0.0 AND '0.6') ORDER BY distance ASC
なにやら超絶なSQLが発行されています。