2点間の緯度経度から距離を求めるには、日本国内限定で、しかもあまり精度が重要でなければ

https://tech.raksul.com/2020/07/31/rails_distance_calculation/

にあるような、ざっくりした計算でもよさそうです。この関数を用意すれば DB を使わなくても PHP や JavaScript でも自前で距離が求められます。

そして、どういうわけか(?)ちょうど手元に JavaScript 実装があったので貼っておきます。ご自由にお使いください。

(最寄りのスープカレー店を探すために使っているコードです)

```javascript

function distanceInKm(lat, lng, lat0, lng0) {

return (

Math.sqrt(

Math.pow((lat - lat0) * 111000, 2) + Math.pow((lng - lng0) * 91000, 2)

) / 1000

);

}

const d = distanceInKm(

35.6809591, 139.7673068, // 東京駅

35.6983223, 139.7730186, // 秋葉原駅

);

console.log(d, "km"); // 1.9961735103233893 km

```

もっと精度よく計算する近似式として、ヒュベニの公式、測地線航海算法などもあるようです。既存実装も色々あるかもしれません。

そして、ちょっとアプローチが違いますが、ジオハッシュというアイディアも面白いので紹介させてください。

ジオハッシュを使うと緯度経度を文字列で表現できて、しかも桁数で精度が決められることから、エリアを表現できます。

Wikipedia のページは

https://ja.wikipedia.org/wiki/%E3%82%B8%E3%82%AA%E3%83%8F%E3%83%83%E3%82%B7%E3%83%A5

なんですが、以下の記事

https://techblog.yahoo.co.jp/entry/20191210786752/

の図がイメージしやすいかなと思います。

ここで必要になる「文字列を先頭一致/完全一致で検索する」という操作はよく使われるので、高速な方式が色々あります。それを活用しやすいというのがメリットだと思います。件数が少ないならこの点にはあまり意味はなさそうで、緯度経度が文字列になる、くらいのメリットかも。というわけで、こちらは参考まで、という感じです。

位置情報大好き人が早口でお送りしました!

Reply to this note

Please Login to reply.

Discussion

No replies yet.