0

いくつかのジオポイントが互いに 5 メートル以内にあるかどうかを判断する Python 関数を作成しようとしています。13.09073, -86.3560933 と 13.09237, -86.3576067 のような座標がいくつかあります。Haversine 関数を使用してみましたが、正しい値が得られるかどうかわかりません。

これまでの機能は次のとおりです。

from math import sin, cos, pow, atan2, sqrt


def haversine(pos1, pos2):
    lat1 = float(pos1['lat'])
    long1 = float(pos1['long'])
    lat2 = float(pos2['lat'])
    long2 = float(pos2['long'])
    d_lat = (lat2 - lat1)
    d_long = (long2 - long1)

    a = pow(
        sin(d_lat / 2), 2) + cos(lat1) * cos(lat2) * pow(sin(d_long / 2), 2)
    c = 2 * atan2(sqrt(a), sqrt(1 - a))
    km = 6367 * c
    print 'km %f' % km
    print 'mts %f' % (km * 1000)


print haversine(
    {'lat': 0.0, 'long': 0.0}, {'lat': 0.0, 'long': 0.0000007852992})

その奇妙な数字は、「5メートル」の距離であるはずです. 私の形式はすでにラジアンになっていると思うので、degree_to_rad の変換機能を削除します。

4

1 に答える 1

2

5 メートル離れたポイントの緯度/経度の値の違いは、球体の表面上の位置に基づいて変化するため、「座標で 5 メートル」をチェックすることはできません。

既存のスクリプトの値に対して出力をテストできます。lats と lons がラジアンで格納されることはあまり一般的ではありません。私は間違いなくそれを確認します。

計算に問題はないようですが、おそらく次のことを意味します。

return km

haversine関数の最後で、print haversine(...)actual が何か意味のあることを行うようにします。

于 2013-11-10T17:19:19.843 に答える