使用QGIS从shapefile字段中获取不同值的列表?


18

我有一个shapefile,可以通过在查询对话框中指定where子句来过滤其功能。Fx我有一个名为“ city_name”的字段,并在where子句中声明“ city_name =“ London”“,仅显示伦敦。我现在想做的是从属性表中获取“ city_name”中的所有值。

像这样:

select distinct city_name from [attribute table]

我在QGIS中发现了一些显然可以处理SQL的工具,并且还快速浏览了不同的插件。但是我无法连接到数据库或表名...在那种情况下是哪个数据库或哪个表?

最后,我想导出结果列表并将其用于进一步处理。

我正在使用QGIS 1.8。

Answers:


32

更新答案(QGIS版本> = 2.14)

从QGIS 2.14开始,您可以使用虚拟层在任何加载的矢量层上使用运行SQL语句。

  1. 将层加载到QGIS中后,转到“ 层”>“添加层”>“添加/编辑虚拟层”
  2. 在“创建虚拟层”对话框中,在“查询”字段中输入SQL语句。就像是:

    从layer_name中选择DISTINCT city_name

  3. 对于几何体设置“无几何体”

  4. 单击确定,一个表将以所需的唯一值加载到QGIS中。

注意:如果将新值添加到city_name列,则将更新此表。

旧版答案(QGIS版本<2.14)

您可以选择执行自己的要求。

  1. 将您的shapefile导入Spatialite或Postgis数据库中,然后您可以使用完整的SQL语句查询表。
  2. 使用“溶解”工具(“矢量”>“地理处理工具”>“溶解”),使用“ city_name”字段溶解shapefile。尽管这是一个奇怪的方法,但生成的shapefile的dbf文件将提供您所需的列表;
  3. 看一下组统计插件(1.6),您可以使用“ city_name”作为分类字段,然后按计算。它将计算每个城市的一些统计信息,然后您可以复制结果并提取城市列表。

我刚刚注意到,在“ 向量”>“分析工具”中,有一个“ 列出唯一值”工具,正是此任务所需的工具。如此简单...无需任何解决方法,也不需要插件。


6

使用QGIS DB Manager并通过“虚拟层”访问shapefile

然后,您可以使用SQL窗口并编写查询:

在此处输入图片说明


1
现在,这是正确的答案(QGIS 2.14+)。
亚历山德拉·内托


-1

使用QGIS中的查询构建器,转到查询构建器中字段中的城市名称字段。转到值,全部添加。删除任何空值。

构建类似于城市名称=“ london”和城市名称=“ paris”的脚本,直到您具有完整的名称列表并运行该脚本。现在选择了所有城市名称。您可以将所选内容导出为形状文件,然后导入到postgresql数据库中。

要在QGIS中使用postgresql后端,请在postgresql中安装带有geoserver,postgresql和启用了postgis的数据库的postgresql堆栈。您将需要将QGIS连接到服务器。玩一会儿,你会弄清楚的。

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.