使用Python获取QGIS中一项选定功能的数据吗?


10

我对python和QGIS有问题。是否可以使用python获取QGIS中一项选定功能的数据,如果可以,怎么办?

在我的示例中,我有一个图层,其中显示了一些用于城市规划的地块。如果现在选择一个宗地,我想获取该宗地的数据。此数据应通过python脚本读取,然后添加到自动创建的PDF文件中。最后一步很容易,但是我没有从所选功能中获取数据。

可以从活动层获取数据,但是也可以从该层的一个选定要素中获取数据吗?

希望您能够帮助我。问候

Answers:


15

呼叫layer.selectedFeatures()将返回带有您选择的功能的列表。然后,您可以调用feature.attributeMap()每个选定功能,以获取每个功能属性的字典。

layer = qgis.utils.iface.activeLayer()
selected_features = layer.selectedFeatures()
for i in selected_features:
    attrs = i.attributeMap()
    for (k,attr) in attrs.iteritems():
    print "%d: %s" % (k, attr.toString())

我最近在这里回答了一个类似的问题:当使用pyqgis遍历矢量层时,如何检查是否选择了要素?


很奇怪,由selected_features产生的QgsFeature对象没有几何方法...
user32882 '18

9

我只是想针对自从2.0版以来QGIS Python API更改发布一些先前答案的更新。

和以前一样,您将获得带有的选定功能的列表iface.activeLayer().selectedFeatures(),但是在QGIS版本中,>= 2.0您现在使用QgsFeature.attributes()代替QgsFeature.attributeMap()。这两个函数并不完全相同:attributes()现在返回一个列表,而旧函数attributeMap()返回一个字典。花点时间浏览API文档QgsFeature.attributes()QgsAttributes等了解属性是如何存储/访问。

如果您有兴趣,可以在此邮件列表线程上了解有关API更改的一些基本原理:[Qgis-developer]新的vector api选择功能。简要地(用QGIS开发人员Martin Dobias的话):

访问属性:f.attributeMap()不再存在,因为现在属性存储在向量(Python:)中list而不是地图(Python:)中dictQgsFeature类模拟python容器对象 4,因此您可以像QgsFeature实例是列表或字典那样访问属性,并且键可以是字段索引或字段名称:

f[0] ...第一个属性

f["type"] ...名为“类型”的属性

仍然可以获取所有属性:f.attributes()返回值列表。

因此,作为一个具体说明您如何执行操作(为所选的单个功能获取数据)的示例,假设您有一个包含city功能的图层,每个功能都有一个属性列表,包括一个county属性。要获取county您选择的特定城市的价值(例如Helena, AR),请在Python控制台中执行以下操作:

city = iface.activeLayer().selectedFeatures()[0]
city["county"]
# OUTPUTS: u'Phillips'

如果要获取城市属性表中所有字段的值,则只需使用:

cityData = city.attributes()

您还可以使用city.fields()。names()从此示例中获取所有字段名称,这将返回字段名称列表。
Cary H

1

我想在J. Taylor提供的答案中添加一些有用的信息,并指出当前从2012年开始接受的答案不再正确:

QgsFeature对象支持有用的__geo_interface__属性,该属性从给定功能返回字典。该字典实际上是在GeoJSON标准中,因此您可以获取所有的属性值对和几何。该功能已经存在了一段时间,由Sean Gillies于2012年某个时候首次描述了此功能,并在此处使用了示例。我找不到哪个版本的QGIS的任何信息,我还没有尝试过QGIS 3,但是至少从QGIS 2.14肯定可以找到。

TL; DR:

layer = qgis.utils.iface.activeLayer()
selected_features = layer.selectedFeatures()
for i in selected_features:
    attrs = i.__geo_interface__
    print attrs # GeoJSON attributes of a feature
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.