我仍然无法在设置使用Spatialite作为Windows计算机后端的GeoDjango安装时遇到问题。
我使用GeoDjango安装程序并从http://www.gaia-gis.it/spatialite/binaries.html下载了预编译的库,并将它们转储到我的geodjango / bin目录中。
我将我的pysqlite2安装升级到最新版本,以便可以加载扩展程序并在我的设置文件中指定SPATIALITE_LIBRARY_PATH
。
当我运行manage syncdb
时,我得到以下输出
C:\stuff>manage.py syncdb SpatiaLite version ..: 2.3.1 Supported Extensions: - 'VirtualShape' [direct Shapefile access] - 'VirtualText' [direct CSV/TXT access] - 'VirtualNetwork [Dijkstra shortest path] - 'RTree' [Spatial Index - R*Tree] - 'MbrCache' [Spatial Index - MBR cache] - 'VirtualFDO' [FDO-OGR interoperability] - 'SpatiaLite' [Spatial SQL - OGC] PROJ.4 Rel. 4.6.1, 21 August 2008 GEOS version 3.0.2-CAPI-1.4.2
但是,在设置表的索引时,我收到以下消息:
... Installing custom SQL for core.LocationHint model updateTableTriggers: "no such module: rtree" ...
我试图忽略该消息,但我的模型无法正确保存。
我有点困惑,因为似乎使用了Spatialite库并且启用了“RTree”扩展,但我仍然收到错误消息。 关于此错误的在线信息不多;我在sqlite.org/rtree.html上找到了RTree文档,但我的印象是它已经包含在spatialite中,因为它是在“支持的扩展”下的监听。
我真的需要编译自己的sqlite库吗?有人可以提供已包含RTree的.dll吗?我做错了什么吗?感谢任何帮助,谢谢!
答案 0 :(得分:1)
Hans,spatialite是SQLITE3的扩展。
SQLite3需要使用此选项进行专门编译,而且通常不会。例如,mac上的默认版本不使用RTREE编译。不过我觉得sqlite3应该包含在你的python安装& pysqlite可能使用原始版本的sqlite3或其他版本。
您可以尝试使用sqlite3.version查看python正在使用的版本。
另请注意,您必须使用正确的配置选项重新安装pysqlite模块,即在运行setup.py install之前,请更改setup.cfg:
[build_ext]
#define=
include_dirs=PATH_TO_INCLUDE
library_dirs=PATH_TO_LIBS
libraries=sqlite3
#define=SQLITE_OMIT_LOAD_EXTENSION
答案 1 :(得分:1)
感谢Issy指出我正确的方向。
问题确实是,pysqlite创建了一个sqlite二进制文件,它没有启用R * TREE扩展。
我联系了pysqlite的开发人员(请参阅link text),他们很快就让我知道,从版本2.5.6开始,“未来的Windows二进制文件和编译与--build-static将有RTree支持默认情况下。“
问题解决了。谢谢大家。