如何使纬度正常化到90到90之间?

2024-05-19 02:13:33 发布

您现在位置:Python中文网/ 问答频道 /正文

使用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]范围内正常化。在


Tags: inforifvaluerangedictlongexif
2条回答

piexif返回的GPS坐标数据格式如下:

exif_data = {0: (2, 3, 0, 0),
             # Latitude: b'N' or b'S'
             1: b'N', 
             # deg, min, sec as (numerator,denominator) of rationals
             2: ((19, 1), (8, 1), (595773, 10000)),
             # Longitude: b'E' or b'W'
             3: b'E', 
             4: ((73, 1), (0, 1), (131775, 10000)), 
             5: 0, 6: (70989, 1000)}

纬度和经度以正有理数形式给出,朝向N或S(分别为。E或W)。在

我们需要将DMS中的正值转换为十进制,然后根据方向给它们打右号:

^{pr2}$

您可以这样使用:

exif_dict = piexif.load('images/DJI_0026.JPG')
value = exif_dict['GPS']
if value:
   print(EXIF_to_lat_long(value))

从您给出的示例值来看,显然应该将val[0]除以val[1]。在

例如,595773/10000=59,这在一秒钟内非常合理。在

顺便说一下,您不需要for循环。它们使你的代码比必要的长。在

这可能是value[1] == b'N'的原因。但是,您当前的代码没有计算它。这意味着你的代码只适用于地球表面的1/4。在

请参见https://sno.phy.queensu.ca/~phil/exiftool/TagNames/GPS.html以获得良好的概述。您的代码应该能够解释南部和西部。在

相关问题 更多 >

    热门问题