今後も使うことがありそうなので、備忘録としてまとめ。
タイトル通り、指定した位置情報の緯度経度から近い順にデータをソートして取得する方法です。
なお当然ですが、緯度経度の項目がテーブルに存在している必要があります。
今回参考にさせていただいた記事はこちらから。
[MySQL]指定した緯度経度を中心に指定半径内のスポットデータを近い順に取得する(geometry型不使用編)
https://qiita.com/yangci/items/dffaacf424ebeb1dd643
実行する SQL 文はこんな感じです。
SELECT spot_name, X(spot_latlng) as lat, Y(spot_latlng) as lng, ( 6371 * acos( cos(radians([中心座標の緯度])) * cos(radians(X(report_latlng))) * cos(radians(Y(report_latlng)) - radians([中心座標の経度])) + sin(radians([中心座標の緯度])) * sin(radians(X(report_latlng))) ) ) as distance FROM spots ORDER BY distance LIMIT 10
ポイントは 5~13 行目で、ここで指定した緯度経度からの距離を計算しています。
取得したデータの項目名は distance
にしています。
あとは、この項目で昇順に並び替えれば、距離が近い順にデータを取得することができます。
なお、spot_latlng
というカラムは、Geometry 型
で想定していますので、ここから緯度経度を取得する場合は、X(spot_latlng)
と Y(spot_latlng)
とする必要があります。
また、それぞれの項目名は lat と lng に変更しましたが、変える必要がなければそのままでも問題はありません。
そして、最初の 6371
という値を 3959
に変更すれば、距離の単位をマイルで取得することもできます。
サンプルでは、キロメートルで取得しています。
こちらはお好みで変更してください。
以上、MySQL で指定した位置情報の緯度経度から近い順にデータを取得する方法でした。
ご参考になれば幸いです。