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

seb*_*ien 10 sqlite macos 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');
Run Code Online (Sandbox Code Playgroud)

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

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

但是当我添加带有spatialite的Geometry列时,我收到以下消息:

sqlite> SELECT AddGeometryColumn('test_geom', 'the_geom',4326, 'POINT');
AddGeometryColumn() error: unexpected metadata layout
0
Run Code Online (Sandbox Code Playgroud)

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

Sim*_* A. 22

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

SELECT InitSpatialMetaData();

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

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

  • 为什么要花这么多时间来激活..任何定制? (2认同)

Phi*_*van 3

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

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

解决方案:创建一个spatialite 数据库并将旧数据库导入其中或将所有必要的表加载到旧数据库中。要么 or 确实很容易使用.dump.