QGIS可以读取Spatialite视图吗?


11

我有一个我创建的Spaceiteite数据库,该数据库跨越了数年的犯罪数据。为了简化现实世界的场景,在该场景中,我可以通过引入一个仅限制时间跨度或返还犯罪类型的视图来简化与用户的交互,我想知道QGIS是否可以像这样阅读该视图数据库中的任何其他空间表都可以 这里的要点是,我显然不想为我可能使用的每个可能的View创建一个单独的表,并且我试图通过不要求用户知道数据库和适当的SQL自己对数据进行子集化来简化它。ArcGIS世界中类似的工作流程可能是创建单独的图层文件,用户可以在ArcMap中打开这些图层文件来访问数据库(例如SQL Server),并且仅显示有限的数据集。

我在数据库中创建了一个视图,但是当我连接到QGIS中的spacespaceite数据库时,它不会显示在可以导入的要素类列表中。也许视图不被认为是空间的?(这是我稍后要研究的内容,但我想我已经做了;我只是不记得结论了。)无论如何,一个人如何复制我想要的工作流程或类似的ArcGIS替代方案?

Answers:


15

我认为您必须在geometry_columns表中注册该视图才能在QGIS中使用它。

一个好的资源是“用手写下面的示例来编写自己的Spatial VIEW”

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column)
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry');

无论如何,您必须将此VIEW注册到views_geometry_columns中,以使其成为真实的空间视图。


这似乎是问题所在。我创建了视图并检查了元表。显然,没有列出视图中的几何。如何注册视图的几何?我尝试了RecoverGeometryColumn,但它告诉我该表不存在。我以为我使用的是2.4版本,但显然我正在使用Spatialite 3.0 Beta。也许我执行的命令错误?也许对视图不起作用?(更好!);为了清楚起见,我的命令是SELECT RecoverGeometryColumn('tblName','SHAPE',2226,'POINT',2);
布莱恩·古德里奇

4
有一个特殊的表用于处理基于几何的视图。使用以下语法INSERT INTO VIEWS_GEOMETRY_COLUMNS VALUES(“ {TABLENAME}”,“ {GEOM COLUMN NAME}”,“ {GEOM TYPE}”,2,{SRID},0);
内森(Nathan W)

例如:INSERT INTO VIEWS_GEOMETRY_COLUMNS VALUES('Towns_v1','Geometry','POINT',2,32632,0);
内森(Nathan W)

使用SELECT * FROM views_geometry_columns;看看什么是需要插入。在更多信息gaia-gis.it/spatialite-3.0.0-BETA/spatialite-cookbook/html/...
弥敦道W¯¯

2

您可能还必须在视图中放入一个唯一ID,类似于此处讨论的内容:在PostGIS中,是否可以创建一个具有唯一ID的视图?


除非我在视图创建中未明确选择PK,否则不会携带唯一ID吗?至少对于我在这里所做的简单选择查询。
布莱恩·古德里奇

@ BryanGoodrich-试试看,但据我所知,它不适用于PostGIS视图。
RyanKDalton

该视图是由“ SELECT * FROM Crime WHERE ...”创建的,而我是由where子句组成的。这返回了PK列(行名,该列名由我用来填充SQLite DB的R表中的列名生成)。问题是由underdark指出的:它需要元表中的几何参考。这就是QGIS用来识别空间表的方式,并且视图在这些元表中没有任何记录。
布莱恩·古德里奇

很高兴知道。感谢您提出问题并获得良好的答复
RyanKDalton 2012年

2

如今(2015年)在geometry_columns中注册视图似乎需要一个附加字段“ read_only”,如下所示:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'ROWID', 'local_councils', 'geometry', 1);

1
您能否添加支持文档的链接?谢谢!
昏暗

2

对于SpatialLite 4.x,需要对原始答案进行两项更改-添加read_only列并将所有插入的值更改为小写。更新后的SQL如下所示:

INSERT INTO views_geometry_columns
(view_name, view_geometry, view_rowid, f_table_name, f_geometry_column, read_only )
VALUES ('italy', 'geometry', 'rowid', 'local_councils', 'geometry', 1);

read_only字段接受0或1。(有关进一步的说明,请参阅Google网上论坛中 Sandro Furieri的评论。)

有关这些以及其他4.x更改的更多详细信息,可以在切换到4.0 Wiki上找到


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.