当前位置: 首页 > 工具软件 > SpatiaLite > 使用案例 >

【Windows 10】在sprint-boot中配置spatialite环境

范麒
2023-12-01

写在前面的话

前几天在deepin里配置好了spatialite的插件,没想到一样的代码在windows里跑的时候,出现了no native library is found for os.name windows… 的错误,花了两天的时候,尝试失败了无数次,找了各种网站,终于成功了!!!

开始操作

1. 下载mod_spatialite包

从官网上下载mod_spatialite的压缩包,并解压:mod_spatialite-5.0.1-win-amd64.7z

2. mod_spatialite.dll及依赖dll的存储位置

这一步十分关键,正是被这一个步骤折腾了非常久,真的非常久。
必须将解压后的文件放在你的项目的根目录下,即项目的最外层目录,否则下一步操作会有问题。
我也是参考了这篇博客才看到的->spatialite-dll配置真是烦!

3. 加载mod_spatialite.dll模块

由于我们使用的是 加载mod_spatialite.dll模块的方式,所以我们加载的jdbc就直接用sqlite-jdbc,不再使用上一篇linux中用的spatialite-jdbc。
p.s. 如果有小伙伴编译好了可用于Windows版本的spatialite-jdbc,请共享一份给我啊!
用SQL语句加载mod_spatialite.dll模块,并测试一下是否加载成功。

SELECT load_extension('mod_spatialite');
SELECT sqlite_version(), spatialite_version(), spatialite_target_cpu();

如果加载成功,可以看到类似这样的输出。

3.31.1|5.0.0|x86_64-w64-mingw32

原以为,这样就搞定了。谁知道在测试下面这段语句时,出现了另一个错误。

sqlite> select AsGeoJSON(ST_Transform(MakePoint(114.1689,22.4518,4326),3857));
Error: ST_Transform exception - PROJ reports "proj_create: no database context specified".

4. 配置proj.db数据库

找了一会儿,发现可能是proj.db数据库没有配置对,可参考以下网页:spatialite与proj6
可通过以下代码测试是否正确绑定proj.db数据库
如果有显示路径,表示已正确配置,如下:

sqlite> SELECT PROJ_GetDatabasePath();
D:\spatialite/proj.db

若没有显示任何信息,则表示配置不正确,可通过以下代码查询具体的错误信息:

sqlite> SELECT PROJ_GetDatabasePath();

sqlite> SELECT PROJ_GetLastErrorMsg();
proj_context_get_database_path: Cannot find proj.db

这时,可通过以下代码配置proj.db库

sqlite> SELECT PROJ_SetDatabasePath('D:/proj.db');
D:/proj.db

再次测试,成功!

sqlite> select AsGeoJSON(ST_Transform(MakePoint(114.1689,22.4518,4326),3857));
{"type":"Point","coordinates":[12709223.81242817,2565856.375115402]}

sqlite> SELECT PROJ_AsWKT('EPSG', 4326);
GEODCRS["WGS 84",
    DATUM["World Geodetic System 1984",
        ELLIPSOID["WGS 84",6378137,298.257223563,
            LENGTHUNIT["metre",1]]],
    PRIMEM["Greenwich",0,
        ANGLEUNIT["degree",0.0174532925199433]],
    CS[ellipsoidal,2],
        AXIS["geodetic latitude (Lat)",north,
            ORDER[1],
            ANGLEUNIT["degree",0.0174532925199433]],
        AXIS["geodetic longitude (Lon)",east,
            ORDER[2],
            ANGLEUNIT["degree",0.0174532925199433]],
    SCOPE["Horizontal component of 3D system."],
    AREA["World."],
    BBOX[-90,-180,90,180],
    ID["EPSG",4326]]
 类似资料: