2013-10-03 2 views
1

일부 이미지 처리 코드를 작성 중이며 GPS 좌표를 가져 오는 중입니다. 그러나 그들은 일종의 정수 배열에 있기 때문에 Degree/Minute/Second 또는 Decimal 형식으로 변환하는 방법을 알 수 없습니다.어떻게 이러한 이미지 EXIF ​​GPS 좌표를 소수점 이하/Lng로 변환합니까?

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) 

창문에 따르면 D이의/M/S 버전은 다음과 같습니다

enter image description here

VB.NET 코드는 가장 도움이 될 것입니다하지만 난 아마 어떤 언어로 변환 할 수 있습니다. 여기

+0

은 그런 바보 같은 형식을 전혀 보지 못했지만 24 바이트가 필요합니다. 4 바이트가 충분합니다. – AlexWien

답변

3

는 (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

+0

이것은 효과가 있습니다. 38 54 34.6536, 77 2 내 출력으로 3.1292이 –

0

여기에 설명되어 있습니다 C#을 사용하여 .NET 통화에서 작동 코드 :

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을 디코딩하도록 참조 된 배열을 변경하십시오.

+0

이 코드는 잘못되었습니다. 바이트는 "합산"되지 않습니다. 리틀 엔디 언 4 바이트 정수입니다. 정수가 256보다 작 으면 (실수는도 및 분) 실수로 작동하지만 초 필드에서는 실패합니다. –

관련 문제