SQLで緯度・経度から2点間の距離を算出する

MySQL

位置情報として、下記のような緯度・経度が格納されたテーブルを用意されているとします。

 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}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です