UAV/tools/read_gps.py
2025-01-16 15:37:29 +08:00

64 lines
2.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import os
import piexif
from PIL import Image
def dms_to_decimal(dms):
"""将DMS格式转换为十进制度"""
if not dms:
return None
degrees = dms[0][0] / dms[0][1]
minutes = dms[1][0] / dms[1][1] / 60
seconds = dms[2][0] / dms[2][1] / 3600
return degrees + minutes + seconds
def get_gps_info(image_path):
"""获取图片的GPS信息"""
try:
image = Image.open(image_path)
exif_data = piexif.load(image.info['exif'])
gps_info = exif_data.get("GPS", {})
if not gps_info:
return None, None, None
# 获取纬度
lat = dms_to_decimal(gps_info.get(2))
if lat and gps_info.get(1) and gps_info[1] == b'S':
lat = -lat
# 获取经度
lon = dms_to_decimal(gps_info.get(4))
if lon and gps_info.get(3) and gps_info[3] == b'W':
lon = -lon
# 获取高度
alt = None
if 6 in gps_info:
alt = gps_info[6][0] / gps_info[6][1]
return lat, lon, alt
except Exception as e:
print(f"读取文件 {image_path} 时出错: {str(e)}")
return None, None, None
def main():
# 设置输入输出路径
image_dir = r"E:\datasets\UAV\134\project\images"
output_path = r"E:\datasets\UAV\134\project\gps.txt"
with open(output_path, 'w', encoding='utf-8') as f:
for filename in os.listdir(image_dir):
if filename.lower().endswith(('.jpg', '.jpeg')):
image_path = os.path.join(image_dir, filename)
lat, lon, alt = get_gps_info(image_path)
if lat is not None and lon is not None:
# 如果没有高度信息使用0
alt = alt if alt is not None else 0
# filename = filename.replace(".jpg", ".tif")
f.write(f"{filename} {lat} {lon} {alt}\n")
if __name__ == '__main__':
main()