Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
foss4g-hokkaido-2025-9-27-qgis-spatialite
Search
yama-kei
October 01, 2025
Technology
59
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
foss4g-hokkaido-2025-9-27-qgis-spatialite
SpatiaLiteによるデータ管理と空間解析機能を活用することで、QGISをより魅力的なツールにする手法を説明します。
yama-kei
October 01, 2025
More Decks by yama-kei
See All by yama-kei
GeoramaとGeoGirafe
yamazakikei7
0
260
Other Decks in Technology
See All in Technology
実践! SRE × AI - ABEMA における AIOps -
tetsuya28
8
3.1k
JAWS-UGグッズ職人仕事の流儀
kentapapa
0
120
OptunaHub: ブラックボックス最適化のためのプラットフォーム
pfn
PRO
0
140
LambdaWebFunctionsを試してみた / exploring-lambda-web-functions
koukihosaka
1
360
Code for Security プロジェクト紹介 2026年10月
yu23ki14
0
110
「Docker Desktop不要の時代」は 来たのか?
ueponx
0
830
実践!Cloud Run ハンズオン!! / Cloud Run handson
y0hgi
2
300
PHPカンファレンス関西の招待状 / Invitation to PHP Conference Kansai
ykanoh
0
210
10年後、Engineering 行為を剥奪されるとして、わたしたちは、どう、何を創ればいいだろうか。 / If Engineering Is Taken Away in 10 Years, How and What Should We Create?
bitkey
PRO
1
200
Classmethod Company Deck
satoshi7
1
730
AI × アーキテクト 第1・2章|生成AIの課題とアーキテクトの素養
daidaidai
0
180
夫婦で子育てするための育児標準化
codmoninc
PRO
0
450
Featured
See All Featured
Marketing to machines
jonoalderson
1
5.9k
How to build a perfect <img>
jonoalderson
1
6.1k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
Optimizing for Happiness
mojombo
378
71k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
3.1k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Visualization
eitanlees
153
17k
Producing Creativity
orderedlist
PRO
348
41k
The Cost Of JavaScript in 2023
addyosmani
55
10k
So, you think you're a good person
axbom
PRO
2
2.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
600
Transcript
QGIS の可能性を最大限に引き出す SpatiaLite 活用術!! Kei Yamazaki MIERUNE Inc.
1. Introduction
山崎 渓 Software Engineer 群馬県で GIS エンジニアをしていま す 経歴としては、地質 → 建建コンサ
ルタント →GIS エンジニア 札幌には 1 年間住んでいたので、町 を完全理解しています。何でも聞い てください 3
今日の発表内容 1. Introduction 2. SpatiaLite とは 3. QGIS における SpatiaLite
の使い方 4. QGIS プラグインで SpatiaLite を使う際の戦略 4
2. SpatiaLite とは
まずは SQLite について <主な特徴> SQL エンジンを実装した単一の軽量ライブラリ サーバーを構築する必要がない 機能やデータが一つのファイルにまとめられている ( monolithic
file ) 特別なインストールが不要 6
SpatiaLite について <主な特徴> SQLite の拡張機能で、空間関数をサポートすることを目的としたオ ープンソースライブラリ PostgreSQL で はPostGIS を使用することで、空間関数を利用するこ
とができるが、 SpatiaLite はその SQLite 版という認識で良い 変なアイコン(個人の感想です) 7
SpatiaLite の立ち位置 QGIS では多様なファイルをサポートしており、SpatiaLite もサポート している <ファイル系> Shapefile, GeoJSON <データベース系>
PostgreSQL (PostGIS ), MySQL <ファイル + データベース系> SpatiaLite , GeoPackage 8
ファイル系 強み:ポータビリティに優れる 弱み:レイヤの数だけファイルが増えてしまう 9
データベース系 強み:高パフォーマンスで複数人による同時編集が可能 弱み:特別なセットアップが必要 (DB サーバーの構築や接続設定が必要) 10
ファイル + データベース系 強み:ポータビリティに優れ、1 ファイルに複数レイヤを管理できる 弱み: (DB 系と比較した時)同時書き込みに弱い ローカルで作業を完結させることが多い QGIS
(プラグイン)にと って、データを SpatiaLite および GeoPackage で管理することがメリ ットが多い 11
3. QGIS における SpatiaLite の使い方
QGIS での使い方 利用経路は 1 つではない 1. ブラウザパネルから利用 2. DB マネージャから利用
SQL を実行可能 3. Python コンソールから利用 SQL を実行可能 13
QGIS での使い方(ブラウザパネルで利用)
ブラウザパネルでの利用 ブラウザパネルの SatiaLite から DB を新規作成したり、既存の DB に 接続することができる。 15
ブラウザパネルでの利用 接続された SpatiaLite ファイルがあれば、ブラウザパネルに DB の 一覧が表示される 各 SpatiaLite ファイルのテーブル(レイヤ)も表示される
テーブルをダブルクリックすると、QGIS にレイヤが追加される 16
QGIS での使い方(DB マネージャから利用)
DB マネージャからの利用 データベースタブから DB マネージャーを起動する 18
DB マネージャからの利用 プロバイダの SpatiaLite から、任意の DB にアクセスできる 19
DB マネージャからの利用 属性テーブルを確認できる 20
DB マネージャからの利用 位置情報を確認できる 21
DB マネージャからの利用 DB マネージャからは SQL を実行することができる 22
SQL を実行できるのが ポイント 23
SpatiaLite の空間クエリ SpatiaLite では、豊富な空間クエリを利用することができる https://www.gaia-gis.it/gaia-sins/spatialite-sql-5.1.0.html PostGIS による空間クエリがよく知られているが、ほぼ同じことが できる 24
代表的な SpatiaLite の空間クエリ ST_Buffer :ジオメトリのバッファを作成 ST_Intersection :2 つのジオメトリの交差部分を取得 ST_Distance :2
つのジオメトリ間の距離を計算 ST_Within :ジオメトリが他のジオメトリ内に含まれるかを判定 ST_Transform :ジオメトリの座標系を変換 BuildMbr :ジオメトリの最小外接矩形を作成 ST_Azimuth :2 点間の方位角を計算 ST_Area :ポリゴンの面積を計算 ST_Length :ラインの長さを計算 25
SpatiaLite の空間クエリ 例えば、空間クエリを使用してラインの始点から 10 番目の頂点を 抜き出す処理をしてみる ST_PointN という空間クエリが用意されているので、これを利用す る 26
SpatiaLite の空間クエリ ラインデータ eroad_N10-24_10 に対して、以下のクエリを実行し、 結果を QGIS に追加する手順を進めてみる。 SELECT st_pointn(geom,
10) as geom from 'eroad_N10-24_10'; 27
SpatiaLite の空間クエリ QGIS に結果が表示されラインの 10 番目の位置にポイントデータが 作成されている 28
SpatiaLite の空間クエリ 空間クエリを組み合わせることで、高度なことができる 始点を終点を結ぶ直線ラインを作成してみる ST_StartPoint と ST_EndPoint 、 MakeLine を使用する
SELECT MakeLine(ST_StartPoint(geom), ST_EndPoint(geom)) AS geom FROM 'eroad_N10-24_10'; 29
SpatiaLite の空間クエリ 下図のように始点を終点を結ぶラインが作成できる 30
SpatiaLite の空間クエリを使用すると、以下のように簡潔なコードで 処理できたが・・・・ SELECT MakeLine(ST_StartPoint(geom), ST_EndPoint(geom)) AS geom FROM 'eroad_N10-24_10';
これを QGIS の processing や PyQGIS を使って処理しようとすると、 結構頭を悩ませる SpatitaLite でクエリすることで、複雑な処理でも簡潔な記述で処 理できる可能性がある! 31
QGIS での使い方(Python で利用)
Python での利用 Python コンソールから利用するには、最初におまじないが必要 windows の場合 import sqlite3 db_path =
r"data/sample_db.sqlite" con = sqlite3.connect(db_path) # 拡張を有効 con.enable_load_extension(True) cur = con.cursor() cur.execute("SELECT load_extension('mod_spatialite')") 33
Python での利用 Python コンソールから利用するには、最初におまじないが必要 mac の場合 import sqlite3 db_path =
r"data/sample_db.sqlite" con = sqlite3.connect(db_path) # 拡張を有効 con.enable_load_extension(True) cur = con.cursor() cur.execute("SELECT load_extension('mod_spatialite.so')") 34
Python での利用 Cursor オブジェクトから execute() を呼び出して、クエリを実行し ます。 試しに接続した DB のテーブル一覧を表示してみます
cur.execute("SELECT name FROM sqlite_master WHERE type='table';") all_rows = cur.fetchall() for row in all_rows: print(row) 35
テーブルの一覧が確認できる 36
Python での利用 あとは DB マネージャの時と同様で、 cur.execute() の中に、必要 なクエリを記述するだけ。 始点を終点を結ぶ直線ラインの Python
コンソールでもやってみる と・・ 37
cur.executescript(""" CREATE TABLE eroad_straight_lines AS SELECT MakeLine(ST_StartPoint(geom), ST_EndPoint(geom)) AS geom
FROM 'eroad_N10-24_10'; SELECT RecoverGeometryColumn( 'eroad_straight_lines', 'geom', 6668, 'LINESTRING' ) """) 38
-- eroad_staright_linesというテーブルを作成し、処理結果を格納する CREATE TABLE eroad_straight_lines AS SELECT MakeLine(ST_StartPoint(geom), ST_EndPoint(geom)) AS
geom FROM 'eroad_N10-24_10'; -- SpatiaLiteのお作法として、新たに作成したテーブルには、 -- Geometryの情報を教えてあげる必要がある SELECT RecoverGeometryColumn( 'eroad_straight_lines', -- 対象のテーブルを指定 'geom', -- Geometryとして指定する列 6668, -- 座標系をEPSGコードで指定 'LINESTRING' -- Geometryタイプを指定 ) 39
4. QGIS プラグインで SpatiaLite を使 う際の戦略
QGIS プラグインで SpatiaLite を使う際の戦略 特定の業務を遂行するためのプラグインを作成する時、SQLite (SpatiaLite )を使ったデータ管理は便利。 任意の SQLite を指定することで動作する設計とする
(もしくは新しく SQLite ファイルを作成し、新規プロジェクト として立ち上げる) これにより 1 ファイルを共有すればプラグインの動作に必要なデー タをやり取りすることができる 41
QGIS プラグインで SpatiaLite を使う際の戦略 42
QGIS プラグインで SpatiaLite を使う際の戦略 要件を満たしたデータだけを DB に取り込む・・という戦略を取る ことで、DB に格納されたデータはプラグインで正しく動作するデ ータということを保証できる
フォルダ指定で、そこに必要なデータが格納されていることを前 提にしたシステムだと、問題のあるデータを取り入れてしまう原 因となる データ管理の面においても、1 つの SQLite ファイルで管理でき るのは楽。 43
SpatiaLite でデータを管理する優位性 GeoJSON でデータを管理している場合は、レイヤが 3 つあると 3 フ ァイルが必要。 .
├── sample1.geojson ├── sample2.geojson └── sample3.geojson SpatiaLite であれば、1 ファイルで 良い。 . └── sample.sqlite 44
必要なデータが SpatiaLite のテーブルなっていることで、空間クエ リを組み合わせた処理を実行することができる pyqgis を使用すると発生しやすいループ処理を回避することがで きる pyqgis の場合 for
feature in layer.getFeatures(): geom = feature.geometry() buffer = geom.buffer(10, 5) SpatiaLite の場合 SELECT ST_Buffer(geom, 10) AS geom FROM 'sample_table'; 45
SpatiaLite でデータを管理する優位性 大量の地物の値を一括更新したい時に利用したい processing の フィールド計算機 があるが、これは Input したデータを更新するので はなく、新たにデータを作成してしまうので、データ更新の観点か
らは使用しにくい。 SpatiaLite に格納されたレイヤであればクエリで値を更新できるの で、 フィールド計算機 の使用感覚で、特定の要件にあった地物の属性 の更新を行うことができる(新たにレイヤを作成することなく) 。 46
フィールド計算機の場合(出力ファイルを別途指定する必要がある) SpatiaLite の場合(指定したレイヤの値を更新できる) UPDATE 'sample_table' SET attr1 = 'new_value' WHERE
attr2 = 'some_value'; 47
まとめ
SpatiaLite の特徴 SQLite の空間拡張で、1 ファイルでポータブル ファイル系とデータベース系の良いとこ取り QGIS での活用方法 ブラウザパネル、DB マネージャ、Python
コンソールから利用 空間クエリによる高度な処理が簡潔に記述可能 プラグイン開発での戦略 1 ファイルでデータ管理とプロジェクト共有 49
SpatiaLite もっと活用しよう! 50
おわり 質問・ご相談はお気軽に Kei Yamazaki