我正在对空间数据库运行一些查询,并希望将数据直接导入 R。此页面建议我可以执行以下操作:
library(RSQLite)
sqldrv <- dbDriver("SQLite")
con <- dbConnect(sqldrv, dbname = "/path/to/db.sqlite",loadable.extensions = TRUE)
spatialitestatus <- dbGetQuery(con, "SELECT load_extension('libspatialite.dylib')")
但是当我这样做时,R 会出现以下错误:
*** caught segfault ***
address 0x0, cause 'memory not mapped'
Traceback:
1: .Call("RS_SQLite_fetch", rsId, nrec = n, PACKAGE = .SQLitePkgName)
2: sqliteFetch(rs, n = -1, ...)
3: sqliteQuickSQL(conn, statement, ...)
4: dbGetQuery(con, "SELECT load_extension('/usr/local/lib/libspatialite.dylib')")
5: dbGetQuery(con, "SELECT load_extension('/usr/local/lib/libspatialite.dylib')")
就我而言,spatialite 是使用 Homebrew 从源代码构建的,我通常使用的 sqlite 版本也是如此。在 libspatialite homebrew 定义中,它说它取决于 sqlite > 3.7.3。我自制的 sqlite 版本是 3.7.17
我不确定默认情况下会引入哪个版本的 sqlite RSQLite,但我认为它是 RSQLite 源包中包含的 3.7.17 版本。我尝试使用从源代码构建 RSQLite install.packages(c("RSQLite"), type="source")
,希望它只会使用我的 sqlite 版本,但它看起来不像。或者,如果确实如此,它仍然会崩溃。
最后,我应该提到我在两个版本的 R 下尝试了这个,结果相同:
- 从 CRAN 以二进制形式下载的 R 3.0.0
- R 3.0.1 以源代码形式下载并通过自制软件安装
更新:
使用 Ubuntu FOSS GIS 存储库提供的 libspatialite5 在 Ubuntu 13.04 中确认了崩溃。