Python,将坐标度转换为小数点
Posted
技术标签:
【中文标题】Python,将坐标度转换为小数点【英文标题】:Python, convert coordinate degrees to decimal points 【发布时间】:2020-08-11 12:55:43 【问题描述】:我有一个经纬度列表如下:
['33.0595° N', '101.0528° W']
我需要将其转换为浮点数[33.0595, -101.0528]
。
当然,'-' 是唯一的区别,但是当改变半球时它会改变,这就是为什么图书馆是理想的,但我找不到。
【问题讨论】:
你所说的改变半球时改变是什么意思?你能为每个案例添加一个例子吗? 上面的例子是在美国......例如在新西兰,它会是-44.079796, 170.178351......所以'-'切换到经度值。 也许你应该理解这两个符号的含义,这样你也可以轻松地写下代码。手动操作(很容易)它可以帮助您为用户提供更好的错误。 【参考方案1】:您可以将以下代码包装在一个函数中并使用它:
import re
l = ['33.0595° N', '101.0528° W']
new_l = []
for e in l:
num = re.findall("\d+\.\d+", e)
if e[-1] in ["W", "S"]:
new_l.append(-1. * float(num[0]))
else:
new_l.append(float(num[0]))
print(new_l) # [33.0595, -101.0528]
结果符合你的预期。
【讨论】:
您还需要考虑南北坐标中的“S”。 @AhtoTruu 谢谢,我编辑了答案以包含这两种情况。【参考方案2】:以下是我解决问题的方法。我认为之前的答案使用了可能会慢一些的正则表达式(需要进行基准测试)。
data = ["33.0595° N", "101.0528° W"]
def convert(coord):
val, direction = coord.split(" ") # split the direction and the value
val = float(val[:-1]) # turn the value (without the degree symbol) into float
return val if direction not in ["W", "S"] else -1 * val # return val if the direction is not West
converted = [convert(coord) for coord in data] # [33.0595, -101.0528]
【讨论】:
这也否定了应该保持正数的“N”。 它只会否定 W 或 S 的值。如果你看到最后的结果北坐标是正数。 现在确实更好了:)以上是关于Python,将坐标度转换为小数点的主要内容,如果未能解决你的问题,请参考以下文章