web-dev-qa-db-ja.com

Python:2つのLAT / LONGの間のベアリングを計算します

私は2つのLAT/LONGの間のベアリングを計算しようとしています。

私は機能/公式自体に関して質問はありません、

提供:

def get_bearing(lat1, long1, lat2, long2):
    dLon = (long2 - long1)

    y = math.sin(dLon) * math.cos(lat2)
    x = math.cos(lat1) * math.sin(lat2) - math.sin(lat1) * math.cos(lat2) * math.cos(dLon)

    brng = math.atan2(y, x)

    brng = np.rad2deg(brng)

    return brng
 _

問題は結果が期待されているものではないということです。

関数の意図された使用法は、(非常に長い)リストにある2つのLAT/Longペアの間のベアリングを返します。

    lat1 = path[int(len(path) * location / 1000)][0]
    lat2 = path[int(len(path) * location / 1000) + 1][0]
    lng1 = path[int(len(path) * location / 1000)][1]
    lng2 = path[int(len(path) * location / 1000) + 1][1]
 _

その後、ベアリング結果は、ベアリングが範囲で値を求めることができるプロットのビューの向きを変化させます[-180,180]。理想的には、LAT1、LNG1、LAT2、LNG2の間に形成された線がプロットで完全に「垂直」になるように結果が表示されます(LAT/LONアノテーションはプロットで切り替えられます)、下記参照

enter image description here

enter image description here

私は、誰かが関数から返却されたベアリングから問題を推測できること、および予想されるベアリングが何であるかを望んでいるかもしれません。以下のいくつかのインスタンス:

Current Location: 30.07134 -97.23076
Next in path: 30.0709 -97.22907
Calculated Bearing: 88.39967863143139
Expected Bearing: ~-70.67

Current Location: 29.91581 -96.85068
Next in path: 29.91556 -96.85021
Calculated Bearing: 118.9170342272798
Expected Bearing: ~122.67

Current Location: 29.69419 -96.53487
Next in path: 29.69432 -96.53466
Calculated Bearing 141.0271357781952
Expected Bearing: ~56

Current Location: 29.77357 -96.07924
Next in path: 29.77349 -96.07876
Calculated Bearing 165.24612555483893
Expected Bearing: ~104
 _

追加情報を提供して、あらゆるヘルプを事前にありがとうございました。

6

PythonでTURF.JSの移植であるTURFPYというこの新しいパッケージを試すことができます。

from turfpy import measurement
from geojson import Point, Feature
start = Feature(geometry=Point((-75.343, 39.984)))
end = Feature(geometry=Point((-75.534, 39.123)))
measurement.bearing(start,end)
 _

https://pypi.org/project/turfpy/

1
Omkar Mestry