Cara mengurai informasi GPS EXIF ​​ke lat, lng angka desimal

9
"EXIF_GPSAltitude": "(220.279)",
"EXIF_GPSLatitude": "(55) (40.711) (0)",
"EXIF_GPSLatitudeRef": "N",
"EXIF_GPSLongitude": "(8) (30.2282) (0)",

Bagaimana seharusnya saya memahami contoh di atas sebagai derajat, min, dtk?

Beberapa data exif yang saya ekstrak memiliki metadata yang tercantum di atas. Apakah format ini ditentukan di mana saja? atau haruskah saya berharap banyak format posisi gps yang berbeda di EXIF?

Saya perlu menulis metode yang memberikan lat, lng sebagai angka desimal berdasarkan data exif, dan saya tidak yakin tentang berapa banyak format berbeda yang saya harapkan dapat diurai (saya akan mempelajari ini dari waktu ke waktu) dan pertanyaan ini sebagian besar tentang contoh di atas. Saya tahu derajatnya adalah 55 dan 8, tetapi tidak yakin apakah 30 menit dan 0,22 * 60 detik, dan dalam hal ini, mengapa 0 di sana?

Poul K. Sørensen
sumber
OS apa? Anda mungkin tertarik pada exiftool sno.phy.queensu.ca/~phil/exiftool . Ada yang dapat dieksekusi untuk Win atau Mac yang saya gunakan berhasil (Windows batchfiles dalam kasus saya) untuk mengekstrak info koordinat dari foto.
jbchurchill
2
Platform apa yang Anda gunakan untuk mengurai informasi? Anda ingin mengubahnya menjadi apa?
Branco
Saya mengonversi nilai lat, lng desimal / dobel dan itu dalam C #. Saya hanya membutuhkan informasi yang diberikan jawabannya.
Poul K. Sørensen

Jawaban:

3

Menurut halaman ini , nilai lintang dan bujur bisa dalam (1) derajat, (2) derajat dan menit desimal, atau (3) derajat, menit, dan detik desimal.

Dalam contoh Anda, (2) adalah nilai desimal dan (3) adalah nol, sehingga Anda memiliki derajat, menit desimal.

Jadi, Anda harus memeriksa beberapa nilai untuk menentukan format mana yang digunakan.

mkennedy
sumber
Menurut standar exif, ada tiga bidang "rasional" untuk masing-masing, yang berisi derajat, menit, dan detik. exiftool menormalkan derajat desimal pentingoperoper ke dalam D, M, S saat menetapkan nilai-nilai ini, (exiftool -GPSLongitude = "0,5 90 63.12345" junk.jpg "-> GPS Longitude: 2 deg 1 '3.12" W ") Jadi jika Anda memerlukan derajat desimal , Anda lakukan dd = x0 + x1 / 60. + x2 / 3600. dan dapat mengabaikan non-normalisasi
Dave X
4

EXIF menyimpan koordinat GPS sebagai rational64udaftar enam bilangan bulat tanpa tanda dengan urutan sebagai berikut:

[
   degreesNumerator, degreesDenominator, 
   minutesNumerator, minutesDenominator, 
   secondsNumerator, secondsDenominator
]

Formatnya konsisten, dan sepertinya alat yang Anda gunakan sudah membagi setiap pasangan menjadi angka desimal, jadi yang Anda miliki adalah:

Lat: 55°   40.711' 0"
Lng:  8°  30.2282' 0"

Jika Anda ingin mengonversi ke satu angka desimal:

= Degrees + Minutes/60 + Seconds/3600
Jason Stewart
sumber
1

Exiftool akan menampilkan koordinat dalam desimal presisi rendah jika Anda menggunakan sakelar -n. Anda bisa mendapatkan lebih banyak presisi dengan -c switch dan memberikan jumlah digit yang diinginkan di belakang desimal:

exiftool -c '%.6f' -GPSPosition filename.jpg

Memperlihatkan posisi dengan 6 digit di belakang desimal, yang bagus untuk menemukan tempat dalam 5 inci.

Billious
sumber
0

Saya menggunakan file batch ini untuk mendapatkan nama file, tanggal / waktu dan derajat desimal

posisi.

************** mulai lalo.bat '-n pasukan menandatangani derajat desimal cepat -dan: \ util \ 00ymp * .jpg> strudf' satu string per baris (spasi ok) findstr / G: "strfile" fud >> fum ********** end lalo.bat

menghasilkan output

Nama File: 0104171345.jpg Tanggal / Waktu GPS: 2017: 01: 04 21: 45: 19Z Posisi GPS: 46.9997367777778 -117.3392105 Nama File: 0104171355.jpg Tanggal GPS / Waktu: 2017: 01: 04 21: 55: 52Z Posisi GPS : 46.99622725 -117.307495111111 Nama File: 0104171402.jpg GPS Tanggal / Waktu: 2017: 01: 04 22: 02: 02Z Posisi GPS: 47.0075378333333 -117.284553527778 Nama File: 0104171404.jpg GPS Tanggal / Waktu: 2017: 01: 04 22:04 : Posisi GPS 51Z: 47.0222473055556 -117.275527944444 Nama File: 0104171405.jpg GPS Tanggal / Waktu: 2017: 01: 04 22: 05: 40Z Posisi GPS: 47.0269584444444 -117.269523611111

Nama File: 0112171921.jpg Nama File: 0112171921a.jpg Nama File: 0112171921b.jpg Nama File: 0120171623.jpg Nama File: 0120171623a.jpg Nama File: 0120171624.jpg

Nama File: 0120171626.jpg Tanggal / Waktu GPS: 2017: 01: 21 00: 26: 49Z Posisi GPS: 48.7900199722222 -117.290061944444 Nama File: 0120171628.jpg Tanggal GPS / Waktu: 2017: 01: 21 00: 288 Posisi GPS : 48.7907943611111 -117.292045583333

Nama File: 0122170942.jpg Nama File: 0122170942a.jpg Nama File: 0122170948.jpg Nama File: 0122170948a.jpg

Nama File: 0122170950.jpg GPS Tanggal / Waktu: 2017: 01: 22 17: 50: 12Z Posisi GPS: 48.782829277777778 -117.287322972222 Nama File: 0122170950a.jpg GPS Tanggal / Waktu: 2017: 01: 22 17: 50: 16Z Posisi GPS : 48.7828483333333 -117.287322972222 Nama File: 0122170950b.jpg GPS Tanggal / Waktu: 2017: 01: 22 17: 50: 38Z Posisi GPS: 48.7828178333333 -117.28733825

sunwukong
sumber
0

Terima kasih Jason atas rumus untuk mengonversi menjadi desimal, dan ke /programming/45136895/extracting-gps-numerical-values-from-byte-array-using-powershell

function getGPS ($fullname) 
{
 'Fullname: ' + $fullname
 $imageProperties =New-Object -TypeName System.Drawing.Bitmap -ArgumentList $fullname
 if($imageProperties.PropertyItems|?{($_.id -eq 2) -or ($_.id -eq 4)}){
  [double]$LatDegrees = (([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(2).Value, 0)) / ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(2).Value, 4)));
  [double]$LatMinutes = ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(2).Value, 8)) / ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(2).Value, 12));
  [double]$LatSeconds = ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(2).Value, 16)) / ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(2).Value, 20));
  [double]$LonDegrees = (([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(4).Value, 0)) / ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(4).Value, 4)));
  [double]$LonMinutes = ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(4).Value, 8)) / ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(4).Value, 12));
  [double]$LonSeconds = ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(4).Value, 16)) / ([System.BitConverter]::ToInt32( $imageProperties.GetPropertyItem(4).Value, 20));
  "Latitude: $LatDegrees;$LatMinutes;$LatSeconds"
  "Longitude: $LonDegrees;$LonMinutes;$LonSeconds"
  "DECLatitude: " + ([int]$LatDegrees +($LatMinutes/60) +($LatSeconds/60))
  "DECLongitude: " + ([int]$LonDegrees +($LonMinutes/60) +($LonSeconds/60))
}}

getGPS D: \ pics \ mypic.jpg

Nama lengkap: P: \ IMG_0014.JPG Latitude: 42; 32.27; 0 Longitude: 82; 52.58; 0 DECLatitude: 42.5378333333333 DECLongitude: 82.8763333333333

Kirt Carson
sumber