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

Python GeoCoordinates类DMS转换经度符号错误问题求助

问题分析

你遇到两个问题:一是经度输出带负号,二是格式里多了个多余句点。核心原因是经度度数未处理符号,且字符串拼接有误。

错误根源
  1. 经度符号问题:处理long_deg时直接用int(long),当经度为负(比如-122.41639),得到的long_deg是-122,导致输出带负号。但DMS格式中,西经(W)已代表负方向,度数应使用绝对值。
  2. 格式错误:返回字符串里{abs(long_min):02}′. 多了一个句点,破坏了DMS的标准格式。
  3. 原代码处理负纬度时,计算出的分也会带负号(比如lat=-40.7775时,lat_min会是-46),只是你测试正纬度时没暴露这个问题。
修正后的代码
def convert_lat_long_to_dms(self, lat: float, long: float):
    # 处理纬度:先取绝对值,确保度分秒都是正数,用方向字母表示正负
    abs_lat = abs(lat)
    lat_deg = int(abs_lat)
    lat_min = int((abs_lat - lat_deg) * 60)
    lat_sec = round((abs_lat - lat_deg - lat_min / 60) * 3600)
    lat_dir = 'S' if lat < 0 else 'N'
    
    # 处理经度:同理,取绝对值计算度分秒
    abs_long = abs(long)
    long_deg = int(abs_long)
    long_min = int((abs_long - long_deg) * 60)
    long_sec = round((abs_long - long_deg - long_min / 60) * 3600)
    long_dir = 'W' if long < 0 else 'E'
    
    # 拼接标准DMS格式字符串,去掉多余句点
    return f"{lat_deg}°{lat_min:02}′{lat_sec:02}″{lat_dir} {long_deg}°{long_min:02}′{long_sec:02}″{long_dir}"
效果验证

输入lat=40.7775、long=-122.41639时,输出为:40°46′39″N 122°24′59″W,完全符合预期。

内容的提问来源于stack exchange,提问作者kylie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 09:25:31