1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

QGISでOpenLRを可視化するプラグイン(Pythonスクリプトベース)

Posted at

こんにちは。
本記事では、OpenLR形式で記述された位置情報をQGIS上で可視化するプラグインを紹介します。

Pythonベースで構築されたOpenLRデコーダ(openlr-dereferencer)をもとに、GUIで扱えるQGISプラグインとして実装しました。

🔧 目的

  • PythonでOpenLRを扱っていたけど、(とりあえず)地図上で結果を見たくなった
  • GUIでPostgreSQLに接続 → OpenLRを貼り付け → 地図に表示、を完結させたい

🧠 背景:もともとはPythonスクリプトで処理

これまで、以下のような構成でOpenLRをデコードするPythonスクリプトを実装していました。

  • PostgreSQL + PostGIS 上に道路ネットワークを構築
  • openlr-dereferencer を使用してOpenLRをデコード
  • 出力はLineStringとして print() で確認

この内容についてはWestTraffic さんの記事openlr-dereferencer-pythonを実装してみた を参考にさせていただきました。

🖥 今回の内容:QGISプラグイン化

このスクリプトベースの処理をQGISのGUIプラグインとして実装しました。

主な機能:

  • PostgreSQLへの接続情報をGUIで入力
  • OpenLR文字列を貼り付けてデコード
  • 結果を Decoded OpenLR Lines レイヤとして地図に表示

✅ 動作確認済み環境

  • QGIS LTR 3.34(Prizren)
  • Pythonライブラリ:
    • openlr-dereferencer
    • psycopg2
    • pyproj
  • PostgreSQL + PostGIS(道路テーブルあり)

🔗 プラグインのコード(GitHub)

GitHubにコードを公開しています(※ZIP形式での手動インストール推奨):

👉 openlr-qgis-plugin

📦 インストール方法

  1. リポジトリをクローンまたはZIPでダウンロード
  2. __init__.py を含むディレクトリをZIP化
  3. QGIS > プラグイン > プラグインをZIPからインストール
  4. QGIS再起動後、プラグインを起動

⚠️ 注意:GitHubにはソースコードのみが含まれています。UIの変更やZIP形式への変換は各自の環境でお願いします。

✍ おわりに

OpenLRのような文字列ベースの位置情報を、QGIS上で地図として確認できるのは非常に便利です。
GUIでPostgreSQLと連携し、OpenLR文字列をその場で可視化できる今回のプラグインは、日常業務やプロトタイピングの中でも役立つはずです。

ご興味ある方はぜひお試しください。

🔧 補足:PostgreSQLテーブル構成(参考)

roads テーブル(例):

カラム名 内容
id bigint 主キー
fow / frc smallint OpenLR対応の道路属性
flowdir smallint 方向(1=両方向, 2=終点→始点, 3=始点→終点)
from_int / to_int bigint 接続交差点
len double precision 長さ(m)
geom LineString(4326) 位置情報
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?