使用Python将度分秒(DMS)格式坐标转换为十进制经纬度
Python实现DMS格式坐标转十进制经纬度方案
首先明确你给出的DMS字符串的固定格式规则:每个字符串由纬度部分+逗号+经度部分组成,其中:
- 纬度部分共7位:前2位是度、第3-4位是分、第5-6位是秒、第7位是南北方向(N代表北纬为正,S代表南纬为负)
- 经度部分共8位:前3位是度、第4-5位是分、第6-7位是秒、第8位是东西方向(E代表东经为正,W代表西经为负)
转换公式为:十进制数值 = 度 + 分/60 + 秒/3600,负方向坐标最后乘以-1即可。
完整实现代码
def dms_to_decimal(dms_str): # 拆分输入字符串的纬度、经度部分,去除首尾多余的引号 lat_part, lon_part = dms_str.strip("'").split(',') # 计算纬度十进制值 lat_deg = int(lat_part[:2]) lat_min = int(lat_part[2:4]) lat_sec = int(lat_part[4:6]) lat = lat_deg + lat_min / 60 + lat_sec / 3600 # 南纬取负值 if lat_part[-1] == 'S': lat = -lat # 计算经度十进制值 lon_deg = int(lon_part[:3]) lon_min = int(lon_part[3:5]) lon_sec = int(lon_part[5:7]) lon = lon_deg + lon_min / 60 + lon_sec / 3600 # 西经取负值 if lon_part[-1] == 'W': lon = -lon # 保留6位小数,可根据精度需求调整 return round(lat, 6), round(lon, 6) # 测试用的原始坐标列表 dms_coords = [ '544441N,0253123E', '544309N,0253808E', '543759N,0254153E', '543516N,0253209E', '543703N,0252603E', '544441N,0253123E' ] # 批量转换 result = [dms_to_decimal(coord) for coord in dms_coords] # 输出结果 for i, (lat, lon) in enumerate(result, 1): print(f"第{i}组坐标:纬度{lat},经度{lon}")
运行输出示例
第1组坐标:纬度54.744722,经度25.523056 第2组坐标:纬度54.719167,经度25.635556 第3组坐标:纬度54.633056,经度25.698056 第4组坐标:纬度54.587778,经度25.535833 第5组坐标:纬度54.6175,经度25.434167 第6组坐标:纬度54.744722,经度25.523056
注意事项
- 以上代码完全适配你给出的固定格式DMS字符串,如果后续DMS格式发生变化(比如度分秒带分隔符、位数调整),修改对应切片位置即可适配
- 十进制保留的小数位数可按需修改
round函数的第二个参数,通常保留6位小数精度可达米级,足以满足绝大多数场景需求
内容的提问来源于stack exchange,提问作者Robbods
相关产品推荐
相关产品推荐

