QGISとImageMagickを使って海底地形図および陰影起伏図つきのポスターサイズ日本地図を作る

# 概要

ビックカメラで配布している日本地図つきのカレンダーのような、ポスターサイズの日本地図を作りたい。

国土地理院の陰影起伏図とNOAAの海底地形データを単純に組み合わせた地図では、湖や河川などの水域が塗られない。海底地形データに地理院地図Vectorを重ねた地図の場合、地理院地図の水域に日本近海も含むため、海底地形図が上書きされ隠れてしまう。

QGISを使って主なレイヤを個別に画像としてエクスポートするとともに、ImageMagickを使って各画像を加工し、重ねあわせることで目的の日本地図を作成する。

# はじめに

ビックカメラでは毎年初冬に日本地図つきのカレンダーを配布している。筆者は毎年それを楽しみにしており、自宅でも活用している（職場にも貼られていたような気がする）。

似たような感じの自分流の日本地図を作ってみる。

# 出力画像サイズ

日本地図はPDFなどベクトル形式ではなく、取り扱いが容易な画像形式で出力する。A0版の印刷に耐えられる解像度の画像を作成したい。参考サイトの記述も参考にして次のように解像度を定めた。

https://www.ooban-senmon.com/?mode=f24

- 解像度: 300[dpi]
- A0版: 841[mm] x 1189[mm] = 33.11..[インチ] x 46.81..[インチ]
	- 25.4[mm/インチ]とする
- 画像サイズ: 9933[px] x 14043[px] （1dot=1pixelとする）
	- 幅: (841[mm]/ 25.4[mm/インチ]) x 300[dpi] = 9933 dot
	- 高さ: (1189[mm] / 25.4[mm/インチ]) x 300[dpi] = 14043 dot

ちなみに、最終的には作成した画像をPower Pointで取り込み、注記や説明などを追加した後にPDF出力したものを、印刷屋に依頼する想定でいる。
ちなみに、当初は600[dpi]で作成していたが、Power Pointの操作性が非常に悪くなったため300[dpi]に軽量化した。

# レイヤー別の地図を作成

## QGISのインストールと起動

オリジナルの地図を作りたい場合GIS（地理情報システム：Geographic Information System）を使うと便利。ここではオープンソースのGISであるQGIS（Quantom GIS）を使う。

https://www.qgis.org/download/

QGISのサイトより最新安定版をダウンロードしてインストールする。執筆時点での最新版は3.34LTRであった。インストール手順に注意するべき点はとくにない。インストールウィザードにしたがうのみ。インストールには意外に時間が必要で、数分を費やした。

インストールできたらQGISを立ち上げる。なお筆者の環境はWindows 11である。

![スクリーンショット 2024-09-05 151455.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/3b716da4-2e66-8f02-ff99-b3583de4f12d.png)

## 地理院地図ベクターの導入

以下資料のp.13からp.16までくらいを参考にして、QGISに地理院地図ベクターを導入した。

https://www.nikko-hd.com/docs/QGIS3_16_chiriinvector.pdf

1. アプリケーション左上にあるブラウザパネルの`Vector Tiles`を右クリック
2. コンテキストメニューにある`新規一般接続`を選択
![スクリーンショット 2024-09-05 152245.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/10b0d4f2-76dc-47fe-8bc8-4d967ce8969d.png)
3. 出現した`ベクトルタイル接続`ダイアログに以下の値を設定して`OK`を押下
	- `名前:` 地理院ベクトルタイル
	- `URL:` https://cyberjapandata.gsi.go.jp/xyz/experimental_bvmap/{z}/{x}/{y}.pbf
	- `最小ズームレベル:` 4
	- `最大ズームレベル:` 16
4. ブラウザパネルの`Vector Tiles`ノードの配下に、前項で追加した`地理院ベクトルタイル`が出現
![スクリーンショット 2024-09-05 153009.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/36458001-d68b-9ee7-7d41-781baab95ce7.png)
5. 前項の`地理院ベクトルタイル`ノードをダブルクリックすると、`レイヤ`パネルに`地理院ベクトルタイル`レイヤを追加し、極小の日本地図を表示
![スクリーンショット 2024-09-05 153327.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/514c0ce4-615a-5fed-e01b-28132ba71689.png)
6. 地図領域中央にある黄土色のゴチャゴチャしている日本地図の上で、マウススクロールすると日本っぽい形が出現
![スクリーンショット 2024-09-05 153703.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/1b8ef565-e660-9893-5c30-70ffc3888e9d.png)

## 陰影起伏図の導入

以下のページ（陰影起伏図でページ内検索）に記載の諸元を設定して、陰影起伏図を導入する。

https://maps.gsi.go.jp/development/ichiran.html

1. アプリケーション左上にあるブラウザパネルの`XYZ Tiles`を右クリックし、コンテキストメニューにある`新規接続`を選択
![スクリーンショット 2024-09-05 165705.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/a14d042a-d61d-235f-36d3-590b199a2566.png)
3. 出現した`XYZ接続`ダイアログに以下の値を設定して`OK`を押下
	- `名前:` 地理院陰影起伏図
	- `URL:` https://cyberjapandata.gsi.go.jp/xyz/hillshademap/{z}/{x}/{y}.png
	- `最小ズームレベル:` 2
	- `最大ズームレベル:` 16
    - ![スクリーンショット 2024-09-05 165854.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/3fabf8b6-0ace-b0b4-817e-5da93b4c6d47.png)
4. ブラウザパネルの`XYZ Tiles`ノードの配下に、前項で追加した`地理院陰影起伏図`が出現
![スクリーンショット 2024-09-05 165958.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/eaf6cd4b-8f3c-c328-3f83-20fa6277989d.png)
5. 前項の`地理院陰影起伏図`ノードをダブルクリックすると、`レイヤ`パネルに`地理院陰影起伏図`レイヤを追加し、グレースケールの日本地図を表示
![スクリーンショット 2024-09-05 170106.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/f44ddbab-4df1-d9ad-bcbb-bf75572df9de.png)

## 地図範囲の設定

地図として出力する範囲を指定する。

:::note information
以下は泥臭い方法である。もっとスマートな方法もあると思うが、見つけられていない。
:::

1. 地図を拡大・ドラッグして地図として出力したい北端と東端を表示
![スクリーンショット 2024-09-05 155102.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/7ca55311-b10d-3e17-91a7-35eb6c409a1d.png)
2. `メニュー` > `プロジェクト` > `インポートとエクスポート` > `地図を画像にエクスポート`の順に選択して、`地図を画像として保存`ダイアログを表示
![スクリーンショット 2024-09-05 155134.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/e5ae1384-c59a-f0b2-1d3d-bac1514ef14e.png)
3. `領域（現在：マップビュー）`パネルの`北`および`東`にある数値をメモし、`キャンセル`を押下してダイアログを閉じる
	* `北:` 5707768.7965, `東:` 16233775.6058 であった。
	* ![スクリーンショット 2024-09-05 160654.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/5a8c94ae-7937-7eeb-7979-d9ae91306dc0.png)
4. 1項と同様に地図をドラッグして出力したい西端と南端を表示
![スクリーンショット 2024-09-05 161201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/690a3ec8-886e-f482-e85b-f24831c85be6.png)
5. 2項と同様にして`地図を画像として保存`ダイアログを表示
6. `領域（現在：マップビュー）`パネルの`西`および`南`にある数値をメモし、`キャンセル`を押下してダイアログを閉じる
	* `西:` 14418522.2725, `南:` 3638092.1298 であった。
	* ![スクリーンショット 2024-09-05 161303.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/a4876cab-1777-954f-9b7d-264fd9658212.png)
7. アプリケーション左上にあるブラウザパネルの`空間ブックマーク`ノードを展開して出現する`ユーザ・ブックマーク`ノードを右クリック
![スクリーンショット 2024-09-05 161654.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/90cd39c6-5bc0-f32b-58be-571737859876.png)
8. コンテキストメニューにある`新規空間ブックマーク`項目を選択し、`ブックマーク・エディタ`ダイアログを表示、各項目に値を入力（3項および6項で取得した値）して`保存`押下でダイアログを消す
	* `名前:` 北海道から九州まで
	* `北:` 5707768.7965
	* `西:` 14418522.2725
	* `東:` 16233775.6058
	* `南:` 3638092.1298
	* EPSG:3857
![スクリーンショット 2024-09-05 162506.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/f400e6a8-9372-783d-1d10-50a4a85d60d8.png)
9. `メニュー` > `プロジェクト` > `閉じる` で現在のプロジェクトを保存せずに閉じる

ここまでが大まかな準備で、次節から画像を作成する。水域つきの陰影起伏図、海底地形図、海岸線（日本の陸地）図の3枚である。

## 水域つきの陰影起伏図の作成とエクスポート

ここでは、陰影起伏図に、湖や河川など水域を重ねた画像をエクスポートする。

### プロジェクトの作成と陰影起伏図レイヤの作成

1. `メニュー` > `プロジェクト` > `新規` を選択して新しいプロジェクトを開始
![スクリーンショット 2024-09-05 174400.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/ca486756-4265-2fd2-c61a-6f1700026882.png)
2. `ブラウザ`パネルの`XYZ Tiles`ノード配下にある`地理院陰影起伏図`をダブルクリックしてレイヤに追加
2. `ブラウザ`パネルの`空間ブックマーク`ノード > `ユーザー・ブックマーク`ノード配下にある`北海道から九州まで`をダブルクリックして地図表示
![スクリーンショット 2024-09-05 174926.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/285bcd83-e979-a400-823f-70bdd591701a.png)

### 陰影起伏図の着色

白黒表示はイマイチなのでいい感じにしてみる。

:::note information
試行錯誤で設定したもので、もっと良い方法があると思う。
:::

1. `レイヤ`パネル > `地理院陰影起伏図` 上で右クリックして、コンテキストメニューの`プロパティ`を選択
    * ![スクリーンショット 2024-09-09 134722.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/ba5afebb-9bed-bf8c-19a3-8f0cb0891c23.png)
2. `レイヤプロパティ`ダイアログが出現するので、`シンボロジ`プロパティを選択、各項目に値を設定（以下は今回の例）
	* `混合モード:` 通常（Normal）
	* `輝度:` 0
	* `コントラスト:` 16
	* `ガンマ:` 2.00
	* `彩度:` 0
	* `グレースケール:` オフ
	* `色相:` 着色（`R:` 249, `G:` 255, `B:` 133）
	* `強調:` 50%
	* ![スクリーンショット 2024-09-06 094412.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/4b4a6117-c8cb-fa50-f635-f3012898173d.png)
    * ![スクリーンショット 2024-09-06 094405.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/034bf1ef-d6ee-f7b8-93cf-c014fe891885.png)
3. `OK`を押下してダイアログを閉じると着色した陰影になる
	* ![スクリーンショット 2024-09-09 140000.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/10d5fb46-b955-9f02-21d5-9ecbf3506014.png)

### 水域を重ね合わせ
前項の地図に湖や河川など水域を重ねる
1. `ブラウザ`パネルの`Vector Tiles`ノード配下の`地理院ベクトルタイル`項目をダブルクリックして、`レイヤ`パネルに取り込む
    * ![スクリーンショット 2024-09-09 142304.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/8950a79e-b046-823e-b912-f9502ee1795b.png)
2. 画面中央下の`縮尺`ドロップリストの一番上`1:1000000`を選択
3. `レイヤ`パネル上の`地理院ベクトルタイル`レイヤ上で右クリックしてコンテキストメニューから`プロパティ`を選択
    * ![スクリーンショット 2024-09-09 142503.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/6f12636e-5ffd-f7ad-7644-fe460cb3ebc8.png)
4. `レイヤプロパティ`ダイアログが出現
    * ![スクリーンショット 2024-09-09 142633.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/c089e341-4bbb-7c33-a500-c96a9d633138.png)
5. あらかじめ登録してあるフィルタルール`Polygons`、`Lines`、`Points`を削除あるいはチェックボックスを外して無効にするとともに、`ルール追加`ドロップリストから`塗りつぶし`項目を選択してフィルタルールを追加する
    * ![スクリーンショット 2024-09-09 142937.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/107ff0dc-6909-5ba7-540f-a672e33c0174.png)
6. 追加したフィルタルールに以下の値を設定する、適用ボタンを押下すると支笏湖や洞爺湖、湖や河川および海が塗られていることが確認できる
	* `ラベル:` 水域
	* `レイヤ:` waterarea
	* ![スクリーンショット 2024-09-13 121832.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/37edaffa-43aa-a0b3-1ee5-34904e4dd683.png)
	* ![スクリーンショット 2024-09-13 122222.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/6bc90380-93c4-98e8-9134-eb244dd837fb.png)
7. `水域`フィルタルールをダブルクリックして、`シンボルセレクタ`ダイアログを表示し、項目を設定した後に`OK`ボタンを押下
	* 画面上部の`塗りつぶし`ノード配下の `シンプル塗りつぶし`項目を選択
	* 塗りつぶし色項目を選択、塗りつぶし色を選択ダイアログで`R:` 190, `G:` 210, `B:` 255の色を設定し`OK`ボタンを押下、ダイアログが閉じる
	* `ストロークスタイル`ドロップリストから`線なし`を選択
	* シンボルセレクタダイアログ`OK`ボタンを押下、ダイアログが閉じる
	* ![スクリーンショット 2024-09-09 145458.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/b18079ec-2911-0467-b3c4-78488fc63e22.png)
8. `レイヤプロパティ`ダイアログで`OK`ボタン押下で、ダイアログが閉じ、湖や河川など水域の色が変わる
    * ![スクリーンショット 2024-09-13 122707.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/ab3b74a8-b62f-96c7-c08b-266f87f4ce6f.png)
9. なお、`レイヤプロパティ`ダイアログの右下に`現在のズーム: 8`のようなラベル項目がある、これが別節（[ズームレベルと事物](#ズームレベルと事物)）で言及しているズームレベル(ZL)である

### 地図のエクスポート
1. `メニュー` > `プロジェクト` > `インポートとエクスポート` > `地図を画像にエクスポート`の順に選択する
![スクリーンショット 2024-09-09 151714.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/2a8ba338-dadf-e887-e99b-c03c65ce92e7.png)
2. `地図を画像として保存`ダイアログを表示し、以下の操作を行う
    * `縮尺`ドロップリストから1:1000000を選択
    * `ブックマーク`ドロップリストから、保存済みの`北海道から九州まで`を選択、先に定めた領域を設定
    * `解像度`を調整して出力幅が上述の9933[px]に近くなるように設定
    	* 今回は140dpi : 10003[px] x 11407[px]を選択
    * ![スクリーンショット 2024-09-09 152042.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/db8180c2-9cd8-ef11-7d8b-20cbce31ee54.png)

3. `保存`ボタンを押下して、適当な名前で保存
	* 今回は`000-base.png`として保存
4. 最後にプロジェクトを保存して閉じる
	* 今回は`000-base.qgz`として保存

作成した地図は以下の通り（記事用に縮小している）
![000-base-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/4e026c78-36f4-195f-ac4c-bcbe848b2f67.png)

### ズームレベルと事物

GISの世界では、位置情報を持つオブジェクトを地物と呼ぶらしい。地理院地図ではズームレベルごとに表示できる地物には制限がある。
ズームレベルと地物との関係の詳細は以下のPDFファイルを参照してほしい。日本全体を表示するような地図では大まかな情報のみを表示したいという需要を考えれば、地物への制限も理解できる。

https://maps.gsi.go.jp/help/pdf/vector/dataspec.pdf

このデータ仕様を確認すれば、ズームレベルに対して表示可能な地物がわかるし、逆に、表示したい地物に必要なズームレベルを決めることもできる。
ズームレベルの中で表示する地物は、`source-layer`項目でのレイヤ名で一括指定することもできるし、`ftCode`項目の値で指定することもできる。

前項で指定した水域(`waterarea`)も、この資料に記載がある値である。

なお、QGIS上で確認してみると、水域において河川流域はズームレベル8以上でないと塗られないようである。ただし、ズームレベル8以上では近海も塗られてしまう。

今回は、湖や河川は水色で塗りつぶし、近海は海底深度の色で塗りたいため、近海についてはこの記事にあるように別の画像を重ねることにしている。

## 海底地形図の作成とエクスポート

http://okamura-lab.cocolog-nifty.com/blog/2019/10/post-f50e29.html

上リンク先に記載の方法を参考にして設定する。

### 海底地形データを入手

https://www.ncei.noaa.gov/maps/grid-extract/

上述のnoaaのサイトにアクセスし、範囲指定して海底地形データを入手する。
1. `select a dataset...`ドロップリストから、`ETOPO_2022 (Bedrock; 60 arcseconds)`を選択
	* なんとなく60 arcsecondsがデータ量が多い気がして選んだので適切かどうかは不明
    * ![FireShot Capture 312 - Grid Extract - www.ncei.noaa.gov.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/8586147d-6ffb-4561-af96-8ba55a83824a.png)
2. 地図をドラッグして日本を表示
3. 地図左上にある`drawExtentTool`ボタン（地図拡大【＋】縮小【－】ボタンの下、図では選択して赤色になっている）をクリックし、およその範囲を選択
	* ![スクリーンショット 2024-09-05 173205.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/fc7aade6-f686-9388-7659-9dd2d89fdfb5.png)
4. 画面左側にある`Download Data`ボタンをクリック
	* 7.4MBほどの`exportImage.tiff`を取得（ちなみに全球だと467MBほどある）

### 海底地形データをQGISに導入
1. QGISを起動し、`メニュー` > `プロジェクト` > `新規`から、新規プロジェクトを開始
2. プロジェクトの座標系をEPSG3857にするために、地理院ベクトルタイルを`ブラウザ`パネルから読み込む。表示はしないために、レイヤパネルでチェックボックスを解除しておく
	* 座標系の扱いについては理解が進んでないので、もっとよい方法があるはず…
3. `メニュー` > `レイヤ` > `レイヤを追加` > `ラスタレイヤを追加` の順に選択し`データソースマネージャ`を表示する、
    * ![スクリーンショット 2024-09-09 154358.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/9da35225-bb52-1146-4cf4-25fbaa5cfdb8.png)
4. `ソース`項目に第1項で取得したファイルを指定し、`追加`ボタンを押下したあとに`閉じる`ボタンを押下
    * ![スクリーンショット 2024-09-09 154538.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/bef577ad-60c4-69b6-5bba-a902e21541e0.png)
5. グレースケールの海底地形図を確認できる
![スクリーンショット 2024-09-09 154846.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/4e60c2ae-c953-3dfb-df6e-7026632bfd08.png)
6. `レイヤ`パネル > `exportImage`項目を右クリックしてコンテキストメニューから`プロパティ`項目を選択`レイヤプロパティ`ダイアログを表示
	* ![スクリーンショット 2024-09-09 155843.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/a2a9502b-eb7f-8e6d-0c04-4b4eec97e218.png)
7. レイヤスタイルを以下のようにして、いい感じの色合いにした
	* `--- バンドレンダリング ---`
	* `レンダリングタイプ:` 単バンドグレー
	* `グレーバンド:` バンド1(Gray)
	* `グラデーション:` 黒から白
	* `最小:` -9677 （この値は取得した範囲によって変わってくると思う）
	* `最大:` 0 （地上は別途塗っており、使用する色範囲を海面以下に限定するため）
	* `コントラスト:` 最小最大範囲に引き延ばす
	* `--- レイヤレンダリング ---`
	* `混合モード:` 通常(Normal)
	* `輝度:` 0 
	* `コントラスト:` -20
	* `ガンマ:` 1.20
	* `彩度:` 0
	* `カラーを反転:` オフ
	* `グレースケール:` オフ
	* `着色:` オン
	* `色の設定`ダイアログ：`R:` 190, `G:` 210, `B:` 255
	* `強調:` 100%
	* `--- リサンプリング ---`
	* `拡大:` 最近傍法(Nearest Neighbour)
	* `縮小:` 最近傍法(Nearest Neighbour)
	* `オーバーサンプリング:` 1.00
	* `早期リサンプリング:` オフ
    * ![スクリーンショット 2024-09-13 172446.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/f0fd6528-ca23-b37f-c4bc-6a5c87062bc4.png)
8. 結果以下のような感じになった。
    * ![スクリーンショット 2024-09-09 161427.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/5a4830b7-d8cf-7fbe-64c9-bf4ee01b65b3.png)

### 海底地形図のエクスポート

1. 次に地図を画像としてエクスポートする。`メニュー` > `プロジェクト` > `インポートとエクスポート` > `地図を画像にエクスポート`の順に選択
    * ![スクリーンショット 2024-09-09 161620.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/9748b615-b969-f035-a355-f9fdfb967b08.png)
1. `地図を画像として保存`ダイアログを表示
	* `縮尺`ドロップリストから1:1000000を選択
	* `ブックマーク`ドロップリストから`北海道から九州まで`を選択（必ず縮尺を変更した後に操作すること） 
	* `解像度`を調整して出力幅が上述の9933[px]に近くなるように設定
		* 今回は140[dpi] : 10003[px] x 11406[px]を選択
		* ![スクリーンショット 2024-09-13 173353.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/ab2cd973-4df0-f205-38b0-e659123e674e.png)
17. `保存`ボタンを押下して、適当な名前で保存
	* 今回は`300-seamap.png`として保存
18. 最後にプロジェクトを保存して閉じる
	* 今回は`300-seamap.qgz`として保存

作成した地図は以下の通り（記事用に縮小している）
![300-seamap-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/f8b42db9-91f1-40fe-40af-23cb56014697.png)

## 海岸線（日本の陸地）図の作成

これまで作成してきた陰影起伏図に、海底地形図を重ねて目的の地図としたい。
海底地形図のうち、陸地部分を透明にすることで、この目的を達成する。
まずは、陸地部分だけの地図を作成する。

1. `メニュー` > `プロジェクト` > `新規` を選択して新しいプロジェクトを開始
2. `ブラウザ`パネルの`XYZ Tiles`ノード配下にある`地理院陰影起伏図`をダブルクリックしてレイヤに追加
3. `レイヤ`パネル > `地理院陰影起伏図` 上で右クリックして、コンテキストメニューの`プロパティ`を選択、`レイヤプロパティ`ダイアログを表示
4. `シンボロジ`プロパティを選択
	* `Polygons`フィルタルール: OFF
	* `Lines`フィルタルール: ON、`レイヤ`属性: `coastline`
	* `Points`フィルタルール: OFF
    * ![スクリーンショット 2024-09-12 143911.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/7e557ce7-0505-e183-76ab-7ae596210532.png)
5. `Lines`フィルタルールをダブルクリックして`シンボルセレクタ`ダイアログを表示、以下のように設定して`OK`押下
	* `色`: 黒(R:0, G:0, B:0)
	* `ストローク幅:` 1.0 ピクセル
	* `ストロークスタイル:` 実線
	* ![スクリーンショット 2024-09-12 145818.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/6f231fde-2357-dc38-bb4e-91bc429c6473.png)
6. `メニュー` > `プロジェクト` > `インポートとエクスポート` > `地図を画像にエクスポート`の順に選択して、`地図を画像として保存`ダイアログを表示
7. `縮尺`ドロップリストから1:2000000を選択
15. `ブックマーク`ドロップリストから、保存済みの`北海道から九州まで`を選択、先に定めた領域を設定
16. `解像度`を調整して出力幅が上述の9933[px]に近くなるように設定
	* 今回は279dpi: 9962[px] x 11353[px]を選択
17. `保存`ボタンを押下して、適当な名前で保存
	* 今回は`320-coastline.png`として保存
18. 最後にプロジェクトを保存して閉じる
	* 今回は`320-coastline.qgz`として保存

記事用に稚内付近をトリムしたものが以下の図。
![320-coastline-trim.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/44cf3247-8723-0a18-8f64-cec8ea5ac032.png)

以下図は記事用に縮小したもので、海岸線がうっすらと見える。
![320-coastline-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/68d7470a-80fb-6e62-774e-8368393d7336.png)

## ここまでのまとめ

この章ではQGISを使って以下の地図を作成、画像としてエクスポートした。
* 水域つきの陰影起伏図: 000-base.png
![000-base-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/4e026c78-36f4-195f-ac4c-bcbe848b2f67.png)
* 海底地形図: 300-seamap.png
![300-seamap-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/f8b42db9-91f1-40fe-40af-23cb56014697.png)
* 海岸線（日本の陸地）図: 320-seacoast.png
![320-coastline-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/68d7470a-80fb-6e62-774e-8368393d7336.png)

次章ではImageMagickを使って画像を加工、重ね合わせて最終出力を作成する。

# レイヤ画像の加工と最終画像の作成

## ImageMagickのインストール

ImageMagickはコマンドラインで画像を処理するアプリケーション。以下のリンクから選択してインストールできる。

https://imagemagick.org/script/download.php

ここでは、`ImageMagick-7.1.1-38-Q16-HDRI-x64-dll.exe`をダウンロードし起動した。セットアップウィザードにしたがえばインストールが完了する。
以降はコマンドプロンプト `cmd.exe`上での操作となる。カレントディレクトリを画像を保存したディレクトリに変更しておく

```
cd your-map-image-saved-directory
```

## 海岸線（日本の陸地）図の加工

海岸線図を加工およびリサイズする。

https://qiita.com/kitsuyui/items/1d60fe20930bc17302be

この記事と同様にして、海岸線の外側を透明背景にしたい。コマンドはIM7用のものを採用する。
海岸線図の左上角から、海岸線の外側の領域（つまり海域）を透明にする。
同時に画像サイズも幅9933[pixel]に変更する。

```
magick -monitor 320-coastline.png -background none -alpha set -channel RGBA -fill "#00000000" -fuzz 5% -draw "alpha 1,1 floodfill" -resize 9933 330-coastline-sea-fill.png
```

以下のようなメッセージの後に、`330-coastline-sea-fill.png`が出来上がる。

```
load image[320-coastline.png]: 11352 of 11353, 100% complete
resize image[320-coastline.png]: 21252 of 21253, 100% complete
save image[330-coastline-sea-fill.png]: 11319 of 11320, 100% complete
```

稚内付近を拡大してみると、比較的小さな島も含めて陸地が抽出できていることがわかる（図はGIMPで同ファイルを表示したときのもの）。
![スクリーンショット 2024-09-17 111714.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/706ef393-d51c-061f-11ea-f768022ffc34.png)


## 海底地形図のリサイズと陸地部分を透明に加工

まず、海底地形図を所定の大きさに変更する。

```
magick -monitor 300-seamap.png -resize 9933 310-seamap-resized.png
```

以下のようなメッセージの後に、`330-coastline-sea-fill.png`が出来上がる。

```
load image[300-seamap.png]: 11407 of 11408, 100% complete
resize image[300-seamap.png]: 21282 of 21283, 100% complete
save image[310-seamap-resized.png]: 11349 of 11350, 100% complete
```

次に、海底地形図に海岸線（日本の陸地）図を重ねる。このとき陸地部分が海底地形図で使っていない白（R:255, G:255, B:255）であることがポイント。

```
magick composite -monitor 330-coastline-sea-fill.png 310-seamap-resized.png temp.png
```

以下のようなメッセージの後に、`temp.png`が出来上がる。

```
load image[330-coastline-sea-fill.png]: 11319 of 11320, 100% complete
load image[310-seamap-resized.png]: 11349 of 11350, 100% complete
mogrify image[310-seamap-resized.png]: 1 of 2, 100% completeete
save image[temp.png]: 11349 of 11350, 100% complete1350, 99% complete
```

![スクリーンショット 2024-09-17 112409.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/37de9272-5de4-735b-97a1-a54d0feb279b.png)

この`temp.png`の白領域を透明にする。

```
magick -monitor temp.png -transparent white 340-sea.png
```

以下のようなメッセージの後に、`340-sea.png`が出来上がる。

```
load image[temp.png]: 11349 of 11350, 100% complete
set transparent color in image[temp.png]: 11349 of 11350, 100% complete
save image[340-sea.png]: 11349 of 11350, 100% complete50, 100% complete
```

陸地部分が透明になっていることが分かる
![スクリーンショット 2024-09-17 112114.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/d5bb5b4e-4a8e-7f1f-c2e4-3bf072a667e4.png)

全体図は以下の通り（ここでは透過色が白塗りにみえている）
![340-sea-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/474b6724-58e8-30dc-e139-bd1be765b5bc.png)

## 水域つきの陰影起伏図のリサイズと海底地形図の合成

あとは、これまでのコマンドを繰り返すだけ。
まずは、陰影起伏図をリサイズする。

```
magick -monitor 000-base.png -resize 9933 002-base-resized.png
```

以下のようなメッセージの後に、`002-base-resized.png`が出来上がる。

```
load image[000-base.png]: 11406 of 11407, 100% complete
resize image[000-base.png]: 21258 of 21259, 100% complete
save image[002-base-resized.png]: 11325 of 11326, 100% complete
```

最後に海底地形図を重ねる。

```
magick composite -monitor 340-sea.png 002-base-resized.png 900-japan.png
```

以下のようなメッセージの後に、`900-japan.png`が出来上がる。
```
load image[340-sea.png]: 11349 of 11350, 100% complete
load image[002-base-resized.png]: 11325 of 11326, 100% complete
mogrify image[002-base-resized.png]: 1 of 2, 100% complete
Composite/Image[002-base-resized.png]: 11325 of 11326, 100% complete
save image[900-japan.png]: 11325 of 11326, 100% complete
```
![900-japan-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/55c3e3b8-b2a7-cf8a-1246-82d847d7784e.png)


## 彩度をあげる

出来上がってみると、色合いが渋いので、以下のコマンドで彩度を高めた。

```
magick -monitor 900-japan.png -modulate 100,200 910-japan.png
```
![910-japan-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/d7f49496-0b39-fdea-6bec-859292838143.png)


# まとめ

QGISとImageMagickを使って、ポスターサイズの日本地図を作成した。
陰影起伏図で塗られてしまう海域に、日本の陸地部分を透明化した海底地形図を重ねることで、陸地・海底ともに起伏がわかる地図となった。

今回は、画像形式で出力することにこだわった。
エクスポートも、画像ではなくベクトル（PDF）を選択するほうが、高精細な結果を期待できることは分かっていた。ただPDF形式は取り扱いづらいため、最終印刷時の解像度を満たせばよいというように割り切って作業を進めたためである。

# 付記 —— 精細かつ広域な地図

地理院地図では、ズームレベルに応じて表示できる地物が決まっている。

印刷レイアウト機能を少し試してみたが、ズームレベルが表示する範囲に即した小さいものになってしまうため、日本全体を表示しつつ表示可能ズームレベルが大きな地物を表示することは難しかった。（できるのかもしれないが、方法を見つけられなかった）。

このような場合でも、QGISの`地図を画像でエクスポート`機能を使うと、指定の縮尺（ズームレベル）かつ指定の範囲を含む画像を出力することができる。

例えば、全国の鉄道路線を描きたい場合、ズームレベル4では新幹線のみ、ズームレベル6でも主要な鉄道のみとなっており、すべてを描画するにはズームレベルを8以上にする必要がある。この記事のように画像でエクスポートすれば、ズームレベル8の精細さを全国広域にわたらせたような路線図を描画することもできる。

![922-japan-small.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2217260/a4498d7e-8631-bab1-0509-76d63eb8b4a6.png)