簡體   English   中英

如何計算兩個給定地理坐標和方位角之間的交點坐標

[英]How to calculate intersection coordinate between two given geo coordinates and bearing angle

我想計算以下坐標的交點。 我能夠計算方位角,即這兩個坐標之間的航向和距離。 但不知道如何計算坐標的交點。

 QGeoCoordinate  sourceCoord(19.999601675,73.726176879);
 QGeoCoordinate destinationCoord(19.999139102,73.725825826);

   distance = 0.06318 km
   bearing angle (heading) 1 to 2 = 215
   bearing angle (heading) 2 to 1 = 35

要計算距離,我使用這個公式:

//φ為緯度,λ為經度,R為地球半徑

a = sin²(Δφ/2) + cos φ1 ⋅ cos φ2 ⋅ sin²(Δλ/2)

// 兩個坐標之間的距離

c = 2 ⋅ atan2( √a, √(1−a) )

d = R ⋅ c

為了計算方位角(航向),我使用了公式:

θ = atan2( sin Δλ ⋅ cos φ2, cos φ1 ⋅ sin φ2 − sin φ1 ⋅ cos φ2 ⋅ cos Δλ )

如何從方位角和航向計算兩個地理坐標之間的交點?

這個問題已經在這里得到了大部分的回答。

如果您假設地球是球形的,您可以執行類似於@chux - Reinstate Monica建議的操作:

  • 轉換為笛卡爾坐標
  • 添加點
  • 將結果轉換為緯度/經度,忽略半徑

在 Python 中,它可能看起來像這樣(我去掉了math.以使其更易於閱讀):

def midpt(lat1, lng1, lat2, lng2):
    if lat1 == -lat2 and abs(lng1 - lng2) == 180:
        return [0, (radians(lng1) + radians(lng2)) / 2]
    # convert to cartesian
    cart1 = [cos(radians(lat1)) * cos(radians(lng1)),
             cos(radians(lat1)) * sin(radians(lng1)),
             sin(radians(lat1))
             ]
    cart2 = [cos(radians(lat2)) * cos(radians(lng2)),
             cos(radians(lat2)) * sin(radians(lng2)),
             sin(radians(lat2))
             ]
    # add the positions
    pt_sum = [cart1[0] + cart2[0],
              cart1[1] + cart2[1],
              cart1[2] + cart2[2],
              ]
    r = sqrt(pt_sum[0] ** 2 + pt_sum[1] ** 2 + pt_sum[2] ** 2)
    # convert back to lat/lng
    int_lat = degrees(asin(pt_sum[2]/r))
    int_lng = degrees(atan2(pt_sum[1], pt_sum[0]))
    return [int_lat, int_lng]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM