我对使用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
我不知道解决这个问题。有人可以帮忙吗?
答案 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
可以轻松实现。