GMT ver5 で写真を取り扱う

GMTはベクトル図を描画するのには大変便利ですが、ちょっとしたラスタ画像を貼り付けたいとき、その方法を書いてくれている文書は余り有りませんでした。

まさかできないということはないだろうと調べてみたところ、それらしいものがありました。psimageというモジュールです。

デジカメ写真のEXIF情報からカメラ位置を取得し、UTM53系の日本地図に赤丸を付けたうえで、写真も貼り付けてみました。

そりゃぁ、こういう需要も有りますよね。

f:id:S_E_Hyphen:20180313162718j:plain

#!/bin/bash
psfile=photo.ps
photo=ORIGINAL.JPG
out=photo_small.jpg

# デジカメ写真のままだとサイズが大きいので少し間引く
convert -density 300x300 -resize x600 -quality 69 ${photo} ${out}

# EXIFから緯度・経度の取得
lon=`jhead $photo |\
 grep "GPS Longitude" |\
 awk -F":" '{print $2}' |\
 awk '{print $2,$3,$4}' |\
 sed -e "s/d /:/g" |\
 sed -e "s/m /:/g" |\
 sed -e "s/s//g"`
lat=`jhead $photo |\
 grep "GPS Latitude" |\
 awk -F":" '{print $2}' |\
 awk '{print $2,$3,$4}' |\
 sed -e "s/d /:/g" |\
 sed -e "s/m /:/g" |\
 sed -e "s/s//g"`

gmt gmtset MAP_FRAME_PEN 0.5p,#000000
gmt gmtset MAP_GRID_PEN_PRIMARY 0.5p,#000000
# 海岸線の描画
gmt pscoast -JU53/15c -R133/143/30/38 -Bxag1 -Byag1 -Dh -Glightbrown -Wthinnest \
        -Slightblue -W1p -K -P -Y12c > $psfile
# カメラ位置の描画
echo $lon $lat |\
 gmt psxy -J -R -B  -Sc0.2c -Gred -O -K >> $psfile
printf "%s %s\n%s %s" $lon $lat 136.8 34.0 |\
 gmt psxy -J -R -B -W2p+vb0.3c+g#00000 -O -K >> $psfile

# 写真貼り付け用座標
gmt gmtset MAP_FRAME_PEN 0p,#FFFFFF@0
gmt gmtset MAP_GRID_PEN_PRIMARY 0p,#FFFFFF@0
gmt psbasemap -JX20c/10c -R0/20/0/10 -Bx -By \
    -O -K -Y-3.0c >> $psfile
gmt psimage ${out} -J -R -Dx5.5c/10c+r300+w5.33i/3i+jTL -O -K >> $psfile
# 外部テキストファイルからコメントの取得
cat comment.txt |\
 gmt pstext -J -R -B -Gwhite -F+f12p,GothicBBB-Medium-UniJIS-UTF8-H,0/0/0+jML -O >> $psfile
convert $psfile -density 300x300 -quality 60 -crop 595x595 OUTPUT.jpg