緯度と経度を提供して、近くの場所を取得することは可能ですか?
たとえば、提供された緯度の周りの50 kmの範囲内の場所が必要な場合、それを達成するにはどうすればよいですか?
アルゴリズム/式はありますか?
OpenStreetMapジオロケーションを使用しています
ありがとうございました。
緯度と経度を提供して、近くの場所を取得することは可能ですか?
たとえば、提供された緯度の周りの50 kmの範囲内の場所が必要な場合、それを達成するにはどうすればよいですか?
アルゴリズム/式はありますか?
OpenStreetMapジオロケーションを使用しています
ありがとうございました。
次の式を使用して、2つの指定された座標間の距離を計算できます:(lat1、lon1)および(lat2、lon2)
dist = arccos(sin(lat1) · sin(lat2) + cos(lat1) · cos(lat2) · cos(lon1 - lon2)) · R
ここで、これらすべての座標をデータベースに保存したとすると、クエリを実行して、範囲から50km以内にあるすべての場所を見つけることができます。
SELECT * FROM Places WHERE acos(sin(1.3963) * sin(Lat) + cos(1.3963) * cos(Lat) * cos(Lon - (-0.6981))) * 6371 <= 50;
Javascriptでこれを行うことも可能です。いくつかの数学関数を使用し、距離をチェックするためにco-oridinateを格納する配列を反復処理する必要があります。
この式を使用して、lat/lngに基づいて2点間の距離を見つけることができると思います。その後、目的に使用できます。
var kmBetween = function(a, b){
var e = Math, ra = e.PI/180;
var b = b.lat * ra, c = a.lat * ra, d = b - c;
var g = b.lng * ra - a.lng * ra;
var f = 2 * e.asin(e.sqrt(e.pow(e.sin(d/2), 2) + e.cos(b) * e.cos(c) * e.pow(e.sin(g/2), 2)));
return f * 6378.137;
}
var distance = kmBetween({
lat: 45.5,
lng: 33.4
},
{
lat: 44.3,
lng: 32.4
});