SpatialiteはSQLiteに空間データを扱う機能を拡張したデータベース。
C#からSpatialiteにアクセスするにはSQLiteの.Net ProviderとSpatialiteの拡張機能のmod_spatialite.dllを使用する。
(1)SQLiteの.net providerのダウンロード
今回は.NET Framework4.0で使用するため、以下のサイトより
https://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki
Precompiled Binaries for 32-bit Windows (.NET Framework 4.0)である
sqlite-netFx40-binary-Win32-2010-1.0.99.0.zip
または
sqlite-netFx40-binary-bundle-Win32-2010-1.0.99.0.zip
をダウンロードし、
System.Data.SQLite.dll、
SQLite.Interop.dll
を使用
(2)mod_spatialite.dllのダウンロード
Spatialiteより
32bitならば
http://www.gaia-gis.it/gaia-sins/windows-bin-x86/mod_spatialite-4.3.0a-win-x86.7z
64bitならば
http://www.gaia-gis.it/gaia-sins/windows-bin-amd64/mod_spatialite-4.3.0a-win-amd64.7z
をダウンロード
以下のファイルが入っている(32bitの場合)
libfreexl-1.dll
libgcc_s_dw2-1.dll
libgeos-3-5-0.dll
libgeos_c-1.dll
libiconv-2.dll
liblzma-5.dll
libproj-9.dll
libsqlite3-0.dll
libstdc++-6.dll
libxml2-2.dll
mod_spatialite.dll
sqlite3.exe
zlib1.dll
(3)検証プログラムの作成
C:\temp\svg\T02.shp
を仮想テーブル「T02」に読み込む
SQLiteの.net providerを参照設定しmod_spatialite.dllと関連ファイルにPATHを通す。
using System.Data.SQLite; public partial class Form1 : Form { private void button1_Click(object sender, EventArgs e) { string filename = @"c:\temp\db.sqlite"; SQLiteConnection con = new SQLiteConnection(); con.ConnectionString = string.Format("Data Source={0}", filename); con.Open(); // 拡張DLLのロード using (SQLiteCommand cmd = new SQLiteCommand("SELECT load_extension(\"mod_spatialite\")", con)) { cmd.ExecuteNonQuery(); SQLiteCommand cmd2 = new SQLiteCommand("CREATE VIRTUAL TABLE T02 USING VirtualShape(\"C:\\temp\\svg\\T02\", \"CP1252\", 23032)", con); md2.ExecuteNonQuery(); } con.Close(); con = null; } }
CP1252は文字コードなのでSHIFT JISならば[SHIFT_JIS]を設定
23032はEPSGなのでデータのEPSGを設定
VirtualShapeは以前はmod_spatialiteとは異なる拡張DLLだったが、今は同じようだ?