Go语言和Python使用Spatialite配置(Linux和Windows)
Windows
关于
Windows的解决方案,仅在Python语言中测试通过GO语言在Windows下加载Spatialite仍然未通过。
全网唯一的一篇如何在Windows下Python编程配置Spatialite的教程,非常详细,建议大家看一看
核心要点
- 下载
Spatialite的库文件,完整的库文化由多个.dll相互依赖的DLL组成,一个不能少; - 将
Spatialite的库文件的存放目录添加到环境变量Path中; - 下载
sqlite3最新版的库文件sqlite3.dll,也放在系统环境变量Path路径中,如C:\Windows\system32等;
为什么要使用最新版:从此文得知,要使用Spatialite扩展,需要sqlite3支持R-tree,是否支持的测试方法,
sqlite中执行以下sql语句不报错:CREATE VIRTUAL TABLE testrtree USING rtree(id,minX,maxX,minY,maxY);
Python编程语言在使用sqlite3包及后续加载Spatialite扩展时会自动到Path环境变量中搜索相应DLL,如果没有找到,就会报错;
下载方法:
访问:https://www.gaia-gis.it/gaia-sins/ 找到
MS Windows binaries->current stable version截止到成文时的最新版下载地址
Windows环境下Go语言加载Spatialite(全网唯一)
虽然
GO语言有现成的加载Spatialite的实现:https://github.com/shaxbee/go-spatialite但是其仅适用于Linux类环境,经测试Windows下加载Spatialite仍然未通过,原因未知。
2023年12月25日17时测试发现:将本文Go语言使用Spatialite章节中的代码放在Spatialite库文件目录中,可正常运行了,也就是说,Go语言在Windows下加载Spatialite,编译程序需要直接在当前目录查找mod-spatialite库文件,而不会在Path中搜索mod-spatialite库文件。
整体目录结果如下:
|
|
2023年12月25日20时再次测试发现:
直接在SQLiteDriver中指定
mod-spatialite库文件路径就能正常运行代码,完整代码如下:
|
|
将文本型地理数据导入到Spatialite数据库中
工具实现
- 使用脚本将所有数据汇集到一个
GEOJSON文件中; 2 .使用Spatialite GUI(成文时的官方下载地址)导入GEOJSON文件; - 保存到
Spatialite数据库。 坑 使用Spatialite GUI加载https://www.geojson.io生成的GEOJSON文件,结果报错load GeoJSON error:GeoJSON parser: invalid Geometry (fid=1)
官方文档关于Spatialite GUI加载GEOJSON文件的描述也没有解决方法。
故,还是只能走编程事先的路。
编程实现
见:https://coloraven.github.io/2023/12/geopandas读取geojson文件并写入Spatialite数据库/
Linux
环境配置
- 直接使用
apt安装,如apt-get install libsqlite3-mod-spatialite(Ubuntu测试通过) - 从
http://www.gaia-gis.it下载最新的Linux版本的Spatialite库文件,然后自行编译(不推荐)
|
|
Go语言使用Spatialite
方法暂不支持
来源:https://gist.github.com/ptrv/6335248Windows
|
|
Docker
Alpine
已编译好的现成容器(基于alpine):
SpatiaLite: https://github.com/Geocodio/docker-alpine-spatialiteSQLite + SpatiaLite: https://github.com/wakumaku/spatialite- docker hub中使用数最多的容器: https://github.com/Geocodio/docker-alpine-spatialite
Windows下本地容器Linux开发环境
|
|
Ubuntu下编译Spatialite:https://github.com/Dushistov/libspatialite
其他【关联文章备份】
- 各个系统下
Spatialite的编译:https://github.com/Dushistov/libspatialite - 修改此处代码的
libspatialite为mod_spatialite即可在Linux中成功运行:https://github.com/pampa0629/gogis/blob/cc934844d334c46a1dc6ef42c8488d4179edd902/src/gogis/study/spatialite-tst.go sourcegraph.com中搜索mod_spatialite lang:Go来获取Go语言的mod_spatialite加载Spatialite的实现:https://sourcegraph.com/search?q=context:global+++++mod_spatialite+lang:Go&patternType=standard&sm=1&groupBy=repo- 一个专注于空间地理的
Go项目:https://github.com/go-spatial/geom - 关于无法加载
Spatialite的讨论:https://groups.google.com/g/Golang-nuts/c/Kj0WKQaLBqY - 中文作者用
GO实现的GIS功能,其中有Spatialite的加载及测试,项目地址:https://github.com/pampa0629/gogis GO语言的加载Spatialite的实现:https://github.com/shaxbee/go-spatialite- 纯Go实现的地理关系计算:https://github.com/tidwall/geojson/geometry
- https://github.com/golang/geo/s2
- https://github.com/paulmach/orb
- 自带地理数据库的web服务,https://github.com/tidwall/tile38
- https://mp.weixin.qq.com/s/ZHVBLhd8yNuSynRCgLXQcQ
- geopanda 写入spatialite: https://www.giacomodebidda.com/posts/export-a-geodataframe-to-spatialite/