2 つのポイント (緯度、経度) 間の距離を推定できるようにしたいと考えています。これはA *グラフ検索用であり、高速にしたいので、アンダーシュートしたい. ポイント間の距離は最大で 800 km です。
質問する
96756 次
8 に答える
43
距離が比較的小さいため、正距円筒距離近似を使用できます。この近似は、Haversine 式を使用するよりも高速です。したがって、基準点 (lat1/lon1) からテスト対象の点 (lat2/lon2) までの距離を取得するには、以下の式を使用します。重要な注意: すべての緯度/経度ポイントをラジアンに変換する必要があります。
R = 6371 // radius of the earth in km
x = (lon2 - lon1) * cos( 0.5*(lat2+lat1) )
y = lat2 - lat1
d = R * sqrt( x*x + y*y )
'R' は km 単位なので、距離 'd' は km 単位になります。
于 2013-04-01T11:06:20.173 に答える
8
速度の 1 つのアイデアは、経度/緯度座標を 3D (x,y,z) 座標に変換することです。ポイントを前処理した後、ポイント間のユークリッド距離を、実際の距離の迅速に計算されたアンダーシュートとして使用します。
于 2013-04-01T02:56:34.557 に答える
-1
次のコードを使用してください。
def distance(lat1, lng1, lat2, lng2):
#return distance as meter if you want km distance, remove "* 1000"
radius = 6371 * 1000
dLat = (lat2-lat1) * math.pi / 180
dLng = (lng2-lng1) * math.pi / 180
lat1 = lat1 * math.pi / 180
lat2 = lat2 * math.pi / 180
val = sin(dLat/2) * sin(dLat/2) + sin(dLng/2) * sin(dLng/2) * cos(lat1) * cos(lat2)
ang = 2 * atan2(sqrt(val), sqrt(1-val))
return radius * ang
于 2016-08-02T07:26:23.653 に答える