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 で新規データベースを作る場合は自動で初期化される)。

目次

  1. 行政区域データ(サンプル)の入手
  2. SpatiaLite GUI のインストール
  3. GUI での読み込みとデータベースの作成
  4. Python から使うための事前準備
  5. Python・コマンドラインでの利用例
  6. 参考リンク

関連する外部ページ

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:インストーラーによるインストール

  1. Python公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンからWindows用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」にチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「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 プログラムを解釈・実行するソフトウェア)を選択する必要がある.

  1. コマンドパレット(コマンド名で機能を呼び出す VS Code の入力欄)を開く(Ctrl+Shift+P
  2. Python: Select Interpreter と入力する
  3. 表示される一覧から,使用する Python(例:C:\Program Files\Python312\python.exe)を選択する.

Python プログラム実行手順

[Windows での Python プログラム実行手順を見るには、ここをクリック]

Windows での Python 実行手順(Visual Studio Codeを使用)

プログラムファイルの作成と保存

  1. 左サイドバーの「エクスプローラー」アイコン(Ctrl+Shift+E)をクリックする
  2. 「NO FOLDER OPENED」(作業対象フォルダが未選択の状態)と表示される場合は,「Open Folder」をクリックし,プログラムを保存するフォルダを選択する

    続いて「フォルダを信用するか」を確認する画面(フォルダ内のコードを実行してよいか確認する VS Code の仕組み)が表示されるので,チェックして Yes を選択する

  3. フォルダ名の右側に表示される「新しいファイル」アイコンをクリックする
  4. ファイル名(例:aitask.py.ファイル名は何でも良い)を入力し Enter を押す.拡張子は .py(Python ファイルを示す拡張子)とする
  5. 実行したいコードを選択し,Ctrl+C でコピーする.VS Code のエディタ領域に Ctrl+V で貼り付ける
  6. Ctrl+S で保存する

プログラムの実行

  1. エディタ右上の三角形「▷」アイコン(Run Python File:現在開いている Python ファイルを実行するボタン)をクリックする.または,エディタ上で右クリックし「ターミナルで Python ファイルを実行」を選択する
  2. VS Code 下部のターミナル(コマンドの入出力を表示する画面)に,実行結果(print 関数の出力等)が表示される
  3. tkinter(Python 標準の GUI ライブラリ)のファイル選択ダイアログを使うプログラムを実行した場合は,ダイアログが開くので対象画像を選択する
  4. VS Code 下部のターミナルで実行結果を確認する.OpenCV ウィンドウ(OpenCV が画像を表示するために開く専用ウィンドウ)が開いた場合はそちらも確認する.OpenCV ウィンドウは,マウスクリックでウィンドウをアクティブ(操作対象の状態)にしてからキーを押すと終了する

行政区域データ(サンプル)の入手

サンプルデータとして、国土数値情報の「行政区域データ」(識別子 N03)を使用する。これは全国の都道府県・市区町村の境界を表すベクタデータで、国土交通省が無償で公開している(オープンデータ、CC BY 4.0)。

  1. 国土数値情報の行政区域データのページを開く。

    https://nlftp.mlit.go.jp/ksj/gml/datalist/KsjTmplt-N03-2025.html

  2. ページ下部の「ダウンロードするデータの選択」から、対象とする都道府県(本資料では東京都)と年度を選び、シェープファイル形式のデータをダウンロードする。
    国土数値情報のダウンロードページで都道府県と形式を選択する画面
  3. ZIP ファイル(例:N03-yyyymmdd_13_GML.zip。13 は東京都のコード)のダウンロードが開始される。
    ダウンロード開始の確認画面
  4. ダウンロードした ZIP ファイルを右クリックし、「すべて展開」で展開する。
  5. 展開後、生成された 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(グラフィカルユーザインタフェース版)をインストールする。

  1. The Gaia-SINS federated projects の Web ページを開く。

    https://www.gaia-gis.it/gaia-sins/

  2. 「MS Windows binaries」の current stable version から、環境に合うものをクリックする。

    x86 (32 bit) と amd64 (64 bit) の 2 種類がある。現在の Windows はほとんどが 64 bit のため、通常は amd64 (64 bit) を選ぶ。後の手順で必要になるため、選択した種別を記録しておく。

    Gaia-SINS ページで MS Windows binaries を選択する画面

    以下、amd64 (64 bit) を選択した場合の手順を示す。

  3. ファイル一覧から「spatialite_gui-...-win-amd64.7z」(最新の安定版は 5.1.0)をクリックする。
    spatialite_gui のダウンロードリンクを選択する画面
  4. ファイルのダウンロードが開始される。
    ファイルダウンロード中の画面
  5. ダウンロードしたファイルは .7z 形式である。7-Zip で展開し、spatialite_gui.exe が生成されていることを確認する。
    展開後の spatialite_gui.exe ファイル
  6. spatialite_gui.exe をダブルクリックして実行する。
  7. SpatiaLite GUI のメインウィンドウが表示される。
    spatialite_gui の起動画面

GUI での読み込みとデータベースの作成

SpatiaLite GUI を使い、第1章で入手した行政区域データを読み込んで、SpatiaLite のデータベースファイル(.sqlite)を作成する。ここで作成したデータベースは、第5章の Python 例で使用する。

  1. SpatiaLite GUI を起動し、ツールバーの「Creating a new (empty) SQLite DB」をクリックして、新しいデータベースファイルを作成する。ファイル名は gyouseikuiki.sqlite とする(新規データベースの作成時に、空間メタデータは自動的に初期化される)。
  2. 「Load Shapefile」をクリックする。
    Load Shapefile メニューを選択する画面
  3. ファイル選択ダイアログで、第1章で展開した行政区域データの .shp ファイルを選択する。
    行政区域データの Shape ファイルを選択するダイアログ
  4. 読み込み設定ダイアログで、テーブル名を確認し(.shp のファイル名がそのままテーブル名になる。例:N03-yy_13_yymmdd)、文字コードに「CP932」(日本語 Shape ファイルの一般的な符号化。文字化けする場合は「UTF_8」を試す)、SRID に「6668」(世界測地系 JGD2011)を指定して「OK」をクリックする。
    テーブル名・文字コード・SRID を指定する画面
  5. データの読み込みが開始される。
    データ読み込み中の画面
  6. 読み込みが完了すると、左側のツリービューにテーブルが表示される。
    データ読み込み完了後の画面
  7. 作成されたテーブルを右クリックし、「Edit table rows」を選択する。
    テーブルの右クリックメニューで Edit table rows を選択する画面
  8. 都道府県名や市区町村名の内容が表示されれば、読み込みは成功である。次章以降では、この gyouseikuiki.sqlite を Python から利用する。

Python から使うための事前準備

Python やコマンドラインから SpatiaLite を使用する場合、SpatiaLite の拡張モジュール(DLL)を別途用意する。

  1. mod_spatialite の入手と確認

    SpatiaLite の拡張モジュール本体は、Windows では mod_spatialite.dll である。Gaia-SINS のダウンロードページから「mod_spatialite-5.1.0-win-amd64.7z」(64 bit の場合)を入手して展開し、mod_spatialite.dll と、同梱の依存 DLL 一式が同じフォルダ内にあることを確認する。これらの DLL はすべて同じフォルダにまとめておく。

  2. DLL フォルダの場所を控える

    展開した DLL 一式を置いたフォルダ(例:C:\tool\spatialite)のパスを控える。Python から利用する際に、このフォルダを指定する。

  3. 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