在Sqlite数据库的基础上进行扩展Spatialite空间插件,保证数据操作时支持空间函数。
1. 扩展模块下载
众所周知,sqlite的空间扩展为SpatiaLite,其官方针对NET提供了对应的插件进行扩展,下载地址在这里:The Gaia-SINS federated project home-page (gaia-gis.it) 。
需根据自身程序的类型进行下载,此处以64位为例,选择如下:
MS Windows binaries→ current stable version→64
下载 mod_spatialite-5.0.1-win-amd64.7z,并在本地解压。
2. 加载扩展模块
拷贝上一步解压的文件夹到Debug下,我的如下(Debug/mod_spatialite/):
将此文件夹加到环境变量中,保障程序可以读取到:
Environment.SetEnvironmentVariable("PATH", 绝对路径+ "/Dubug/mod_spatialite;" + Environment.GetEnvironmentVariable("PATH"));
然后需要通过Nuget获取System.Data.SQLite包。无论通过ADO还是EF6都将会构建数据库连接对象:System.Data.SQLite.SQLiteConnection。
构建完成后,打开连接,调用.LoadExtension("mod_spatialite.dll")方法进行扩展加载。至此,完成了空间扩展的加载。
如果是EF6,在DBContext中如下即可:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
(base.Database.Connection as SQLiteConnection).LoadExtension("mod_spatialite.dll");
base.OnModelCreating(modelBuilder);
}
需要注意的是程序本身的位数、sqlite包的位数以及空间扩展的位数要一样。要么统一为32位,要么统一为64位,不然会加载不成功!