EXIF GPS情報を解析して緯度、経度、10進数にする方法


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

上記の例を度、分、秒としてどのように理解すればよいですか?

私が抽出したいくつかのexifデータには、上記のようにリストされたメタデータがあります。これらのフォーマットはどこかで指定されていますか?または、EXIFのさまざまな形式のgps位置を期待できますか?

私は、lat、lngをexifデータに基づいて10進数として与えるメソッドを書く必要があります。解析できるさまざまな形式がいくつあるか予想できません(これは時間とともに学習します)。この質問はほとんどです上記の例について。度数が55と8であることはわかっていますが、30分と0.22 * 60秒かどうかはわかりません。その場合、なぜそこに0があるのでしょうか。


どんなOS?exiftool sno.phy.queensu.ca/~phil/exiftoolに興味があるかもしれません。写真から座標情報を抽出するために私がうまく使用したWinまたはMac用の実行可能ファイル(私の場合はWindowsバッチファイル)があります。
jbchurchill 2015

2
情報の解析にどのプラットフォームを使用していますか?何に変換したいですか?
ブランコ

私は緯度、経度、10進数/倍精度値に変換していますが、C#でした。私は答えが提供する情報が必要でした。
ポールK.ソレンセン2015

回答:


3

このページによると、緯度と経度の値は、(1)度、(2)度と10進数の分、または(3)度、分、10進数の秒で表すことができます。

あなたの例では、(2)は10進数の値で、(3)はゼロなので、度、10進数の分があります。

したがって、使用されている形式を判別するには、3つの値をいくつかチェックする必要があります。


exif標準によると、度、分、秒を含む3つの「有理」フィールドがそれぞれにあります。exiftoolは、これらの値を割り当てる際に、不正操作の10進度をD、M、Sに正規化します(exiftool -GPSLongitude = "0.5 90 63.12345" junk.jpg "-> GPS経度:2度1 '3.12" W ")したがって、小数度が必要な場合、dd = x0 + x1 / 60. + x2 / 3600を実行し、非正規化を無視できます
Dave X

4

EXIF rational64uは、次の順序で6つの符号なし整数のリストであるGPS座標を保存します。

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

形式は一貫しており、使用しているツールは各ペアをすでに10進数に分割しているようです。

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

1つの10進数に変換する場合:

= Degrees + Minutes/60 + Seconds/3600

0

このバッチファイルを使用して、ファイル名、日付/時刻、小数度を取得しました

ポジション。

************** start lalo.bat '-nは強制的に符号付き10進度のexiftを強制します-nd:\ util \ 00ymp * .jpg> fud' strfile 1行ごとに1文字列(スペース可) G: "strfile" fud >> fum ********** end lalo.bat

出力を生成します

ファイル名:0104171345.jpg GPS日付/時刻:2017:01:04 21:45:19Z GPS位置:46.9997367777778 -117.3392105ファイル名:0104171355.jpg GPS日付/時刻:2017:01:04 21:55:52Z GPS位置:46.99622725 -117.307495111111ファイル名:0104171402.jpg GPS日付/時刻:2017:01:04 22:02:02Z GPS位置:47.0075378333333 -117.284553527778ファイル名:0104171404.jpg GPS日付/時刻:2017:01:04 22:04 :51Z GPS位置:47.0222473055556 -117.275527944444ファイル名:0104171405.jpg GPS日付/時刻:2017:01:04 22:05:40Z GPS位置:47.0269584444444 -117.269523611111

ファイル名:0112171921.jpgファイル名:0112171921a.jpgファイル名:0112171921b.jpgファイル名:0120171623.jpgファイル名:0120171623a.jpgファイル名:0120171624.jpg

ファイル名:0120171626.jpg GPS日付/時刻:2017:01:21 00:26:49Z GPS位置:48.7900199722222 -117.290061944444ファイル名:0120171628.jpg GPS日付/時刻:2017:01:21 00:28:44Z GPS位置:48.7907943611111 -117.292045583333

ファイル名:0122170942.jpgファイル名:0122170942a.jpgファイル名:0122170948.jpgファイル名:0122170948a.jpg

ファイル名:0122170950.jpg GPS日付/時刻:2017:01:22 17:50:12Z GPS位置:48.7828292777778 -117.287322972222ファイル名:0122170950a.jpg GPS日付/時刻:2017:01:22 17:50:16Z GPS位置:48.7828483333333 -117.287322972222ファイル名:0122170950b.jpg GPS日付/時刻:2017:01:22 17:50:38Z GPS位置:48.7828178333333 -117.28733825


0

10進数に変換する式と/programming/45136895/extracting-gps-numerical-values-from-byte-array-using-powershellに Jasonに感謝

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

フルネーム:P:\ IMG_0014.JPG緯度:42; 32.27; 0経度:82; 52.58; 0 DECLatitude:42.5378333333333 DECLongitude:82.8763333333333


0

-nスイッチを使用すると、Exiftoolは座標を低精度の10進数で出力します。-cスイッチを使用して精度を高め、小数点以下の桁数を指定することができます。

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

小数点以下6桁で位置を示します。これは、5インチ以内の場所を見つけるのに適しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.