2017年5月18日木曜日

写真のGPSデータから地図に軌跡を描く

写真のGeotagにGPSデータが入っているとき、これらからデータを取り出して地図上に線でつなぐ方法。

各写真の位置を点で打つのは例えばLightroomが元から持っている機能です。しかし線でつなぐ=時間順に動きを描く方法です。

あんまりすっきりした方法ではありませんが。

Powered by Wikiloc

地図が画像ではなく実際の地図(上記例ではGoogleマップ)なところもポイントです。

以下の方法は無駄があるかもしれませんが、そこまで詰めていません。

写真からGPSデータを抽出する

GeotagからGPSデータを取り出す

写真があるフォルダーで exiftool を使ってGeotagのデータを取り出します。exiftoolはcsvで出すように指示できるのでそれを使います。

exiftool -gpsdatetime -gpslatitude -gpslongitude -n -csv -r DIR > out.csv

ここで

  • DIRは写真のあるdirectory
  • out.csvは結果の出力先ファイル名(例)
  • -gpsdatetimeはGPSから取得した日時を出力
  • -gpslatitudeは緯度を出力
  • -gpslongitudeは経度を出力
  • -nはEXIFにしまわれているデータ形式そのままで出力
  • -csvは結果をCSV形式で出力
  • -rDIR以下のdirectoryを再帰的に見るオプション指定

-csvは出力にファイル名が必ず含まれてしまいます。

-gpsdatetime-GPSDateTime)は日時を出すために私が追加しました。この値を使ってあとで時間順に並べ直します。

-nですが、これをつけないと緯度経度が「北緯何度何分、統計何度何分」という人間に見やすい形ででます。これは後の機械処理で多分エラーになるので「度(°)」の小数点付きの形式で出力させるためにつけてあります。

ここのテクニックは作者が exiftool のフォーラムで答えているものです。

データを整える

このままではあとの処理で使えない部分があるのでそこを調整します。

出来たcsvファイルをExcelで開きます。

  • 先頭の行(項目名が書いてある)を削除
  • 時間の桁に基いてソート(文字列として認識されるが桁が揃っているので文字ソートで大丈夫のはず)
  • ファイル名と日時の桁を全削除して緯度経度だけにする
  • データが空欄(「,」しかない行)を削除

これでsaveしなおします。

「,」しかない行というのは、GPSデータがない写真です。GPS機能がないカメラで撮ったものが混ざっていたり、GPSが掴めず記録できなかったケースなどで生じたケースです。

csvデータを貰って処理する場合こういう空欄を処理できずエラーするケースが割とあるので事前に取り除いておきます。

地図に軌跡を描かせる

GPSのCSVデータからGoogleマップなどに線を描くには GPSVisualizer を使います。

先ほどのCSVファイルをアップロードします。

地図の選択は、私は自分の好みでGoogle Mapを選びました。

地図が表示されます。しかしこの結果は保存されません。ダウンロードというボタンがありますがこれは埋め込めないです。

JPEGなどの画像出力も選べますが、試したところ地図の画像がありません。アメリカしか対応してないのか?という状態です。

そこでblogに埋め込めるようにするために、でてきた地図のすぐ上にある「Share 」ボタンを押します。

地図と軌跡を保存

GPSVisualizerで「Share 」ボタンを押すと Wikiloc へ飛びます。

すでに Wikiloc のアップロードページヘ飛んで準備完了になっているので "Continue" ボタンを押して次々質問に答えていくと地図+軌跡が Wikiloc のサーバー内に登録されます。

(ユーザー登録が必要ならユーザー登録をします。)

大きな地図が出ている状態では埋め込みコードが手に入りません。ここがわかりづらい作りになっています。

自分のprofileから登録した地図一覧を出します。そこで該当する地図名をクリックするとこぶりな地図がでてきます。

この画面で地図のすぐ右上の肩に「 Share」というボタンがあるのでそれをクリックすると出てくるSNSのアイコンと並んで「HTML」というボタンがあるのでそれを押すと埋め込みコードがでてきます。

このままだとGoogle Map が航空写真版になっていますので、あまり使いやすくないと思います。そこで "Show options" を押してサイズ、外見をアレンジします。

ここで地図のタイプを "Map" にすると地図になります。

"Show location" はこの地図の大雑把な住所が下に表示されます。「千代田区外神田」みたいな表示が付きます。

こうして得られた iframe のコードを貼り付ければ完成です。

0 件のコメント:

コメントを投稿