Python提取图片GPS经纬度出错,如何修正纬度负号问题?
修复GPS坐标正负号问题
你的问题核心是没有根据GPS Exif里的纬度方向标识判断是否添加负号——澳大利亚位于南半球,纬度应为南纬(S),需要将计算出的纬度值转为负数。同时建议一并处理经度的方向标识(西经W需转负),避免类似问题。
修改步骤
- 从
GPSInfo中提取纬度方向(索引1)和经度方向(索引3) - 根据方向标识调整坐标的正负值
修改后的完整代码
import PIL.Image import PIL.ExifTags from geopy.geocoders import Nominatim img = PIL.Image.open(r"C:\Users\RGCRA\Pictures\Camera Roll\WIN_20240102_11_46_09_Pro.jpg") exif = { PIL.ExifTags.TAGS[k]: v for k, v in img._getexif().items() if k in PIL.ExifTags.TAGS } # 提取GPS坐标组件和方向标识 lat_dms = exif['GPSInfo'][2] lon_dms = exif['GPSInfo'][4] lat_dir = exif['GPSInfo'][1] lon_dir = exif['GPSInfo'][3] # 计算十进制坐标 lat = ((((lat_dms[0] * 60) + lat_dms[1]) * 60) + lat_dms[2]) / 60 / 60 long = ((((lon_dms[0] * 60) + lon_dms[1]) * 60) + lon_dms[2]) / 60 / 60 # 根据方向调整正负 lat = -float(lat) if lat_dir == 'S' else float(lat) long = -float(long) if lon_dir == 'W' else float(long) geoLoc = Nominatim(user_agent='GetLoc') locname = geoLoc.reverse(f"{lat}, {long}") print(locname.address)
补充说明
GPS Exif的GPSInfo结构关键索引含义:
- 索引1:纬度方向(
'N'=北纬,'S'=南纬) - 索引2:纬度的度/分/秒数值
- 索引3:经度方向(
'E'=东经,'W'=西经) - 索引4:经度的度/分/秒数值
这样处理后,坐标会正确反映南半球的位置,解决显示日本的错误。
内容的提问来源于stack exchange,提问作者smth
相关产品推荐
相关产品推荐

