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/
の図がイメージしやすいかなと思います。
ここで必要になる「文字列を先頭一致/完全一致で検索する」という操作はよく使われるので、高速な方式が色々あります。それを活用しやすいというのがメリットだと思います。件数が少ないならこの点にはあまり意味はなさそうで、緯度経度が文字列になる、くらいのメリットかも。というわけで、こちらは参考まで、という感じです。
位置情報大好き人が早口でお送りしました!