理解EXIF经度和纬度

Making sense of EXIF longitude and latitude

如果我右键单击图像上的细节,我会在 GPS 下得到以下内容

查询 EXIF(GpsLatitude 和 GpsLongitude)数据时,我得到

我可以看到第 0 行和第 8 行是度数和分钟,但其余部分没有任何意义。我错过了什么?

谢谢

无法获取最后一组显示小数位(ToDouble 不起作用),但这非常接近

 If Not vLong Is Nothing Then
                    vLong1 = BitConverter.ToUInt32(vLong, 0)
                    vLong2 = BitConverter.ToUInt32(vLong, 8)
                    vLong3 = BitConverter.ToUInt32(vLong, 16)
                    vLongDecode = CType(vLong1, String) & " " & CType(vLong2, String) & " " & CType(vLong3, String)
                End If
                If Not vLat Is Nothing Then
                    vLat2 = BitConverter.ToUInt32(vLat, 8)
                    vLat1 = BitConverter.ToUInt32(vLat, 0)
                    vLat3 = BitConverter.ToUInt32(vLat, 16)
                    vLatDecode = CType(vLat1, String) & " " & CType(vLat2, String) & " " & CType(vLat3, String)
                End If

Exif 将纬度和经度存储为三个有理数(分数),其中分子和分母的长度为四个字节。

在您的示例中,您只显示了前 14 个值。有 24 个字节的值需要考虑。

具体来说,纬度小时值为0x00000027 / 0x00000001,或39 / 1

注意值是小端存储的,所以字节必须颠倒。

仅采用字节 0/8/16,您可能会丢失溢出到其他字节的值,并且您还假设分母始终为一。


使用库从图像中提取此信息可能要容易得多。我为 .NET 维护了这样一个库,它可以很好地与 VB.NET 一起使用,并且完全支持 Exif 和来自许多文件格式的许多其他类型的元数据。

如果你有兴趣,看看https://github.com/drewnoakes/metadata-extractor-dotnet