更新日: 2016-11-15 (火) 20:51:48 (367d)

: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

選択肢 投票
このページの情報は役に立った 7  
このページの情報は役に立たなかった 0  
どちらでもない 0  
このページが参照された数
Total: 5851, 今日: 3, 昨日: 0

でじうぃきは神奈川県横浜市の位置情報システム・スマホアプリ開発の株式会社オンラインコンサルタントが運営しています。
投稿
トップ   このページを編集する 再編集不可にする 差分 バックアップ 添付 複製 名前変更 リロード   新しいページを作る 一覧 検索する 最新の更新   ヘルプ   最終更新のRSS
Last-modified: 2016-11-15 (火) 20:51:48 (367d)