各位网友寻找一个python模块能够完整读取.JPG图片GPS信息,由于GPS精度太高(如图),exifread并不能完整读取。并且exifread模块读出来的是分数。
python exifread读出来的经纬度是度,需要转成decimal小数格式就可以了啊,并没有丢精度
运行图如下:
# 读取照片的GPS经纬度信息
# 经纬度坐标格式转换(* °转十进制格式)
# 将经纬度转换为小数形式
def convert_to_decimal(*gps):
# 度
if '/' in gps[0]:
deg = gps[0].split('/')
if deg[0] == '0' or deg[1] == '0':
gps_d = 0
else:
gps_d = float(deg[0]) / float(deg[1])
else:
gps_d = float(gps[0])
# 分
if '/' in gps[1]:
minu = gps[1].split('/')
if minu[0] == '0' or minu[1] == '0':
gps_m = 0
else:
gps_m = (float(minu[0]) / float(minu[1])) / 60
else:
gps_m = float(gps[1]) / 60
# 秒
if '/' in gps[2]:
sec = gps[2].split('/')
if sec[0] == '0' or sec[1] == '0':
gps_s = 0
else:
gps_s = (float(sec[0]) / float(sec[1])) / 3600
else:
gps_s = float(gps[2]) / 3600
decimal_gps = gps_d + gps_m + gps_s
# 如果是南半球或是西半球
if gps[3] == 'W' or gps[3] == 'S' or gps[3] == "83" or gps[3] == "87":
return str(decimal_gps * -1)
else:
return str(decimal_gps)
def test_lat_lon_2_decimal(lat, lng):
print('lat: ', str(lat))
deg, minu, sec = [x.replace(' ', '') for x in str(lat)[1:-1].split(',')]
# 将经度转换为小数形式
print('GPSLatitude', convert_to_decimal(deg, minu, sec, 'N')) # 对特殊的经纬度格式进行处理)
print('lng: ', str(lng))
deg, minu, sec = [x.replace(' ', '') for x in str(lng)[1:-1].split(',')]
# 将纬度转换为小数形式
print('GPSLongitude', convert_to_decimal(deg, minu, sec, 'N')) # 对特殊的经纬度格式进行处理)
if __name__ == '__main__':
# 测试经纬度的度转小数格式
test_lat_lon_2_decimal('[40, 1, 2067993/200000]', '[116, 22, 25038757/500000]')