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
问题在于秒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)
这是我的一支班轮(很好,很好–也许是两行):)
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