-2

緯度と経度を提供して、近くの場所を取得することは可能ですか?

たとえば、提供された緯度の周りの50 kmの範囲内の場所が必要な場合、それを達成するにはどうすればよいですか?

アルゴリズム/式はありますか?

OpenStreetMapジオロケーションを使用しています

ありがとうございました。

4

2 に答える 2

2

次の式を使用して、2つの指定された座標間の距離を計算できます:(lat1、lon1)および(lat2、lon2)

dist = arccos(sin(lat1) · sin(lat2) + cos(lat1) · cos(lat2) · cos(lon1 - lon2)) · R

参照:Great-circle_distance

ここで、これらすべての座標をデータベースに保存したとすると、クエリを実行して、範囲から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を格納する配列を反復処理する必要があります。

于 2012-12-12T12:55:20.637 に答える
1

この式を使用して、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
                        });
于 2012-12-12T12:59:53.093 に答える