QGISで写真を表示する方法

#1.はじめに
これまで写真の表示には「eVisプラグイン」を使ってきましたが、3.14から「eVisプラグイン」は使えなくなったようです。
[eVis plugin not showing in QGIS](https://gis.stackexchange.com/questions/386576/evis-plugin-not-showing-in-qgis)

Google翻訳大先生の力を借りて読んでみると、「正当な理由」で削除されたとのことです。
そして「正当な理由」のリンク先をみてみると、「レガシーコードでいっぱい」とか「古いコードでメンテナンスがされていない」とか書かれていますので、復活する可能性は低いように思います。

QGISでの写真の表示については、「eVisプラグイン」以外にもいくつかの方法があります。
この際良い機会と考えて、「eVisプラグイン」以外の表示方法について取りまとめてみます。

#2.写真の取り込み方法
「eVisプラグイン」が無くなったこととは関係ありませんが、作業の一連ということで、取り込み方法から記述します。

写真はプロセッシングツールの「ベクタ作成 － ジオタグ（位置情報）付きの写真」を使って処理します。
写真撮影位置にポイントが生成され、属性テーブルでは位置情報、撮影方向、タイムスタンプ、写真ファイルのパスなどが整理されます。

処理を終えて表示される地物は「○」で表示されますが、これだと場所のみの表示になっていて少し不満です。
写真はGPS付きデジタルカメラで撮影したものですから、撮影方向が属性テーブルに記載されています。この情報も一目でわかるようにしたいと思います。
![capture1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597262/c7a58a63-8f31-f595-cf52-b6feaab2a238.png)
そこで私は「凸」のような形をしたSVGファイルを自作して用意しています。これをシンボルにして、回転を属性テーブルの「direction」を指定すると撮影方向もわかるように表示できます。
![capture2.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597262/aff97e04-65f2-4a59-f70f-4d78ec8394ca.png)
#3.写真の表示
写真の表示について3つの方法を説明したいと思います。どの方法が良いかですが、試してみて気に入った方法を選ぶという程度で良いかと思います。
私個人としては、他のファイルにも応用しやすい「3.3.地物アクションの実行」を使いたいと思ってます。これまでPDFやExcelファイルとの連携に使っていました。
##3.0.事前準備
QGISのプロジェクトファイルと写真を収納したフォルダが同じ階層にあり、フォルダ名が「photo」であることとして説明します。

フィールド計算機を立ち上げ、「出力する属性（フィールド）の名前」を「path」、「フィールド型」を「テキスト（string）」、「フィールド長」を「30」（ここは状況に応じて適当な数値にして結構です）とします。
出力として「\photo\画像ファイル名.jpg」を得たいので、式ウィンドウに次のように入力して実行します。

```
'\\photo\\' || "filename" || '.jpg'
```

蛇足になりますが、特別な意味を持つ「\」を文字として扱う際は二重に重ねて書く必要があります。

3.1と3.2の方法を採用する場合は、このフィールドを使います。
一方、3.2の方法を採用する場合はフォルダ名の前に「\」が無い方が扱いやすいので、フィールド名を「path2」にして式ウインドウに次のように入力して実行します。

```
'photo\\' || "filename" || '.jpg'
```

フィールド名は例示ですので、ご自分で好きな名前を付けて結構です。

##3.1.「地図のTipsを表示」を利用する方法
レイヤのプロパティの「表示名」タブで設定します。
「地図のTipsのHTML定義」で、イメージソースの場所を「file:///」＋フルパスで記述するようにしています。
「height」は写真の縦サイズ、「width」は横サイズ（共に単位はピクセル）ですので、必要に応じて適宜修正してください。またタイトルが不要な場合、「title」は必須ではありませんので、省略してもらって結構です。


```
<img src = "file:///[% @project_folder %][% "Path" %]" height = "240" width = "320" title = "[% "filename" %]" >
```

属性ツールバーの「地図のTips表示」をアクティブにして、対象地物にマウスオーバーすると写真が表示されます。
![fig01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597262/667a4e41-2f06-aa0b-e3d0-50c07def5bf4.png)


##3.2.「地物情報を表示」を利用する方法
レイヤプロパティの「フォームと属性エディタの設定編集」タブで設定します。
「フォームのレイアウト」で「path2」をクリックしてアクティブにすると右側に項目が出てきますので、ここで設定します。
設定は「ウィジェットタイプ」をアタッチメントにして、「相対パス」にチェックを入れて「プロジェクトファイルからのパス」を選びます。さらに「ウィジェットタイプ」の一番下の方にある「総合ドキュメントビューア」の「型」を「画像」、「幅」と「高さ」を適宜設定します。

属性ツールバーの「地物情報表示」をアクティブにして、地物をクリックすると対象地物の情報が記載されたパネルが立ち上がります。写真は「path2」の項目のところに表示されます。

![fig02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597262/5922c050-ae4d-6a1f-60e1-9b7b129af995.png)

##3.3.「地物アクションの実行」を利用する方法
レイヤプロパティの「自動アクションを管理」タブで設定します。
「+」ボタンを押すと「新しいアクションを追加」が立ち上がりますので、「型」を「windows」にします。
![fig04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597262/8fde64a6-3f63-6ae8-76dc-8aded2cdd6e0.png)
アクションテキストには次のように記述します。

```
explorer "[% @project_folder %][%Path%]"
```

属性ツールバーの「地物アクションの実行」から「写真を開く」を選び、地物をクリックすると、jpegと関連付けられたアプリケーションが立ち上がり、写真を表示してくれます。
![fig03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597262/4f62ac5d-a178-d5c4-3227-18adc953f3e5.png)
#4.おまけ
私はsvgマーカーを使っていますが、「ジオメトリジェネレータ」を使って撮影方向を表現する方法もあります。
撮影方向を示すくさび形のポリゴンを生成する式は、次のようになります。

```
wedge_buffer( $geometry , "direction" , 45 , 半径 )
```

撮影位置のシングルマーカーに撮影方向を重ねると、次のように表現することができます。
![capture03.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/597262/4350e391-991b-a7c1-eec9-20dac4548753.png)