Answers:
呼叫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遍历矢量层时,如何检查是否选择了要素?
我只是想针对自从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:)中dict
。QgsFeature
类模拟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()
我想在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