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

7
假设我有以下内容:
latitude = "20-55-70.010N"
longitude = "32-11-50.000W"

最简单的将其转换为十进制形式的方法是什么? 是否有一些库可以使用?

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

 "149520.220N"
 "431182.897W"

请参考https://dev59.com/U2gv5IYBdhLWcg3wF89P。 - Mr_and_Mrs_D
2个回答

10
为了处理 "N", "S", "W" 和 "E",可以对 @wwii 的解决方案进行调整:
def convert(tude):
    multiplier = 1 if tude[-1] in ['N', 'E'] else -1
    return multiplier * 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

4
这应该能解决问题。
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)

负经度的单位似乎无法正常工作。 - Rolando
抱歉,现在应该可以工作了。我认为我喜欢更简单的版本,尽管我在一个文本“数据库”上进行大约150000次转换的程序中使用了生成器表达式。 - wwii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接