Python GeoCoordinates类DMS转换经度符号错误问题求助
问题分析
你遇到两个问题:一是经度输出带负号,二是格式里多了个多余句点。核心原因是经度度数未处理符号,且字符串拼接有误。
错误根源
- 经度符号问题:处理
long_deg时直接用int(long),当经度为负(比如-122.41639),得到的long_deg是-122,导致输出带负号。但DMS格式中,西经(W)已代表负方向,度数应使用绝对值。 - 格式错误:返回字符串里
{abs(long_min):02}′.多了一个句点,破坏了DMS的标准格式。 - 原代码处理负纬度时,计算出的分也会带负号(比如
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
相关产品推荐
相关产品推荐

