11

我对spatialite很陌生。我在 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

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

4

2 回答 2

27

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

SELECT InitSpatialMetaData();

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

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

于 2014-01-29T03:56:16.527 回答
3

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

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

解决方案:创建一个空间数据库并在那里导入旧数据库或将所有必要的表加载到旧数据库中。要么 要么 真的很容易.dump

于 2013-09-10T22:39:20.363 回答