素敵なサムシングを独断と偏見で一方的に紹介するブログ(´・ω・`)

IT

投稿日: 2019年9月2日
最終更新日:

【位置情報】MySQLのgeometry型を使って緯度経度の2点間距離をkmで計算・算出する方法【ST_GEOMFROMTEXT】

【最新機種】GoPro hero11 Black

最新機種でVlogの思い出を撮影しよう!

ペヤング ソースやきそば 120g×18個

created by Rinker
ペヤング
¥3,279 (2024/12/03 17:37:26時点 Amazon調べ-詳細)

とりあえず保存食として買っておけば間違いなし!

レッドブル エナジードリンク 250ml×24本

created by Rinker
Red Bull(レッドブル)
¥4,000 (2024/12/03 17:52:44時点 Amazon調べ-詳細)

翼を授けよう!

モンスターエナジー 355ml×24本 [エナジードリンク]

created by Rinker
モンスター
¥4,725 (2024/12/03 17:52:45時点 Amazon調べ-詳細)

脳を活性化させるにはこれ!

BANDAI SPIRITS ULTIMAGEAR 遊戯王 千年パズル 1/1スケール

created by Rinker
BANDAI SPIRITS(バンダイ スピリッツ)
¥9,798 (2024/12/03 17:32:07時点 Amazon調べ-詳細)

もう一人の僕を呼び覚ませ!!

MOFT X 【新型 ミニマム版】 iPhone対応 スマホスタンド

created by Rinker
MOFT
¥2,304 (2024/12/03 17:37:27時点 Amazon調べ-詳細)

Amazon一番人気のスマホスタンド!カード類も収納出来てかさ張らないのでオススメです!

サンディスク microSD 128GB

スマホからSwitchまで使える大容量MicroSDカード!

スポンサーリンク

336×280




MySQLのgeometry型を使ってみよう

double型でも実現は可能

先日、緯度経度を用いた近隣検索を実現する際に、MySQLのdouble型に緯度経度をそれぞれ保存して実現する方法をご紹介しました。

しかし、せっかく位置情報を取り扱いやすくするためのgeometry型が用意されているのであれば、せっかくなので使ってみよう!という事で、試してみようと思います。

やり方

前提

今回はMySQL5.7を使用し、前回使用した県庁所在地テーブルpointというgeometryカラムを追加し、操作を行ってみようと思います。

geomety型から取得したデータの比較のために、前回のlatitudelongitudeのカラムは残しています。

サンプルデータはこんな感じ。

GEOMFROMTEXTは非推奨

INSERTする際に、GEOMFROMTEXT('POINT(xxx yyy)')を使いように記載されているブログがあると思いますが、現在は非推奨となっており、ST_GEOMFROMTEXTを使うように警告が出ると思います。

これから新しく実装する方はST_GEOMFROMTEXTを使うようにしましょう。

SQL

geometry型から緯度経度を取得

まずはgeometry型から緯度経度をそれぞれ取得してみましょう。

取得するにはX関数とY関数を利用します。

関数名 関数名
X関数 経度
Y関数 緯度

気をつけるべきは、Xが経度(longitude)、Yが緯度(latitude)なので緯度経度という呼び方と混乱して逆にならないように気をつけましょう!

しっかりと同じ値が関数経由でも取得出来ていますね♪

2点間距離の取得

次は2点間距離を算出してみましょう。

試しに東京タワーからの距離を出してみます。

実行結果の単位が違う

ここで注意すべきは、doubule型から取得した結果の単位がkmである事に対し、GLENGTH関数の結果はである事です。

これは、地球の外周の1/360となっています。

km単位で取得する

そこで利用するのがST_Distance_Sphere関数です。

こちらを利用する事で2点間距離をメートルで簡単に算出する事が出来ます。

あとはこちらの結果を1000で割ればkmに変換する事が出来ますね。

これでdouble型から算出した距離(km)にかなり近づきましたね!

多少の差異は出ていますが、誤差の範囲と考えて良いでしょう。

終わりに

以上のように、double型を利用するよりもSQLがスッキリしました。

皆さんも、緯度経度をMySQLで管理する際はgeometry型を使ってみてはいかがでしょうか♪

336×280




336×280




CATEGORIES & TAGS

IT, , , , , , ,

blogenist

Author: blogenist

関連記事

YouTubeも見てね♪

お名前.comサイドバー