Python实现获取照片的地理定位信息

随心笔谈3年前发布 admin
240 0 0

文章摘要

这篇文章介绍了如何从JPEG图像中提取GPS信息,并将其转换为经纬度。文章主要使用Python的`PIL`库和`PIL.ExifTags`模块来处理图片和解析EXIF标签。具体来说,文章包含以下内容: 1. **获取EXIF数据**:定义了`get_exif_data`函数,用于读取JPEG图像的EXIF数据,并提取GPS相关标签(如`GPSInfo`)。 2. **解析GPS信息**:定义了`get_gps_info`函数,用于从EXIF数据中提取和解析GPS经纬度信息,并将其转换为经纬度值。 3. **测试代码**:在`__main__`模块中,提供了测试代码,展示了如何使用上述函数提取并打印图像的经纬度信息。 文章的核心内容围绕如何通过Python编程实现从JPEG图片中提取GPS信息并转换为经纬度,展示了完整的代码实现和使用示例。

from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS

def get_exif_data(image_path):
“””
获取 JPEG 图像的 EXIF 数据
“””
exif_data={}
with Image.open(image_path) as img:
if hasattr(img, ‘_getexif’):
# 获取所有 EXIF 标签
for tag, value in img._getexif().items():
if tag in TAGS:
exif_data[TAGS[tag]]=value
# 获取 GPSInfo 标签
if ‘GPSInfo’ in exif_data:
# 解析 GPSInfo 标签中的子标签
gps_data={}
for gps_tag in exif_data[‘GPSInfo’].keys():
tag_name=GPSTAGS.get(gps_tag, gps_tag)
gps_data[tag_name]=exif_data[‘GPSInfo’][gps_tag]
exif_data[‘GPSInfo’]=gps_data
return exif_data

def get_gps_info(exif_data):
“””
从 EXIF 数据中提取经纬度信息
“””
gps_info={}
if ‘GPSInfo’ in exif_data:
# 获取经度
lat=exif_data[‘GPSInfo’][‘GPSLatitude’]
lat_ref=exif_data[‘GPSInfo’][‘GPSLatitudeRef’]
# lat_degrees=lat[0][0] / float(lat[0][1])
lat_degrees=lat[0].numerator / float(lat[0].denominator)
# lat_minutes=lat[1][0] / float(lat[1][1])
lat_minutes=lat[1].numerator / float(lat[1].denominator)
# lat_seconds=lat[2][0] / float(lat[2][1])
lat_seconds=lat[2].numerator / float(lat[2].denominator)
lat_direction=lat_ref
gps_info[‘latitude’]=(lat_degrees + (lat_minutes / 60.0) + (lat_seconds / 3600.0)) * (-1 if lat_direction==’S’ else 1)

# 获取纬度
lon=exif_data[‘GPSInfo’][‘GPSLongitude’]
lon_ref=exif_data[‘GPSInfo’][‘GPSLongitudeRef’]
# lon_degrees=lon[0][0] / float(lon[0][1])
lon_degrees=lon[0].numerator / float(lon[0].denominator)
# lon_minutes=lon[1][0] / float(lon[1][1])
lon_minutes=lon[1].numerator / float(lon[1].denominator)
# lon_seconds=lon[2][0] / float(lon[2][1])
lon_seconds=lon[2].numerator / float(lon[2].denominator)
lon_direction=lon_ref
gps_info[‘longitude’]=(lon_degrees + (lon_minutes / 60.0) + (lon_seconds / 3600.0)) * (-1 if lon_direction==’W’ else 1)
return gps_info

# 测试代码
if __name__==’__main__’:
image_path=r’D:\spiderdocs\FtpServer\IMG_20230302_134126.jpg’
# 修改为你自己的 JPEG 图像路径
exif_data=get_exif_data(image_path)
gps_info=get_gps_info(exif_data)
print(‘经度:’, gps_info[‘longitude’])
print(‘纬度:’, gps_info[‘latitude’])

© 版权声明

相关文章