如何将这些图像EXIF GPS坐标转换为十进制Lat / Lng?

时间:2013-10-03 04:36:06

标签: .net vb.net gps exif geotagging

我正在编写一些图像处理代码,我正在提取GPS坐标,但它们是某种整数数组,我无法弄清楚如何转换为Degree / Minute / Second或Decimal形式

Lat: (38,0,0,0,1,0,0,0,54,0,0,0,1,0,0,0,168,73,5,0,16,39,0,0)
Lng: (77,0,0,0,1,0,0,0,2,0,0,0,1,0,0,0,60,122,0,0,16,39,0,0)

根据Windows的说法,D / M / S版本是:

enter image description here

VB.NET代码最有用,但我可能会用任何语言转换它。

2 个答案:

答案 0 :(得分:3)

这是使用.NET调用在C#中工作的代码(在VB中应该很简单)

Double deg = (Double)BitConverter.ToInt32(data,0)/ BitConverter.ToInt32(data,4);
Double min = (Double)BitConverter.ToInt32(data,8)/ BitConverter.ToInt32(data,12);
Double sec = (Double)BitConverter.ToInt32(data,16)/ BitConverter.ToInt32(data,20);

此格式记录在此http://en.wikipedia.org/wiki/Geotagging

答案 1 :(得分:0)

阵列按以下形式列出:

bytes(0 -> 3) / bytes(4 -> 7) = degree
(bytes(8 -> 11) / bytes(12 -> 15)) / 60= minute
(bytes(16 -> 19) / bytes(20 -> 23)) / 3600 = second

*注意 - 每个byte(x -> y)数量是范围的总和。

下面将给定的lat数组解码为十进制形式。

    Dim coord(5) As Decimal
    Dim j As Integer = 0
    Dim coordinate As Decimal

    For i As Integer = 0 To lat.Length - 1
        coord(j) = coord(j) + lat(i)

        'If i is a multiple of 4, goto the next index
        If ((i + 1) Mod 4 = 0) And i <> 0 Then
            j += 1
        End If

    Next

    coordinate = (coord(0) / coord(1)) + ((coord(2) / coord(3))) / 60 + ((coord(4) / coord(5)) / 3600)

只需更改引用的数组即可解码lng。