无法使用Spatialite创建列->元数据布局意外

13

我对spatialite非常陌生。我正在使用Max OS Mountain Lion,并已安装SQLite版本3.7.17和libspatialite 4.1.1(使用homebrew)。

我可以在SQLite中成功加载扩展程序libspatialite,没有出现错误:

SELECT load_extension('/usr/local/Cellar/libspatialite/4.1.1/lib/libspatialite.dylib');

我可以创建一个简单的表格:

sqlite> CREATE TABLE test_geom (
   ...>   id INTEGER NOT NULL
   ...>     PRIMARY KEY AUTOINCREMENT,
   ...>   name TEXT NOT NULL,
   ...>   measured_value DOUBLE NOT NULL);

但是当我使用spatialite添加一个Geometry列时,会收到以下消息:

sqlite> SELECT AddGeometryColumn('test_geom', 'the_geom',4326, 'POINT');
AddGeometryColumn() error: unexpected metadata layout
0

我不知道如何解决这个问题。有人可以帮忙吗?


我现在也面临着同样的挑战,我无法添加多边形列,它会产生相同的错误,有谁能帮忙解决吗? - Brian Paul
2个回答

29
这种情况发生在使用带有 Spatialite 扩展的 SQLite 时。在这种情况下,您需要初始化空间元数据表(在创建数据库后立即执行此操作): SELECT InitSpatialMetaData(); 另一种选择是在创建数据库时运行 Spatialite。然后将自动创建元数据表。
文档: http://www.gaia-gis.it/gaia-sins/spatialite-cookbook/html/metadata.html

你救了我的决定,让我在移动开发中使用spatialDB,否则我就不知道该怎么办了。 - Majid Bashir
2
为什么激活需要这么长时间...有定制吗? - Majid Bashir

3
这个问题的出现是因为数据库中没有元数据(spatial_ref_sys表),这是因为你使用sqlite3.exe而不是spatialite.exe创建了数据库所致。
例如,如果你创建了两个数据库,一个用sqlite3,另一个用spatialite,并运行.table,你会发现由spatialite创建的db有一组其他表,包括一个spatial_ref_sys。空间函数需要这些参考表才能正常工作。
解决方案:创建一个spatialite db并将旧的db导入其中,或将所有必要的表加载到旧的数据库中。两种方法都可以通过.dump相对容易地实现。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接