使用piexif,我得到了纬度和经度的DMS值,我试图将其转换为十进制,但对于一些图像,我得到的点阵值为184.62583333333333,这超出了[-90,90]的范围。在
查看下面的代码
exif_dict = piexif.load('images/DJI_0026.JPG')
long = 0
latt = 0
value = exif_dict['GPS']
if value:
lat = value[2]
lon = value[4]
for i in range(3):
if i == 1:
latt += lat[i][0]/60.0
elif i == 2:
latt += lat[i][0]/3600.0
else:
latt += lat[i][0]
for i in range(3):
if i == 1:
long += lon[i][0]/60.0
elif i == 2:
long += lon[i][0]/3600.0
else:
long += lon[i][0]
print(latt, long)
value={0:(2,3,0,0),1:b'N',2:((19,1),(8,1),(595773,10000)),3:b'E',4:((73,1),(0,1),(131775,10000)),5:0,6:(70989,1000)}
我关心的是纬度和经度,它们存储在键2和4的值中。在
纬度=19+8/60.0+595773/3600.0
经度=73+0/60.0+131775/3600.0
这就是输出。在
产量:184.62583333333333 109.604166666666
请告诉我如何使纬度在[-90,90]范围内正常化。在
piexif
返回的GPS坐标数据格式如下:纬度和经度以正有理数形式给出,朝向N或S(分别为。E或W)。在
我们需要将DMS中的正值转换为十进制,然后根据方向给它们打右号:
^{pr2}$您可以这样使用:
从您给出的示例值来看,显然应该将val[0]除以val[1]。在
例如,595773/10000=59,这在一秒钟内非常合理。在
顺便说一下,您不需要
for
循环。它们使你的代码比必要的长。在这可能是
value[1] == b'N'
的原因。但是,您当前的代码没有计算它。这意味着你的代码只适用于地球表面的1/4。在请参见https://sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html以获得良好的概述。您的代码应该能够解释南部和西部。在
相关问题 更多 >
编程相关推荐