これはいいんじゃないか?
ただ作成がArcPy Only ?まあ大した問題ではない。
ST_Geometry.dllをどこまで配布していいのかとかは謎。
実戦で使用の場合は確認か。(たぶんコピーだけで動くのでは?)
とりあえず Desktop インストールディレクトリにsoとdllが詰まっている。
Androidでso使いたいが、ARMビルドを提供してはくれないものかな。
要はdllとかsoを読ませればあとはSQLite3が駆動するので非常にお手軽。
ファイル読み込みさえ可能ならば空間判定・空間演算ができるようになる。
全て関数でジオメトリ型自体に関数つかないのがSQLiteの実装か。
GEOS/PROJ.4が必要なSpatiaLiteと比較して、より簡易で使い易いか。
ST_Geometry実装自体の情報も少ないが、Oracle/PostgreSQL/SQLiteラッパ以外は概ね共通のはず?
速度周りは気になるぐらいか、Oracleはextprocの影響をもろにかぶりそうだが。
コードは下記
exeと同ディレクトリにdll置いておいて確認。
300001のSRIDはJGD2000だがやはりSpatialRef用のテーブルで制御されている模様。
FactoryCode等から取得するクエリを用意する等の前準備は必要か。
using System; using System.Data; using System.Data.SQLite; using System.Diagnostics; public class SQLiteDac { public static void Test() { string filePath = @"C:\Data\ST_GEOM.sqlite"; using (SQLiteConnection sqlCon = new System.Data.SQLite.SQLiteConnection("Data Source=" + filePath)) using (SQLiteCommand cmd = sqlCon.CreateCommand()) using (DataSet ds = new System.Data.DataSet()) { sqlCon.Open(); const string EXT_QUERY = "SELECT load_extension('stgeometry_sqlite.dll','SDE_SQL_funcs_init');"; cmd.CommandText = EXT_QUERY; cmd.ExecuteNonQuery(); //cmd.CommandText = "SELECT *, st_srid(Shape) FROM JPN71"; cmd.CommandText = @" SELECT * FROM JPN71 TAB WHERE st_intersects(st_geomfromtext('point (135.0 35.0)', 300001), TAB.Shape) = 1"; SQLiteDataAdapter dataAdapter = new System.Data.SQLite.SQLiteDataAdapter(); dataAdapter.SelectCommand = cmd; dataAdapter.Fill(ds); DataTable dt = ds.Tables[0]; using (dt) { foreach (DataColumn col in dt.Columns) { Console.Write(col.ColumnName); Console.Write(","); } Console.Write(Environment.NewLine); foreach (DataRow row in dt.Rows) { foreach (DataColumn col in dt.Columns) { Console.Write(row[col]); Console.Write(","); }//end col Debug.Write(Environment.NewLine); }//end row }//end table sqlCon.Close(); }//end sqlite }//end method }//end class