在RSQLite crasks R(OS X&;Ubuntu)中加载spatialite扩展
我正在对spatialite数据库运行一些查询,希望将数据直接输入R。建议我可以这样做:在RSQLite crasks R(OS X&;Ubuntu)中加载spatialite扩展,r,sqlite,spatialite,R,Sqlite,Spatialite,我正在对spatialite数据库运行一些查询,希望将数据直接输入R。建议我可以这样做: library(RSQLite) sqldrv <- dbDriver("SQLite") con <- dbConnect(sqldrv, dbname = "/path/to/db.sqlite",loadable.extensions = TRUE) spatialitestatus <- dbGetQuery(con, "SELECT load_extension('libs
library(RSQLite)
sqldrv <- dbDriver("SQLite")
con <- dbConnect(sqldrv, dbname = "/path/to/db.sqlite",loadable.extensions = TRUE)
spatialitestatus <- dbGetQuery(con, "SELECT load_extension('libspatialite.dylib')")
在我的例子中,spatialite是使用自制从源代码构建的,我通常使用的sqlite版本也是如此。在libspatialite自制的定义中,它说它依赖于sqlite>3.7.3。我自制的sqlite版本是3.7.17
我不知道默认情况下sqlite RSQLite的版本是什么,但我假设它是RSQLite源代码包中包含的3.7.17版本。我尝试使用install.packages(c(“RSQLite”),type=“source”)
从源代码构建RSQLite,希望它能简单地使用我的sqlite版本,但看起来不像是这样。或者如果真的发生了,它还在崩溃
最后,我要提到的是,我在两个版本的R下进行了尝试,结果相同:
- R 3.0.0以二进制形式从CRAN下载
- R 3.0.1以源代码形式下载并通过自制软件安装
使用Ubuntu FOSS GIS存储库提供的libspatialite 5在Ubuntu 13.04中确认崩溃。最近版本的libspatialite(4.x)似乎有问题。此外,加载自制的libspatialite3扩展是可行的,但随后的查询会导致相同的错误
最后,我的(短期的、临时的、黑客式的)解决方案是创建一个R包,编译自己的spatialite并加载它 Mac分支的维护者Simon Urbanek建议不要使用MacPorts、Homebrew或Fink安装外部软件包。您所说的外部软件包是什么意思?非R系统库?在spatialite的例子中,我甚至不知道在哪里可以下载预构建的二进制文件。如果我是从源代码构建,我会像homebrew那样做。是的,如果你喜欢非R系统库。据我所知,出现问题的原因是源代码被构建到了“错误”的目录中。通过发布到Mac-R邮件列表,您可能会得到更多有见识的建议。据我所知,没有任何版本的libspatialite可通过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')")