7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

MIERUNEAdvent Calendar 2024

Day 21

QGISでのQDuckDBプラグイン活用ガイド

Last updated at Posted at 2024-12-21

これは MIERUNE Advent Calendar 2024 21日目の記事です!
昨日は@shiori2436さんによる「Pythonで雪の結晶を描いてみよう」でした。 :snowflake:

はじめに

Bonjour!
クリスマスが近づいてきましたね。
フランスでは、クリスマスは美味しい料理を楽しむ時期です。
ローストチキンだけでなく、オイスターやスモークサーモンやフォアグラも食卓に並びます。
でも、私が一番好きなのは鴨のマグレ。マグレと聞いただけで、美味しさが口の中に感じます。

image.png
GPTが作ってもらった「鴨のマグレ」の画像

お皿で鴨肉が楽しめるなら、QGISではDuckDBが楽しめます!
QGISでDuckDBを活用できるプラグイン「QDuckDB」が公開されて、この記事ではその使い方をご紹介します。

DuckDBとは

DuckDBは、高速で組み込み可能な分析向けデータベース管理システム(DBMS)です。
その強みと活用方法について詳しくは、こちらの記事をご覧ください。

QDuckDBとは

QDuckDBは、公開されているQGISプラグインです。このプラグインを使用すると、DuckDBデータベース内のテーブルからジオメトリを読み込み、QGIS上に直接表示することができます。

image.png

事前準備

現時点では、このプラグインはWindowsでのみ使用可能です。
LinuxやMacOSの場合は、事前インストール手順に従う必要があります。

0. MacOS環境での事前準備

QGISアップ自体内でduckDBをインストールするべきです。

  • MacのApplicationsフォルダーにQGISアップのファイル名を確認
    image.png

  • Terminalを開き、確認したQGISのアプリ名に合わせて以下のコマンドを実行

# QGIS.appの場合
/Applications/QGIS.app/Contents/MacOS/bin/python3.9 -m pip install "duckdb==1.1.3"

# QGIS-LTR.appの場合
/Applications/QGIS-LTR.app/Contents/MacOS/bin/python3.9 -m pip install "duckdb==1.1.3"

MacOSでQDuckDBを使えるようにしました。

1. QDuckDBプラグインのインストール

メニューバー -> プラグイン -> プラグインを管理とインストールを選択
Capture d’écran 2024-12-07 à 16.26.24.png

QDuckDBを検索してインストール
image.png

2. DuckDBのデータベースを設置

インストール後、QGISのツールバーにあるDuckDBアイコンをクリックすると、UIが表示されます。
インターフェイスを確認すると、データベースのファイルを指定しないと操作を進められないようになっています。

image.png

  • DuckDBをインストールしていない場合、以下のコマンドを実行してDuckDBをインストールします:
brew install duckdb
  • 以下のコマンドを実行してデータベースを作成します。
duckdb /path/to/your/database/20241214_duckdb/canard.duckdb

データベースが作成されました!次はテーブルを入力してみましょう!

image.png

ちなみに、「canard」(カナール)はフランス語で「鴨」を意味します。そのため、先ほど記載した「鴨のマグレ」という料理名は、フランス語では「マグレ・ド・カナール」(Magret de Canard)となります。:baby_chick:

3. Shapefileをデータベースに入力

Terminalで引き続きデータベースにアクセスし、SQLクエリを実行できます。

  • Spatialをインストールしていない場合は、以下のコマンドを実行
INSTALL spatial;
LOAD spatial;

DuckDBでは、コマンドの末尾に必ず ; を付けないと実行されませんので、ご注意ください。

CREATE TABLE japan_pref AS SELECT * FROM '/your_path/.../N03-20240101_prefecture.shp';
  • 以下のクエリで確認して無事に入力できました!これからQDuckDBで読み込んでみましょう。
SELECT * FROM japan_pref;
  
┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬──────────────────────────────────────┐
 N03_001  N03_002  N03_003  N03_004  N03_005  N03_007                  geom                 
 varchar  varchar  varchar  varchar  varchar  varchar                geometry               
├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼──────────────────────────────────────┤
 北海道                                       01000    POLYGON ((141.941187782 45.5214575  
 北海道                                       01000    POLYGON ((148.75263496800002 45.55  
 北海道                                       01000    POLYGON ((146.16670147900004 44.51  
 北海道                                       01000    POLYGON ((146.83198749700003 43.88  
 北海道                                       01000    POLYGON ((141.199192218 45.2588213  

DuckDBでデータベースにアクセス中はロックがかかり、QGISで使用できなくなるため注意が必要です。
入力作業が終わったら、以下のコマンドでデータベースを終了してください

.exit

QDuckDBでデータの読み込み

QGISに戻り、QDuckDBの設定を進めましょう。

  • canard.duckdbデータベースを指定すると、テーブルを正常に認識し、操作できるようになります。
  • Add Layerをクリックすると都道府県が無事に表示されます!

image.png

カスタムクエリでも行えます

Custom SQL queryを使用すれば、特定の条件でデータを絞り込むことができます。
例えば、以下のクエリを使うと北海道だけをフィルタリングできます。

SELECT * FROM japan_pref WHERE N03_001 = '北海道'

image.png

データに編集について

QGIS側で編集できない

japan_prefのデータを編集しようとしてUPDATEを記入したのですが、実行できませんでした。

image.png

そのため、ターミナルでDuckDBに戻り、UPDATEクエリを実行します。

ただし、データベースにアクセスするとQGISでロックがかかり使用できなくなるため、UPDATEクエリを実行する際は一度QGISを閉じる必要があります。

duckdb /.../20241214_duckdb/canard.duckdb
Error: unable to open database "/.../20241214_duckdb/canard.duckdb": 
IO Error: Could not set lock on file "/.../20241214_duckdb/canard.duckdb": 
Conflicting lock is held in /Applications/QGIS-LTR.app/Contents/MacOS/QGIS (PID 34286) by user bordoray. 
However, you would be able to open this database in read-only mode, 
e.g. by using the -readonly parameter in the CLI. 
See also https://duckdb.org/docs/connect/concurrency

DuckDB側で編集

QGISを閉じた後、Terminal上で以下のクエリを実行することで、無事に編集を行うことができました。

UPDATE japan_pref SET N03_001 = '蝦夷' WHERE N03_001 = '北海道';
SELECT * FROM japan_pref;
┌─────────┬─────────┬─────────┬─────────┬─────────┬─────────┬──────────────────────────────────────┐
 N03_001  N03_002  N03_003  N03_004  N03_005  N03_007                  geom                 
 varchar  varchar  varchar  varchar  varchar  varchar                geometry               
├─────────┼─────────┼─────────┼─────────┼─────────┼─────────┼──────────────────────────────────────┤
 蝦夷                                         01000    \x02\x04\x00\x00\x00\x00\x00\x00\x  
 蝦夷                                         01000    \x02\x04\x00\x00\x00\x00\x00\x00\x  
 蝦夷                                         01000    \x02\x04\x00\x00\x00\x00\x00\x00\x  
 蝦夷                                         01000    \x02\x04\x00\x00\x00\x00\x00\x00\x  
 蝦夷                                         01000    \x02\x04\x00\x00\x00\x00\x00\x00x   
 蝦夷                                         01000    \x02\x04\x00\x00\x00\x00\x00\x00\x  
 蝦夷                                         01000    \x02\x04\x00\x00\x00\x00\x00\x00F\…  
 蝦夷                                         01000    \x02\x04\x00\x00\x00\x00\x00\x00\x  
 蝦夷                                         01000    \x02\x04\x00\x00\x00\x00\x00\x00\x  

  • 編集後は、忘れずにexitで終了してください。

おまけ:Overture Mapsデータの読み込み

以下の記事では、Geoparquet DownloaderのQGISプラグインを使ってOverture Mapsを簡単に取得する方法を紹介していますが、MacOSの場合は事前インストールが必要です。

本記事ではMacOS環境でQDuckDBをインストールすることができましたが、Geoparquet Downloaderを利用するには、Geoparquetを読み込むためのライブラリも必要です。

ただし、QDuckDBとデータベースがあれば、SQLでS3に直接アクセスしてOverture Mapsを取得することも可能です。

参考

領域に合わせて以下のクエリを記入することで、Overture Mapsを無事に取得できました!

SELECT
       id,
       names.primary as name,
       confidence AS confidence,
       CAST(socials AS JSON) as socials,    
       geometry                             
    FROM read_parquet('s3://overturemaps-us-west-2/release/2024-12-18.0/theme=places/type=place/*', filename=true, hive_partitioning=1)
    WHERE bbox.xmin BETWEEN 140.06 AND 140.167 
    AND bbox.ymin BETWEEN 36.387 AND 36.526

image.png

おわりに

QDuckDBでは、DuckDBのデータベースを簡単にQGISで表示できます。ただし、データの編集ができないの点には注意が必要です。
また、クエリを使ってOverture Mapsのデータを取得することも可能でありがたいです。
ぜひ、QDuckDB(と美味しい鴨肉)を楽しんでください!

明日は@chizutodesignさんによる記事です!お楽しみに!!

7
0
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
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?