Python,将坐标度数转换为小数点
Python, convert coordinate degrees to decimal points
我有一个经纬度列表如下:
['33.0595° N', '101.0528° W']
我需要将其转换为浮点数 [33.0595, -101.0528]
。
当然,'-' 是唯一的区别,但它会随着半球的改变而改变,这就是为什么图书馆是理想的,但我找不到。
您可以将以下代码包装在一个函数中并使用它:
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]
结果符合您的预期。
以下是我解决问题的方法。我认为之前的答案使用的正则表达式可能会慢一点(需要进行基准测试)。
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]
我有一个经纬度列表如下:
['33.0595° N', '101.0528° W']
我需要将其转换为浮点数 [33.0595, -101.0528]
。
当然,'-' 是唯一的区别,但它会随着半球的改变而改变,这就是为什么图书馆是理想的,但我找不到。
您可以将以下代码包装在一个函数中并使用它:
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]
结果符合您的预期。
以下是我解决问题的方法。我认为之前的答案使用的正则表达式可能会慢一点(需要进行基准测试)。
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]