位置情報として、下記のような緯度・経度が格納されたテーブルを用意されているとします。
CREATE TABLE `geolocation` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY, `name` VARCHAR( 255 ) NOT NULL , `lat` FLOAT( 10, 6 ) NOT NULL, `lng` FLOAT( 10, 6 ) NOT NULL );
北緯35度、東経139度からの距離(km単位)は、次のSQLで取得できます。
SELECT id, ( 6371 * acos( cos( radians(35) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(139) ) + sin( radians(35) ) * sin( radians( lat ) ) ) ) AS distance FROM geolocation;
※地球を半径6,371kmの完全な球に近似した計算になります。
参考
http://code.google.com/intl/ja/apis/maps/articles/phpsqlsearch.html
数学的説明
http://en.wikipedia.org/wiki/Haversine_formula
mysqlの空間情報(spatial)機能を利用する方法
http://d.hatena.ne.jp/IT7C/20100723/1279835242
- *6371の位置が正しく無かったです。これだと acosの中に入ってしまい、エラーになりましたよ — 斉藤 {2012-07-20 (金) 19:17:02}
- ご指摘ありがとうございます。*6371はacosの外が正しいので、修正しました。 — 管理者 {2012-07-23 (月) 18:24:40}
- 参考になりました。ありがとう! — 六太 {2015-02-15 (日) 13:42:53}