【QGIS】カーソルの動きに連動するインタラクティブマップを作成する

:::note info
これは [FOSS4G Advent Calendar 2024](https://qiita.com/advent-calendar/2024/foss4g) の11日目の記事です。
:::

![outputtt.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762063/03f1193f-3703-afae-1b33-16756800630c.gif)

## はじめに
この記事では、マップキャンバス上でのカーソルの動きに連動するインタラクティブマップの作成方法をご紹介します。

## 環境

- macOS Sequoia
- QGIS 3.34.12 'Prizren'（LTR）

:::note warn
QGIS 3.24 以降のバージョンを使用してください。
:::

## それでは、やってみましょう！
#### 準備
特に必要ありません。
お好みのデータを使いたいという方は、2つのラスタデータもしくはラスタデータとベクトルデータを用意してください。

#### データ追加
- ブラウザパネルにあるXYZ Tilesのトグルを展開して、``Mapzen Global Terrain`` と ``OpenStreetMap`` を追加する
- レイヤの表示順序は、OpenStreetMapが上になるように順序を入れ替え、50万分の1程度（2~3都府県が表示される程度）まで拡大する

![スクリーンショット 2024-12-12 0.03.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762063/a2abd190-d514-704e-2f53-24ecd1816c34.png)

#### 新規GeoPackageレイヤの作成
- ［レイヤ］→［レイヤを作成］から［新規GeoPackageレイヤ...］を選択する
- ［•••］からフォルダを選択し、任意の名前をつけて保存する
（例では "circle" と名前をつけて保存した）
- ジオメトリ型は［ポリゴン（Polygon）］を選択する
- CRSは ``EPSG : 3857`` などのメートル単位の投影法を選択する
    - 地球儀マークを押下して、フィルタに "3857" と入力すると見つけることができる

![スクリーンショット 2024-12-11 23.19.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762063/15d3b04c-2bee-ba05-a6f6-4fdd373a157c.png)

- ［OK］を押下して、新規GeoPackageレイヤを作成する

#### 新規GeoPackageレイヤにスタイルを設定する
- 新規GeoPackageレイヤを選択状態で、レイヤパネルの［レイヤのスタイルパネルを開く］を押下して［レイヤスタイルパネル］を開く
- トグルリストから［反転ポリゴン］を選択する
- シンボルレイヤ型は［シンプル塗りつぶし］から［ジオメトリジェネレータ］に変更する

![スクリーンショット 2024-12-12 0.11.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762063/e5a1b644-2035-4442-a737-8c58cf1c3c7c.png)

- 表示メニューが切り替わったら、ジオメトリ型は［ポリゴン/マルチポリゴン］を選択する
- 単位は［地図上の単位（Map Units）］を選択する

#### buffer を作成する
- 式ボタンをクリックする
- ``$geometry`` を削除し、以下の式をコピー&ペーストする
    - 数字は buffer の半径（メートル単位）なので、必要に応じて変更する

```
    buffer(@canvas_cursor_point, 5000)
```

- ここまで設定すると、マップキャンバス上のどこをクリックしても buffer が表示されるようになる

![スクリーンショット 2024-12-12 0.25.18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762063/83e69788-b7c9-917a-0cbe-b5eda2ef672c.png)

#### 新規GeoPackageレイヤとOpenStreetMapをグループ化する
- ``shift`` を押しながらレイヤパネルで新規GeoPackageレイヤとOpenStreetMapを選択し、右クリックして［選択レイヤをグループにする］を選択する

![スクリーンショット 2024-12-12 0.26.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762063/bae99774-df83-289a-862c-cfcc0d5aabfa.png)

- （グループに任意の名前をつける）

#### レイヤをグループとしてレンダリングする
"レイヤをグループとしてレンダリングする" ことにより、グループ化したレイヤを1つの統合されたオブジェクトとしてレンダリングすることができます。これにより、グループ化された各レイヤは表示順序を維持したまま、画像のように表示されます。
この機能は、 QGIS 3.24 のアップデート時に追加されました。

https://www.qgis.org/project/visual-changelogs/visualchangelog324/#feature-rendering-layers-as-groups:~:text=Rendering-,Feature%3A%20Rendering%20layers%20as%20groups,-%C2%B6

手順に戻ります。

- レイヤスタイルパネルが開いたら、［グループとしてレイヤを描画］にチェックを入れる

#### ブレンドモードの選択
- 新規GeoPackageレイヤを選択する
- レイヤスタイルパネルをスクロールし、レイヤレンダリングのトグルを展開する
- レイヤの混交モードを［以下を反転マスク］に変更する
- ここまで設定すると、マップキャンバス上のクリックした地点では OpenStreetMap の下のレイヤ（Mapzen Global Terrain）が表示されるようになる

![スクリーンショット 2024-12-12 0.42.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762063/2b012913-3789-f83a-00a2-7d3fc2017736.png)

#### カーソル操作と連動させる
- 新規GeoPackageレイヤを右クリックし、プロパティを開く
- レンダリングタブに切り替え、［レイヤ更新間隔］にチェックを入れる
- 更新（秒）を［0.1］に設定し、［OK］を押下する

![スクリーンショット 2024-12-12 0.46.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762063/f8264d1c-be50-ea11-edc9-f86c0f8127da.png)

- マップキャンバス上でカーソルを動かすと、カーソルの動きに連動して buffer も移動し、OpenStreetMap が透過する

## まとめ
このように、カーソルの動きに連動するインタラクティブマップを作成することができます。
OpenStreetMap と重ねるレイヤが Mapzen Global Terrain だと少しわかりにくいので、ぜひ、別のデータでも試してみてください。

## おまけ
突然ですが、クイズです！
今日は2024年12月11日ですが、1993（平成5）年の今日はどんな出来事があったでしょう？
正解は...日本から、はじめて世界遺産が登録されました。

では、登録された資産名は何でしょう？ 4件ありますよ〜！

- 世界文化遺産（ヒント：奈良県）
- 世界文化遺産（ヒント：兵庫県）
- 世界自然遺産（ヒント：鹿児島県）
- 世界自然遺産（ヒント：青森県・秋田県）

正解は...ぜひ、下記のリンクからファイルをダウンロードして、資産名とおおよその場所を確認してみてください 🥳
プロジェクトを開き、表示範囲が整っていない場合は 1:10,000,000 の縮尺に設定します。赤いポイントを見つけたら、少しだけ拡大表示すると資産名が表示されます。

https://github.com/KeiTa4446/qgis-world-heritage-quiz.git

ファイルのダウンロード方法は、以下の画像を参考にしてください。

![スクリーンショット 2024-12-12 1.38.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3762063/8993e343-e69d-7544-3993-ef6635121ebf.png)

#### 参考文献・データ出典

https://www.qgistutorials.com/en/docs/3/interactive_reveal_maps.html

https://www.gsi.go.jp/kankyochiri/gm_jpn.html

https://geocode.csis.u-tokyo.ac.jp/geocode-cgi/geocode.cgi?action=start

https://www.bunka.go.jp/seisaku/bunkazai/shokai/sekai_isan/ichiran/