You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 09:00:03