如何在python中将纬度经度转换为十进制?

时间:2014-01-23 03:29:24

标签: python

假设我有以下内容:

latitude = "20-55-70.010N"
longitude = "32-11-50.000W"

转换为十进制表单最简单的方法是什么?有一些图书馆吗?

从这个秒形式转换会更简单吗?

 "149520.220N"
 "431182.897W"

2 个答案:

答案 0 :(得分:2)

这应该可以解决问题

latitude = "20-55-70.010N"
longitude = "32-11-50.000W"

##assuming N latitude and W longitude
latitude = sum(float(x) / 60 ** n for n, x in enumerate(latitude[:-1].split('-')))  * (1 if 'N' in latitude[-1] else -1)
longitude = sum(float(x) / 60 ** n for n, x in enumerate(longitude[:-1].split('-'))) * (1 if 'E' in longitude[-1] else -1)

我的口味有点长,也许保持简单:

latitude = "20-55-70.010N"
N = 'N' in latitude
d, m, s = map(float, latitude[:-1].split('-'))
latitude = (d + m / 60. + s / 3600.) * (1 if N else -1)
longitude = "32-11-50.000W"
W = 'W' in longitude
d, m, s = map(float, longitude[:-1].split('-'))
longitude = (d + m / 60. + s / 3600.) * (-1 if W else 1)

答案 1 :(得分:2)

要处理“N”,“S”,“W”,“E”,我们会调整@ wwii的解决方案:

def convert(tude):
    multiplier = 1 if tude[-1] in ['N', 'E'] else -1
    return multipler * sum(float(x) / 60 ** n for n, x in enumerate(tude[:-1].split('-')))

然后

print "20-55-70.010N:", convert("20-55-70.010N")
print "32-11-50.000W:", convert("32-11-50.000W")

结果:

20-55-70.010N: 20.9361138889
32-11-50.000W: -32.1972222222