我得到两个坐标对,形式为90°0′0″N 0°0′0″E作为字符串,并想计算半径R=6371km的球体上这些点之间的距离。在
我在网上找到了两个公式,哈弗辛公式和余弦球定律,但它们似乎不起作用。对于应返回2*pi*R / 4的90°角,haversine操作正确,但余弦失败并返回0。一个具有更多随机坐标的不同点在这两种算法中都会返回错误值:haversine太高,cosine太低。在
我的实现是错误的还是我选择了错误的算法?在
我应该如何进行这些计算(坐标对到地球表面的距离)?在
(是的,我知道我还没有检查N/S和E/W,但是测试的坐标都在东北半球。)
下面是我的Python 3代码:import math, re
R = 6371
PAT = r'(\d+)°(\d+)′(\d+)″([NSEW])'
def distance(first, second):
def coords_to_rads(s):
return [math.radians(int(d) +int(m)/60 +int(s)/3600) \
for d, m, s, nswe in re.findall(PAT, s)]
y1, x1 = coords_to_rads(first)
y2, x2 = coords_to_rads(second)
dx = x1 - x2
dy = y1 - y2
print("coord string:", first, "|", second)
print("c