如何在python中将度数分钟转换为十进制度数

bik*_*ser 9 python gis parsing

我使用以下格式从GPS接收纬度和经度:

纬度:78°55'44.29458"N

我需要将此数据转换为:

纬度:78.9288888889

我在这里找到了这个代码:链接

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)
Run Code Online (Sandbox Code Playgroud)

它正在为这种格式工作

dd = parse_dms("78°55'44.33324'N" )
Run Code Online (Sandbox Code Playgroud)

但它不适用于我的数据帧.任何人都可以帮我解决这个问题吗?

小智 7

上面的功能(dms2dd)不正确。

实际(有错误):

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

更正后的情况:

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


Fal*_*lko 5

问题在于秒44.29458在处被分割.

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

>>> re.split('[°\'"]+', """78°55'44.29458"N""")
['78', '55', '44.29458', 'N']
Run Code Online (Sandbox Code Playgroud)

或保留正则表达式不变,然后合并第2部分和第3部分:

dms2dd(parts[0], parts[1], parts[2] + "." + parts[3], parts[4])
Run Code Online (Sandbox Code Playgroud)

更新:

您的方法调用dd = parse_dms("78°55'44.33324"N )是语法错误。添加结束符,"然后跳过另一个。或使用三引号引起来的字符串定义:

parse_dms("""78°55'44.29458"N""")
Run Code Online (Sandbox Code Playgroud)


Int*_*nti 5

这是我的一支班轮(很好,很好–也许是两行):)

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)
Run Code Online (Sandbox Code Playgroud)

这个输出 51.60255