如何将度分秒转换为度分

2024-05-13 20:57:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我从GPS接收纬度和经度,格式如下:

纬度:北纬78°55'44.29458“

我需要将此数据转换为:

纬度:78.928888889

我在这里找到了这个代码:link

import re

def dms2dd(degrees, minutes, seconds, direction):
    dd = float(degrees) + float(minutes)/60 + float(seconds)/(60*60);
    if direction == 'E' or direction == 'N':
        dd *= -1
    return dd;

def dd2dms(deg):
    d = int(deg)
    md = abs(deg - d) * 60
    m = int(md)
    sd = (md - m) * 60
    return [d, m, sd]

def parse_dms(dms):
    parts = re.split('[^\d\w]+', dms)
    lat = dms2dd(parts[0], parts[1], parts[2], parts[3])

    return (lat)

dd = parse_dms("78°55'44.33324"N )

print(dd)

它为这种格式工作

dd = parse_dms("78°55'44.33324'N" )

但它对我的数据不起作用。有人能帮我解决这个问题吗?


Tags: 数据rereturnparsedef格式dmsfloat
3条回答

问题是秒44.29458在.处被分割。

您可以直接定义拆分字符(而不是在要拆分的位置):

>>> re.split('[°\'"]+', """78°55'44.29458"N""")
['78', '55', '44.29458', 'N']

或者保持正则表达式的原样并合并第2部分和第3部分:

dms2dd(parts[0], parts[1], parts[2] + "." + parts[3], parts[4])

更新:

方法调用dd = parse_dms("78°55'44.33324"N )是语法错误。添加结束的"并转义另一个。或者对字符串定义使用三重引号:

parse_dms("""78°55'44.29458"N""")

上面的函数(dms2dd)不正确。

实际(有错误):

如果方向='E'或方向='N': dd*=-1

修正条件:

如果方向='W'或方向='S': dd*=-1

这是我的一行(好吧,好吧——也许是两行):)

import re
lat = '''51°36'9.18"N'''
deg, minutes, seconds, direction =  re.split('[°\'"]', lat)
(float(deg) + float(minutes)/60 + float(seconds)/(60*60)) * (-1 if direction in ['W', 'S'] else 1)

输出51.60255

相关问题 更多 >