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,将坐标度转换为小数点的主要内容,如果未能解决你的问题,请参考以下文章

duboo类型保留2位小数

Java 中应该使用啥数据类型来代表价格

java BigDecimal八种舍入模式

bigdecimal的使用

mysql中价格用什么数据类型表示最佳?

mysql中价格用什么数据类型表示最佳?