「アクション機能」を使うと、いろいろと便利なことを実現できます。
今回の記事ではQGISの「アクション機能」を紹介します。
アクション機能の設定サンプルとして、「地物の属性情報を使って簡単にGoogle検索ができるという機能の設定方法」、「ポップアップ内に、表形式で属性情報を表示する方法」を説明します。
QGISのアクション機能とは?
QGISのアクション機能は、地図上の地物に対して、独自の操作や外部リンクを追加するための便利な機能です。
この機能によって、地物をクリックするだけで、その属性データを元にウェブ検索を行ったり、外部アプリケーションの起動が可能になります。
アクション機能は、カスタマイズ性が高く、様々な用途に応じて設定を行うことができるため、上手く活用すると、データ分析やプレゼンテーションをより効果的に行うことができます。
サンプルとして使用するデータの説明
この記事では、国土数値情報の医療機関データを説明用に使用します。
このデータは医療機関の位置を示すポイントデータで、「施設名称」、「所在地」、「病床数」といった情報が記録されたフィールドが含まれます。
このデータを使って「P04_002フィールドに記録されている医療機関の名称を使って簡単にGoogle検索ができるアクション」を設定してみます。
サンプルデータをQGISに取り込む
はじめに以下の手順でサンプルデータをQGISに取り込みます。
QGISを開きメニューバーの「レイヤ」から「レイヤを追加」を選択し、出てくるメニューの中から「ベクタレイヤを追加」を選択します。
すると「データソースマネージャ|ベクタ」というウインドウが表示されます。
ベクタデータセットと書かれている欄の右端にある「・・・」をクリックします。
するとファイルを選択する画面が表示されるので展開したフォルダに移動し、取り込むファイルを選択し、「開く」をクリックしましょう。
シェープファイルの場合、ファイル名の最後が「.shp」で終わるファイルを選択します。
ファイルを選択すると「データソースマネージャ|ベクタ」ウインドウに戻るので、ウインドウの下の方にある「追加」をクリックし、続けて「閉じる」をクリックします。
これで、QGISにサンプルのポイントデータが取り込まれました。
続いて、アクションを設定する手順を説明します。
アクションの設定方法
取り込んだサンプルデータのレイヤ名の上で右クリックし、出てきたメニューから「プロパティ」を選択します。
「レイヤプロパティ」ウインドウが表示されるので左のメニューから「アクション」を選択します。
ウインドウの中央下にある「+」ボタンをクリックします。
すると、「新規アクションを追加」ウィンドウが表示されます。
必ず設定が必要な項目は以下の通りです。
- 型
- 説明
- スコープ
- アクションテキスト
今回のアクションの場合、以下のように設定します。
型
「URLを開く」を選択する。
説明
アクションの内容を示すわかりやすい言葉を入れます。今回は「施設名検索」と入力します。
スコープ
アクションが適用される範囲を選択できます。今回は「地物」を選択します。それぞれの説明はこのあと補足します。
アクションテキスト
アクションの内容を記載します。今回は、以下のように記載します。意味はこのあと補足します。
https://www.google.com/search?q=[%P04_002%]
ここまで入力できたら「OK」ボタンをクリックするとアクションが保存され、プロパティウィンドウにもどります。
「OK」をクリックし、地図にもどります。
これで、医療機関のポイントデータにアクションが設定されました。
次に、アクションを実行する方法を説明します。
アクションの実行方法
「アクションの実行方法」の手順を説明します。
始めに「地物情報を表示」アイコンをクリックします。
カーソルが変化するので、アクションを実行したい地物の上で右クリックします。
すると、右クリックメニューが表示され、メニュー内に設定したアクション名(今回は、”施設名検索”)が表示されています。
アクション名をクリックするとアクションの実行です。
今回の場合、デフォルトのウェブブラウザが開き、選択した医療機関の名称でGoogle検索が実行されます。
このような感じで、アクション機能を使うと地物の情報を簡単にGoogle検索することができます。
また、地物が密集していたり、同じ地点に複数のポイントが重なっている場合には、以下のように、右クリックメニューに地物を選択するメニューが追加されます。
アクションの実行方法は他にもあります。
アクションの実行方法は他にもある
以下のように設定すると、ワンクリックでアクションを実行できます。
アクションの設定ウインドウのスコープ欄でキャンパスを選択します。
地図にもどり、「地物アクションの設定」アイコンのメニューを開き、設定したアクション名を選択します。
すると、大きな十字のカーソルに変わります。
この状態で、ポイントをクリックすると、ウェブブラウザが開き、選択した医療施設の名称を用いてGoogle検索が実行されます。
また、地点が密集していたり、同じ地点に複数のポイントが重なっている場合には、すぐに検索が行われることはなく、以下のように右クリックメニューが表示され、地物を選択する手順が発生します。
この方法では、直ぐにアクションを実行できるので便利です。
しかし、いきなりアクションが実行されるので、どのポイントをクリックしたかわかりづらい場合があるので注意が必要です。
その他の設定例(Pythonを使った方法)
PythonやHTML、CSSを使うと、さらにいろいろなことができます。
参考としてPythonを使い属性情報を表形式でポップアップする方法を紹介します。
今回使用した医療機関データの「P04_002」、「P04_003」、「P04_004」、「P04_008」のフィールドの属性情報を、表形式で表示する内容になっています。
それぞれ「施設名称」、「所在地」、「診療科目」、「病床数」のデータです。
型
「Python」を選択する。
説明
アクションがわかりやすい言葉を入れます。今回は「ポップアップ」と入力します。
スコープ
アクションが適用される範囲を選択できます。今回は好みのアクションの挙動に合わせて「地物」か「キャンパス」を選択します。両方にチェックを入れても大丈夫です。
アクションテキスト
Pythonのコードを入力します。
以下、サンプルです。
from qgis.PyQt.QtWidgets import QDialog, QVBoxLayout, QTextBrowser
from qgis.core import QgsExpressionContext, QgsExpressionContextUtils
def create_popup(p04_002, p04_003, p04_004, p04_008):
dialog = QDialog()
dialog.setWindowTitle("Custom Popup")
layout = QVBoxLayout()
text_browser = QTextBrowser()
html_content = f"""
<!DOCTYPE html>
<html>
<head>
<style>
body {{
font-family: Arial, sans-serif;
}}
table {{
border-collapse: collapse;
width: 100%;
}}
th, td {{
border: 1px solid black;
padding: 8px;
text-align: left;
}}
th {{
background-color: lightblue;
width: 30%;
}}
td {{
width: 70%;
word-wrap: break-word;
}}
</style>
</head>
<body>
<table>
<tr>
<th>施設名称</th>
<td>{p04_002}</td>
</tr>
<tr>
<th>所在地</th>
<td>{p04_003}</td>
</tr>
<tr>
<th>診療科目</th>
<td>{p04_004}</td>
</tr>
<tr>
<th>病床数</th>
<td>{p04_008}</td>
</tr>
</table>
</body>
</html>
"""
text_browser.setHtml(html_content)
layout.addWidget(text_browser)
dialog.setLayout(layout)
dialog.exec()
p04_002 = "[%P04_002%]"
p04_003 = "[%P04_003%]"
p04_004 = "[%P04_004%]"
p04_008 = "[%P04_008%]"
create_popup(p04_002, p04_003, p04_004, p04_008)
上で記載した手順で、アクションを実施すると以下のように指示した通りのポップアップが表示されます。
PythonやHTML、CSSの書き方がわかれば、いろいろとカスタマイズすることが可能です。
よくわからない場合は、ChatGPTを使うと提案してくれるので便利です。
使用したデータ
- 国土数値情報「医療機関データ」
- OpenStreetMap