我想计算以下坐标的交点。我能够计算方位角,即航向和这两个坐标之间的距离。但不知道如何计算坐标的交点。
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]