岐阜県の公示図書様式-1(A3)広域図と詳細図を作成

岐阜県の公示図書「様式-1(A3)」をQGISとPythonで自動作成する

岐阜県の土砂災害防止法に関する公示図書では、様式-1(A3)に広域図と詳細図を掲載します。 左側は縮尺1:200,000、右側は縮尺1:25,000です。

今回、以前作成した公示図書作成ツールでExcel帳票を出力し、QGISで地点ごとの位置図を一括作成した後、 Pythonで各Excelへ地図画像を自動貼り付けする流れを作成しました。

全体の作業手順

  1. 公示図書作成ツールで、地点ごとのExcelを作成する
  2. 作成されたExcelを1つのフォルダへ集める
  3. QGISで国土地理院ベクトルタイルを背景に設定する
  4. 対象箇所のポイントデータを準備する
  5. ポイントデータの「箇所番」フィールドへ箇所番号を入力する
  6. QGISのPythonコンソールで画像切り出しコードを実行する
  7. 出力された20万図と2.5万図を、Excelと同じフォルダへ入れる
  8. Excel画像貼付用のBATを実行する
  9. 全Excelへ位置図、赤円、基本入力B12の文字を一括反映する

1.公示図書作成ツールでExcelを作成する

最初に、以前作成した公示図書作成ツールを使用し、地点ごとのExcelを作成します。 作成されたExcelを、今回の一括処理用フォルダへ集めます。

GEN020●●_その1.xlsx
KEN00●●その1.xlsx
KEN020●●その1.xlsx
G50●●K_その1.xlsx

画像との照合には、Excelファイル名の最初のアンダーバーより左側を使用します。

GEN020●●01_その1.xlsx → G0●●9001
KEN0250●●●1.xlsx → KEN00●●04

2.QGISで国土地理院ベクトルタイルを設定する

QGISの背景地図には、国土地理院のベクトルタイルを使用します。 QGISのブラウザパネルで「ベクタタイル」を右クリックし、「新しい一般接続」を選択して登録します。

項目 設定
名前 国土地理院ベクター
URL https://cyberjapandata.gsi.go.jp/xyz/experimental_bvmap/{z}/{x}/{y}.pbf
最小ズーム 4
最大ズーム 16

地図の線、注記、色などを確認し、不要なレイヤは非表示にしておきます。 画像切り出しコードは、QGISの地図画面で表示中の背景レイヤをそのまま使用します。

縮尺計算はメートル単位の座標系を前提とします。 恵那市・中津川市周辺では、プロジェクト座標系を EPSG:6675(JGD2011 / 平面直角座標系第VII系) に設定しました。

3.対象箇所のポイントデータを準備する

地図の中心とするポイントデータを作成します。 今回のコードでは、ポイントレイヤ名を 表紙作成、 ファイル名に使用するフィールド名を 箇所番 としています。

項目 設定例
レイヤ名 表紙作成
ジオメトリ ポイント
箇所番号フィールド 箇所番

各ポイントの 箇所番 フィールドへ、Excelと対応する箇所番号を入力します。

GEN0●●001
KEN00●●003
KEN02590●●
G50●●1K

ポイントの位置が、そのまま左右の地図画像の中心になります。 渓流出口、対象区域の中心など、業務で決めた基準位置へポイントを置きます。

4.QGISで20万図と2.5万図を一括出力する

QGISのメニューから「プラグイン」→「Pythonコンソール」を開きます。 コンソール上部の「エディタを表示」を押し、配布ファイルをエディタで開いて実行します。

コードを実行すると出力先フォルダを選択する画面が表示されます。 各ポイントについて、次の2枚が出力されます。

GEN00●●001_200k.png
GEN020●●001_25k.png
画像 縮尺 用途
_200k.png 1:200,000 様式-1(A3)の左側
_25k.png 1:25,000 様式-1(A3)の右側
QGIS:地図画像一括出力コード

Python資料をダウンロード(ZIP)

5.Excelと地図画像を1つのフォルダへ集める

QGISで出力したPNGを、公示図書作成ツールで作成したExcelと同じフォルダへ入れます。 Excelはすべて閉じておきます。

作業フォルダ
├─ GEN0259001_その1.xlsx
├─ GEN0259001_200k.png
├─ GEN0259001_25k.png
├─ KEN0259004_その1.xlsx
├─ KEN02590040101_200k.png
├─ KEN02590040101_25k.png
├─ Excel地図画像一括貼付_右画像トリミング版.py
└─ Excel地図画像一括貼付_右画像トリミング版_実行.bat

画像名に枝番号が付く場合

Excel名と画像名が完全一致しなくても、画像名がExcelの箇所番号で始まっていれば対応します。

Excel
KEN0259004_その1.xlsx

画像
KEN02590040101_200k.png
KEN02590040101_25k.png

この場合、Excel側の照合キーは KEN0259004 です。 画像名の先頭も KEN0259004 で始まるため、同じ箇所として貼り付けます。

6.Excel画像貼付用コードを実行する

PythonファイルとBATファイルを同じフォルダへ置き、 Excel地図画像一括貼付_右画像トリミング版_実行.bat をダブルクリックします。

実行後は次の順に操作します。

  1. ExcelとPNGが入ったフォルダを選択する
  2. 全Excelの「基本入力」シートB12へ入れる共通文字を入力する
  3. 実行ボタンを押す

Excelは閉じた状態で問題ありません。 Pythonが各Excelをバックグラウンドで開き、編集、保存、終了まで行います。

自動で行われる処理

処理 内容
左側の画像 様式-1(A3)のB3:C34へ20万図を貼付
右側の画像 様式-1(A3)のG3:I34へ2.5万図を貼付し、左側を微調整してトリミング
既存図形 貼付範囲に重なる古い画像や赤円を先に削除
赤円 左右の地図枠中央へ、直径3cm、赤色、線幅2.25ptの円を追加
基本入力B12 実行時に入力した文字を、全Excelへ反映
バックアップ 処理前のExcelを日時付きバックアップフォルダへコピー
Excel:画像一括貼付Pythonコード

Python資料をダウンロード(ZIP)

実行用BATコード

Python資料をダウンロード(ZIP)

7.初回だけ必要な設定

Excel操作には pywin32 を使用します。 未導入の場合は、コマンドプロンプトで次を実行します。

Python資料をダウンロード(ZIP)

一度インストールすれば、次回からはBATをダブルクリックするだけです。

8.完成後に確認する項目

  • 左側に1:200,000、右側に1:25,000の画像が入っているか
  • 各画像の中心が対象ポイントと一致しているか
  • 画像が黒枠からはみ出していないか
  • 右側画像の左端が完成例と同じ位置でトリミングされているか
  • 赤円が左右の地図枠中央にあるか
  • 基本入力シートB12の文字が正しいか
  • 枝番号付き画像が別のExcelへ誤って貼られていないか
  • 印刷プレビューでA3の1ページに収まっているか

まとめ

作業の流れは、次のとおりです。

公示図書作成ツールでExcel作成 → Excelを1フォルダへ集約 → QGISで国土地理院ベクトルタイルを設定 → ポイントデータの「箇所番」を入力 → Pythonで20万図・2.5万図を一括出力 → PNGをExcelと同じフォルダへ格納 → BATを実行 → 様式-1(A3)を一括完成

手作業で地図を1枚ずつ切り出し、Excelへ位置と大きさを合わせて貼り付ける必要がなくなりました。 地点数が多い公示図書ほど、作業時間の短縮と画像の取り違え防止に効果があります。

※国土地理院データの利用条件、出典表記、測量法に基づく承認の要否については、 成果品の用途と発注者の指示に従って確認してください。
※元Excelの列幅、行高、様式が異なる場合は、画像寸法や右側のトリミング値を調整する必要があります。

Python資料をダウンロード(ZIP)

具体例:様式-1を3箇所分作るときの入力と出力

説明用にTEST001・TEST002・TEST003の3地点を考えます。QGISで「表紙作成」ポイントレイヤの「箇所番」へそれぞれの番号を入れ、1地点から20万図と2.5万図を1枚ずつ、合計6枚のPNGを作ります。次にTEST001_その1.xlsxのような帳票コピーと対応画像を同じ作業フォルダに置きます。

元記事の伏字入りの例は命名の考え方を示したものです。実際には、Excel名の照合キーと画像名が一致するよう整理してください。たとえばTEST001_その1.xlsxに対しTEST001_200k.pngとTEST001_25k.pngをそろえます。短い番号の前方一致で別箇所の画像が候補になる場合は、処理前に候補を整理します。

実行を2段階に分ける

  1. ZIPを展開し、qgis_map_export.pyをQGISのPythonコンソールのエディタで開きます。ポイントと表示中の背景を確認し、1地点を選んで実行します。
  2. 画像の場所・縮尺・文字の欠けを確認し、帳票と同じフォルダへ置きます。
  3. Excelを閉じ、配布するExcel画像貼付用Pythonを実行します。起動BATもZIPに収録していますが、環境を手動で準備してPythonを直接実行しても構いません。
  4. 基本入力B12の共通文字、左右画像の対応、赤円、右画像のトリミングを確認してから残りを処理します。

画像貼付だけの処理ではありません。入力文字の変更、既存図形の削除、保存を伴います。ファイル数が合っていても、番号の照合が誤っていれば別箇所の地図が入ります。箇所名と位置を組み合わせて照合してください。

コメント

このブログの人気の投稿

IJCAD(AutoCAD互換CAD) コマンド早見表

設計定数を求めるための代表N値について

WEB地図(国土地理院など)のズームレベルについて