python 读取无人机图片 经纬度信息
时间: 2023-09-25 18:14:47 浏览: 120
python读取遥感影像
3星 · 编辑精心推荐
可以使用python的Pillow库来读取图片,然后使用EXIF数据来获取图片的经纬度信息。以下是示例代码:
```
from PIL import Image
from PIL.ExifTags import GPSTAGS, TAGS
def get_exif_data(image):
"""
获取图片的元数据
"""
exif_data = {}
with Image.open(image) as img:
info = img._getexif()
if info:
for tag, value in info.items():
decoded = TAGS.get(tag, tag)
exif_data[decoded] = value
return exif_data
def get_geotagging(exif_data):
"""
获取图片的经纬度信息
"""
lat = None
lng = None
gps_info = {}
if "GPSInfo" in exif_data:
# 获取GPS信息
gps_info = exif_data["GPSInfo"]
gps_latitude = get_gps_coords(gps_info, "GPSLatitude")
gps_latitude_ref = gps_info.get("GPSLatitudeRef")
gps_longitude = get_gps_coords(gps_info, "GPSLongitude")
gps_longitude_ref = gps_info.get("GPSLongitudeRef")
lat = convert_to_degrees(gps_latitude)
if gps_latitude_ref != "N":
lat = 0 - lat
lng = convert_to_degrees(gps_longitude)
if gps_longitude_ref != "E":
lng = 0 - lng
return lat, lng
def get_gps_coords(gps_info, gps_tag):
"""
获取GPS信息中的经纬度坐标值
"""
coords = gps_info.get(gps_tag)
if coords is None:
return None
num, den = coords[0], coords[1]
val = float(num) / float(den)
for i in range(2, len(coords)):
num, den = coords[i], coords[i + 1] if i + 1 < len(coords) else 1
val += (float(num) / float(den)) / 60.0
return val
def convert_to_degrees(value):
"""
将经纬度转换为以度为单位的值
"""
deg, minutes = int(value[0]), value[1:]
val = deg + (float(minutes[0]) / float(minutes[1])) / 60.0
return val
# 调用上述函数来获取图片的经纬度信息
exif_data = get_exif_data("image.jpg")
lat, lng = get_geotagging(exif_data)
print("经度:", lng)
print("纬度:", lat)
```
需要注意的是,无人机拍摄的图片可能不包含GPS信息,或是GPS信息不完整甚至不正确,此时获取到的经纬度信息就可能是不准确的。
阅读全文