我有一个问题,需要编写一个简短的函数来计算两个端点的经纬度时线段的中点。简单地说,当经度大于-90度或小于90度时,它可以正确地工作。对于另一半地球,它提供了一个有些随机的结果。
该代码是从http://www.movable-type.co.uk/scripts/latlong.html提供的javascript转换而来,并且似乎符合这里和这里的更正版本。与两个stackoverflow版本进行比较时,我承认我不会编写C#或Java代码,但我无法找到我的错误。
代码如下:
任何建议?
该代码是从http://www.movable-type.co.uk/scripts/latlong.html提供的javascript转换而来,并且似乎符合这里和这里的更正版本。与两个stackoverflow版本进行比较时,我承认我不会编写C#或Java代码,但我无法找到我的错误。
代码如下:
#!/usr/bin/python
import math
def midpoint(p1, p2):
lat1, lat2 = math.radians(p1[0]), math.radians(p2[0])
lon1, lon2 = math.radians(p1[1]), math.radians(p2[1])
dlon = lon2 - lon1
dx = math.cos(lat2) * math.cos(dlon)
dy = math.cos(lat2) * math.sin(dlon)
lat3 = math.atan2(math.sin(lat1) + math.sin(lat2), math.sqrt((math.cos(lat1) + dx) * (math.cos(lat1) + dx) + dy * dy))
lon3 = lon1 + math.atan2(dy, math.cos(lat1) + dx)
return(math.degrees(lat3), math.degrees(lon3))
p1 = (6.4, 45)
p2 = (7.3, 43.5)
print "Correct:", midpoint(p1, p2)
p1 = (95.5,41.4)
p2 = (96.3,41.8)
print "Wrong:", midpoint(p1, p2)
任何建议?