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

Python提取图片GPS经纬度出错,如何修正纬度负号问题?

修复GPS坐标正负号问题

你的问题核心是没有根据GPS Exif里的纬度方向标识判断是否添加负号——澳大利亚位于南半球,纬度应为南纬(S),需要将计算出的纬度值转为负数。同时建议一并处理经度的方向标识(西经W需转负),避免类似问题。

修改步骤

  1. 从GPSInfo中提取纬度方向(索引1)和经度方向(索引3)
  2. 根据方向标识调整坐标的正负值

修改后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 05:35:07