Windows で SpatiaLite を使う
【概要】
SpatiaLite は、SQLite に空間データベース機能を追加する拡張ライブラリである。通常の SQLite では経度・緯度を使った検索や分析はできないが、SpatiaLite を使うと、ある地点を含む市区町村を探す、2 地点間の距離を求めるといった処理が SQL だけで行える。本記事では、Windows 環境での SpatiaLite(GUI ツールおよび Python からの利用)について、サンプルデータの入手からインストール、基本的な使用方法までを解説する。
【その他情報】
【本資料の進め方】一つのサンプルデータ(日本の行政区域データ)を題材に、(1) 入手 → (2) GUI ツールで読み込み・確認 → (3) Python から検索、の順で進める。GUI ツールはデータの中身を画面で確認するときに、Python はプログラムから処理するときに使う。前半で作成したデータベースを後半で使うため、順に読み進めること。
【基礎用語】ジオメトリは、点・線・面といった図形データを指す。SRID(座標系)は、座標がどの測地系に基づくかを表す番号で、本資料の行政区域データは世界測地系 JGD2011(SRID は 6668)を用いる。空間メタデータは、SpatiaLite が座標系などを管理する内部テーブル群で、空間データを扱う前に初期化する(GUI で新規データベースを作る場合は自動で初期化される)。
【目次】
- 行政区域データ(サンプル)の入手
- SpatiaLite GUI のインストール
- GUI での読み込みとデータベースの作成
- Python から使うための事前準備
- Python・コマンドラインでの利用例
- 参考リンク
【関連する外部ページ】
The Gaia-SINS federated projects:https://www.gaia-gis.it/gaia-sins/
国土数値情報 行政区域データ:https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-2025.html
【サイト内の関連情報】
インタラクティブ,ダイナミックな地図(OpenStreetMap を利用)(本ページを含む関連ページの一覧)
前準備
Python 3.12 のインストール
Pythonのインストールを行い、Pythonのプログラムを実行する環境を整える。扱う環境は、Windows搭載パソコンである。金子研究室では、Python 3.12.10を推奨する。
[Windows での Python 3.12 のインストール手順を見るには、ここをクリック]
Windows での Python 3.12 のインストール
以下のいずれかの方法でPython 3.12をインストールする。Pythonがインストール済みの場合、この手順は不要である。
方法 1:winget によるインストール
【インストールコマンドの実行方法】
管理者権限でコマンドプロンプトを起動する(手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。そして、コマンド全体をコマンドプロンプトにコピー&ペーストする。
--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動するとPATHが反映される。
REM Python 3.12 をシステム領域にインストール
winget install --id Python.Python.3.12 -e --scope machine --silent --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 Include_test=0 Include_pip=1 Include_launcher=1 InstallLauncherAllUsers=1 TargetDir=\"C:\Program Files\Python312\""
REM Python と Scripts を PATH 先頭に追加
powershell -NoProfile -Command "$p='C:\Program Files\Python312'; $s=\"$p\Scripts\"; $c=[Environment]::GetEnvironmentVariable('Path','Machine'); if((Test-Path $p) -and (';'+$c+';' -notlike \"*;$p;*\") -and (';'+$c+';' -notlike \"*;$s;*\")){[Environment]::SetEnvironmentVariable('Path',\"$p;$s;$c\",'Machine')}"
方法 2:インストーラーによるインストール
- Python公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンからWindows用インストーラーをダウンロードする。
- ダウンロードしたインストーラーを実行する。
- 初期画面の下部に表示される「Add python.exe to PATH」にチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから
pythonコマンドを実行できない。 - 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。
インストールの確認
コマンドプロンプトで以下を実行する。
python --version
バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。
Python の開発環境 Visual Studio Code のインストールと Python 用の設定
Python の開発環境Visual Studio Code(プログラムを編集するソフトウェア。以下、VS Code)を整える。
[Windows での Visual Studio Code のインストールと Python 用の設定手順を見るには、ここをクリック]
Windows での Visual Studio Code のインストールと Python 用の設定手順
1. VS Code と拡張機能のインストール
以下のコマンドにより,既存の VS Code を削除し,全ユーザー共有の設定で再インストールしたうえで,拡張機能(VS Code に機能を追加するソフトウェア)をまとめて導入する.
【インストールコマンドの実行方法】
管理者権限でコマンドプロンプトを起動する(手順:Windows キーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。そして,コマンド全体をコマンドプロンプトにコピー&ペーストする。
インストールコマンド
REM ============================================================
REM Microsoft Visual Studio Code
REM ============================================================
winget uninstall -e --id Microsoft.VisualStudioCode --silent --disable-interactivity --accept-source-agreements
rmdir /s /q C:\ProgramData\vscode-extensions 2>nul
rmdir /s /q "%APPDATA%\Code" 2>nul
rmdir /s /q "%USERPROFILE%\.vscode" 2>nul
rmdir /s /q "%LOCALAPPDATA%\Microsoft\vscode-update" 2>nul
REM VS Code をシステム領域に新規インストール
winget install --scope machine --id Microsoft.VisualStudioCode -e --silent --accept-source-agreements --accept-package-agreements
REM 全ユーザー共有の拡張機能フォルダ
mkdir C:\ProgramData\vscode-extensions 2>nul
icacls "C:\ProgramData\vscode-extensions" /grant "Everyone:(OI)(CI)M" /T
REM スタートメニューのショートカットを --extensions-dir 付きで再作成
rmdir /s /q "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio Code" 2>nul
del "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio Code.lnk" 2>nul
powershell -NoProfile -Command "$s=New-Object -ComObject WScript.Shell; $lnk=$s.CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio Code.lnk'); $lnk.TargetPath='C:\Program Files\Microsoft VS Code\Code.exe'; $lnk.Arguments='--extensions-dir \"C:\ProgramData\vscode-extensions\"'; $lnk.Save()"
REM ショートカットの検証
powershell -NoProfile -Command "$s=New-Object -ComObject WScript.Shell; $lnk=$s.CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio Code.lnk'); Write-Host 'TargetPath:' $lnk.TargetPath; Write-Host 'Arguments:' $lnk.Arguments"
REM ファイル / フォルダ右クリックの「Code で開く」を登録
reg add "HKLM\SOFTWARE\Classes\*\shell\VSCode\command" /ve /d "\"C:\Program Files\Microsoft VS Code\Code.exe\" --extensions-dir \"C:\ProgramData\vscode-extensions\" \"%1\"" /f
reg add "HKLM\SOFTWARE\Classes\Directory\shell\VSCode\command" /ve /d "\"C:\Program Files\Microsoft VS Code\Code.exe\" --extensions-dir \"C:\ProgramData\vscode-extensions\" \"%1\"" /f
reg add "HKLM\SOFTWARE\Classes\Directory\Background\shell\VSCode\command" /ve /d "\"C:\Program Files\Microsoft VS Code\Code.exe\" --extensions-dir \"C:\ProgramData\vscode-extensions\" \"%V\"" /f
REM --extensions-dir 付きで起動する code.cmd ラッパを作成
REM (%* を echo で書くと対話的 cmd で失われるため、PowerShell で [char]37+'*' を書き出す)
powershell -NoProfile -Command "$pct=[char]37; $q=[char]34; $c='@echo off'+[char]13+[char]10+$q+'C:\Program Files\Microsoft VS Code\bin\code.cmd'+$q+' --extensions-dir '+$q+'C:\ProgramData\vscode-extensions'+$q+' '+$pct+'*'+[char]13+[char]10; [IO.File]::WriteAllText('C:\ProgramData\vscode-extensions\vscode.cmd',$c,[Text.Encoding]::ASCII)"
REM 拡張機能のインストール
set "CODE=C:\Program Files\Microsoft VS Code\bin\code.cmd"
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --uninstall-extension GitHub.copilot
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --uninstall-extension GitHub.copilot-chat
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension ms-python.python
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension ms-python.vscode-pylance
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension ms-python.debugpy
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension MS-CEINTL.vscode-language-pack-ja
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension saoudrizwan.claude-dev
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension rust-lang.rust-analyzer
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension tamasfe.even-better-toml
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension anthropic.claude-code
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension almenon.arepl
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --list-extensions --show-versions
echo === セットアップ完了 ===
2. Python インタプリタの選択
同一マシンに複数の Python がインストールされている場合,VS Code で使用する Python 本体(インタプリタ:Python プログラムを解釈・実行するソフトウェア)を選択する必要がある.
- コマンドパレット(コマンド名で機能を呼び出す VS Code の入力欄)を開く(
Ctrl+Shift+P) Python: Select Interpreterと入力する
- 表示される一覧から,使用する Python(例:
C:\Program Files\Python312\python.exe)を選択する.
Python プログラム実行手順
[Windows での Python プログラム実行手順を見るには、ここをクリック]
Windows での Python 実行手順(Visual Studio Codeを使用)
プログラムファイルの作成と保存
- 左サイドバーの「エクスプローラー」アイコン(
Ctrl+Shift+E)をクリックする
- 「NO FOLDER OPENED」(作業対象フォルダが未選択の状態)と表示される場合は,「Open Folder」をクリックし,プログラムを保存するフォルダを選択する
続いて「フォルダを信用するか」を確認する画面(フォルダ内のコードを実行してよいか確認する VS Code の仕組み)が表示されるので,チェックして Yes を選択する
- フォルダ名の右側に表示される「新しいファイル」アイコンをクリックする
- ファイル名(例:
aitask.py.ファイル名は何でも良い)を入力しEnterを押す.拡張子は.py(Python ファイルを示す拡張子)とする
- 実行したいコードを選択し,
Ctrl+Cでコピーする.VS Code のエディタ領域にCtrl+Vで貼り付ける Ctrl+Sで保存する
プログラムの実行
- エディタ右上の三角形「▷」アイコン(Run Python File:現在開いている Python ファイルを実行するボタン)をクリックする.または,エディタ上で右クリックし「ターミナルで Python ファイルを実行」を選択する
- VS Code 下部のターミナル(コマンドの入出力を表示する画面)に,実行結果(
print関数の出力等)が表示される
- tkinter(Python 標準の GUI ライブラリ)のファイル選択ダイアログを使うプログラムを実行した場合は,ダイアログが開くので対象画像を選択する
- VS Code 下部のターミナルで実行結果を確認する.OpenCV ウィンドウ(OpenCV が画像を表示するために開く専用ウィンドウ)が開いた場合はそちらも確認する.OpenCV ウィンドウは,マウスクリックでウィンドウをアクティブ(操作対象の状態)にしてからキーを押すと終了する
行政区域データ(サンプル)の入手
サンプルデータとして、国土数値情報の「行政区域データ」(識別子 N03)を使用する。これは全国の都道府県・市区町村の境界を表すベクタデータで、国土交通省が無償で公開している(オープンデータ、CC BY 4.0)。
- 国土数値情報の行政区域データのページを開く。
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-2025.html
- ページ下部の「ダウンロードするデータの選択」から、対象とする都道府県(本資料では東京都)と年度を選び、シェープファイル形式のデータをダウンロードする。
- ZIP ファイル(例:N03-yyyymmdd_13_GML.zip。13 は東京都のコード)のダウンロードが開始される。
- ダウンロードした ZIP ファイルを右クリックし、「すべて展開」で展開する。
- 展開後、生成された Shape ファイル(.shp、.dbf、.shx、.prj)を確認する。.shp ファイル名(例:N03-yy_13_yymmdd.shp)が、後の手順でテーブル名のもとになる。
このデータには、都道府県名(N03_001)、北海道の振興局名(N03_002)、郡名(N03_003)、市区町村名(N03_004)、政令指定都市の行政区名(N03_005)、全国地方公共団体コード(N03_007)の属性が含まれる。後の検索例ではこれらの列を使用する。
SpatiaLite GUI のインストール
SpatiaLite GUI(グラフィカルユーザインタフェース版)をインストールする。
- The Gaia-SINS federated projects の Web ページを開く。
- 「MS Windows binaries」の current stable version から、環境に合うものをクリックする。
x86 (32 bit) と amd64 (64 bit) の 2 種類がある。現在の Windows はほとんどが 64 bit のため、通常は amd64 (64 bit) を選ぶ。後の手順で必要になるため、選択した種別を記録しておく。
以下、amd64 (64 bit) を選択した場合の手順を示す。
- ファイル一覧から「spatialite_gui-...-win-amd64.7z」(最新の安定版は 5.1.0)をクリックする。
- ファイルのダウンロードが開始される。
- ダウンロードしたファイルは .7z 形式である。7-Zip で展開し、spatialite_gui.exe が生成されていることを確認する。
- spatialite_gui.exe をダブルクリックして実行する。
- SpatiaLite GUI のメインウィンドウが表示される。
GUI での読み込みとデータベースの作成
SpatiaLite GUI を使い、第1章で入手した行政区域データを読み込んで、SpatiaLite のデータベースファイル(.sqlite)を作成する。ここで作成したデータベースは、第5章の Python 例で使用する。
- SpatiaLite GUI を起動し、ツールバーの「Creating a new (empty) SQLite DB」をクリックして、新しいデータベースファイルを作成する。ファイル名は gyouseikuiki.sqlite とする(新規データベースの作成時に、空間メタデータは自動的に初期化される)。
- 「Load Shapefile」をクリックする。
- ファイル選択ダイアログで、第1章で展開した行政区域データの .shp ファイルを選択する。
- 読み込み設定ダイアログで、テーブル名を確認し(.shp のファイル名がそのままテーブル名になる。例:N03-yy_13_yymmdd)、文字コードに「CP932」(日本語 Shape ファイルの一般的な符号化。文字化けする場合は「UTF_8」を試す)、SRID に「6668」(世界測地系 JGD2011)を指定して「OK」をクリックする。
- データの読み込みが開始される。
- 読み込みが完了すると、左側のツリービューにテーブルが表示される。
- 作成されたテーブルを右クリックし、「Edit table rows」を選択する。
- 都道府県名や市区町村名の内容が表示されれば、読み込みは成功である。次章以降では、この gyouseikuiki.sqlite を Python から利用する。
Python から使うための事前準備
Python やコマンドラインから SpatiaLite を使用する場合、SpatiaLite の拡張モジュール(DLL)を別途用意する。
- mod_spatialite の入手と確認
SpatiaLite の拡張モジュール本体は、Windows では mod_spatialite.dll である。Gaia-SINS のダウンロードページから「mod_spatialite-5.1.0-win-amd64.7z」(64 bit の場合)を入手して展開し、mod_spatialite.dll と、同梱の依存 DLL 一式が同じフォルダ内にあることを確認する。これらの DLL はすべて同じフォルダにまとめておく。
- DLL フォルダの場所を控える
展開した DLL 一式を置いたフォルダ(例:
C:\tool\spatialite)のパスを控える。Python から利用する際に、このフォルダを指定する。 - SQLite 3 コマンドライン版の入手(任意)
コマンドラインから直接 SpatiaLite を試す場合は、SQLite 3 のコマンドラインツール(sqlite3.exe)が必要である。SQLite 公式ダウンロードページの「Precompiled Binaries for Windows」から入手できる。Python から使う場合は Python 同梱の sqlite3 モジュールで足りるため、この手順は不要である。
Python・コマンドラインでの利用例
第3章で作成した行政区域データベース gyouseikuiki.sqlite を対象に、SpatiaLite を Python やコマンドラインから使用する例を示す。
Python での利用例(Windows)
指定した座標(東京都庁付近)を含む行政区域(市区町村)を検索する。使用する空間関数は、MBRContains(最小境界矩形による包含判定)、GeomFromText(テキストからジオメトリへの変換)、AsGeoJson(ジオメトリの GeoJSON 形式への変換)である。
Windows では、mod_spatialite.dll とその依存 DLL を Python に見つけさせるために、os.add_dll_directory() で DLL のあるフォルダを登録する(Python 3.8 以降では、環境変数 PATH への連結では DLL を見つけられないことがある)。
import os
import sqlite3
# 第4章で展開した mod_spatialite.dll と依存 DLL を置いたフォルダ
SPATIALITE_DIR = r'C:\tool\spatialite'
# DLL の検索フォルダとして登録する
os.add_dll_directory(SPATIALITE_DIR)
# 第3章で作成したデータベースに接続する
conn = sqlite3.connect('gyouseikuiki.sqlite')
# 拡張のロードを許可してから mod_spatialite を読み込む
conn.enable_load_extension(True)
conn.load_extension('mod_spatialite')
# テーブル名は第3章で読み込んだ .shp のファイル名に合わせて変更する
table = '"N03-yy_13_yymmdd"'
# 東京都庁付近の座標 (経度 139.6917, 緯度 35.6895) を含む行政区域を検索する
# 末尾の 6668 は座標系 (SRID): 世界測地系 JGD2011
sql = f"""
SELECT N03_001, N03_003, N03_004, N03_005, N03_007, AsGeoJson(Geometry)
FROM {table}
WHERE MBRContains(Geometry, GeomFromText('POINT(139.6917 35.6895)', 6668))
"""
cur = conn.execute(sql)
for row in cur:
print('----------------------------')
print('都道府県名 :', row[0])
print('郡名 :', row[1])
print('市区町村名 :', row[2])
print('政令市の行政区名:', row[3])
print('団体コード :', row[4])
# row[5] は GeoJSON 文字列
conn.close()
補足:第3章で 6668 以外の SRID を指定した場合は、GeomFromText の第2引数をその値に合わせる。enable_load_extension で「not authorized」等のエラーが出る場合は、拡張ロードが無効化された環境である。その場合は別の SQLite ビルドや pysqlite3-binary 等の導入を検討する。
SQLite 3 コマンドライン版での例
SQLite 3 のコマンドライン(sqlite3.exe)から同じデータベースを開き、SpatiaLite 拡張を読み込んで検索する。mod_spatialite を置いたフォルダにあらかじめ移動しておくか、フルパスで指定する(Windows では拡張子 .dll を省略してよい)。末尾の 6668 は座標系(SRID)である。
SELECT load_extension('mod_spatialite');
SELECT N03_001, N03_004 FROM "N03-yy_13_yymmdd"
WHERE MBRContains(Geometry, GeomFromText('POINT(139.6917 35.6895)', 6668));
空のデータベースを新規に作ってから空間データを扱う場合は、最初に空間メタデータを初期化する(GUI で新規作成した場合は不要)。
SELECT InitSpatialMetaData(1);
ogr2ogr コマンド(データ形式の変換)
ogr2ogr は GDAL ライブラリ(地理空間データの変換・処理ライブラリ)に含まれるコマンドラインツールで、地理空間データの形式変換に使用する。Windows では、GDAL を含む OSGeo4W をインストールすると ogr2ogr が利用できる。行政区域の Shape ファイルを GeoJSON 形式に変換する例を示す。
ogr2ogr -f GeoJSON output.geojson "N03-yy_13_yymmdd.shp"
ジオメトリ(図形データ)を簡略化しながら変換する例を示す。-sql の FROM に指定する src は、変換元ファイル(src.shp)のレイヤ名である。
ogr2ogr -f "ESRI Shapefile" dst.shp src.shp -dialect SQLITE -sql "SELECT ST_Simplify(geometry, 0.001) FROM src"
参考リンク
SpatiaLite やサンプルデータの詳細については、以下を参照。
SpatiaLite 5.1.0 SQL functions reference list
SpatiaLite で使用可能な SQL 関数の一覧。
https://www.gaia-gis.it/gaia-sins/spatialite-sql-5.1.0.html
The SpatiaLite Cookbook 5
SpatiaLite の実践的な使用方法を解説したチュートリアル。
https://www.gaia-gis.it/gaia-sins/spatialite-cookbook-5/index.html
The Gaia-SINS federated projects(ダウンロード元)
SpatiaLite GUI、mod_spatialite、spatialite-tools などの Windows バイナリの入手元。
https://www.gaia-gis.it/gaia-sins/
国土数値情報 行政区域データ(サンプルデータ)
本資料で使用したサンプルデータの入手元と属性の定義。
https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-2025.html