ExifTool で任意の geotag 埋め込み

撮影した写真への位置情報の書き込みにいつもは GPSロガーで記録したGPSログを使い，gpscorrelateコマンドを利用しています．

以下のスライドは2008年のものですが現在もそのままの手順で埋め込んでいます．

Koedo71 from Kenichiro MATOHARA

建物内などに入ったときなどGPSログが取れないので埋め込みも出来ていませんでした．でも今回建物内で撮影したのが分かっている写真にその場所の位置情報を埋め込みたいと思いました．

gpscorrelateコマンドのマニュアルを見た感じそれらしいオプションは見当たりませんでした．ダミーのGPSログを書くとかもちょっと考えたのですが，exiv2コマンドで座標指定でいけるのではとmanを見ると行けそうです．

exiv2 -M"set Exif.GPSInfo.GPSLatitude 4/1 15/1 33/1" \
-M"set Exif.GPSInfo.GPSLatitudeRef N" image.jpg
Sets the latitude to 4 degrees, 15 minutes and 33 seconds north. The Exif standard stipulates that the GPS‐
Latitude tag consists of three Rational numbers for the degrees, minutes and seconds of the latitude and GPS‐
LatitudeRef contains either 'N' or 'S' for north or south latitude respectively.

しかし座標の度分秒変換が必要でちょっとめんどうです．
ExifToolを見ると変換なしで行けそうなのでこれで試してみました．（-geotag optionでgpscorrelateと同じこともできそう）

-geotag TRKFILE
Geotag images from the specified GPS track log file. Using the -geotag option is equivalent to writing a value
to the "Geotag" tag. After the -geotag option has been specified, the value of the "Geotime" tag is written to
define a date/time for the position interpolation. If "Geotime" is not specified, the value is copied from
"DateTimeOriginal#" (the "#" is added to copy the unformatted value, avoiding potential conflicts with the -d
option). For example, the following two commands are equivalent:

exiftool -geotag trk.log image.jpg
exiftool -geotag trk.log "-Geotime<DateTimeOriginal#" image.jpg

When the "Geotime" value is converted to UTC, the local system timezone is assumed unless the date/time value
contains a timezone. Writing "Geotime" causes the following tags to be written (provided they can be
calculated from the track log, and they are supported by the destination metadata format): GPSLatitude,
GPSLatitudeRef, GPSLongitude, GPSLongitudeRef, GPSAltitude, GPSAltitudeRef, GPSDateStamp, GPSTimeStamp,
GPSDateTime, GPSTrack, GPSTrackRef, GPSSpeed, GPSSpeedRef, GPSImgDirection, GPSImgDirectionRef, GPSPitch and
GPSRoll. By default, tags are created in EXIF, and updated in XMP only if they already exist. However,
"EXIF:Geotime" or "XMP:Geotime" may be specified to write only EXIF or XMP tags respectively. Note that
GPSPitch and GPSRoll are non-standard, and require user-defined tags in order to be written.

すでに埋め込み済みのジオタグを参考にして，

$ exiftool -v IMGP5011.JPG|grep GPS
| 12) GPSInfo (SubDirectory) -->
| + [GPS directory with 11 entries]
| | 0) GPSVersionID = 2 0 0 0
| | Warning = Tag ID 0x0000 out of sequence in GPS
| | 1) GPSVersionID = 2 3 0 0
| | 2) GPSLatitudeRef = N
| | 3) GPSLatitude = 31 19 18.23 (31/1 19/1 1823/100)
| | 4) GPSLongitudeRef = E
| | 5) GPSLongitude = 130 53 57.6 (130/1 53/1 5760/100)
| | 6) GPSAltitudeRef = 0
| | 7) GPSAltitude = 7.8833 (78833/10000)
| | 8) GPSTimeStamp = 7 10 37 (7/1 10/1 37/1)
| | 9) GPSMapDatum = WGS-84
| | 10) GPSDateStamp = 2018:01:13

こんな感じかな?

GPSLongitudeRef=E -> 東経, 西経

GPSLongitude=130.86455555555557 -> 経度

GPSLatitudeRef=N -> 北緯, 南緯

GPSLatitude=31.386555555555553 -> 緯度

GPSAltitude=41.47 -> 海抜標高

実際にExifToolで埋め込んでみました．

$ exiftool -GPSLongitudeRef=E -GPSLongitude=130.86455555555557 -GPSLatitudeRef=N -GPSLatitude=31.386555555555553 -GPSAltitude=41.47 IMGP5021.JPG

座標系がないとまずいかなと思いましたがJOSMやGpsPruneにこの写真を読み込んでみると想定していた座標にプロットされました :)

exiftoolは既定値ではIMGP5021.JPG_originalのようにオリジナルファイルのバックアップが作成されるので　　問題なかったらこれは消しておきましょう．

$ rm *_original

ExifTool by Phil Harvey

GPS Tags