如何计算两个给定的地理坐标和方位角之间的交点坐标



我想计算以下坐标的交点。我能够计算方位角,即航向和这两个坐标之间的距离。但不知道如何计算坐标的交点。

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建议的事情:

  • 转换为笛卡尔坐标
  • 添加点
  • 将结果转换为lat/long,忽略半径

在Python中,它可能看起来像这样(我去掉了math.s,使其更易于阅读(:

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]

最新更新