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

时间:2013-07-20 10:09:55

标签: macos sqlite spatialite

我对使用spaceite非常新。我在Max OS Mountain lion上运行,我安装了SQLite版本3.7.17和libspatialite 4.1.1(使用自制软件)

我可以在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

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

2 个答案:

答案 0 :(得分:20)

当您使用带有Spatialite扩展的SQLite时会发生这种情况。在这种情况下,您需要初始化空间元数据表(在创建数据库后立即执行此操作):

SELECT InitSpatialMetaData();

另一种选择是在创建数据库时运行Spatialite。然后,这将自动创建元数据表。

文档:http://www.gaia-gis.it/gaia-sins/spatialite-cookbook/html/metadata.html

答案 1 :(得分:3)

出现此问题的原因是,当您使用 sqlite3.exe 而不是 spatialite.exe 创建数据库时,数据库中没有元数据(spatial_ref_sys表)。

例如;如果您创建两个数据库,一个使用sqlite3,另一个使用spatialite并运行.table,您将看到由spatialite创建的数据库有一套其他表,包括spatial_ref_sys。空间函数需要这些参考表才能工作。

解决方案:创建一个spaceite数据库并在那里导入旧数据库或将所有必需的表加载到旧数据库中。使用.dump可以轻松实现。