Это полезно, но это только кажется, что дает вам значение атрибутов. Кажется, атрибуты должны быть парой имя / значение. Как вы получаете имя для каждого атрибута? Это то, что "поля" это все о?
Ajpieri
Это на самом деле не отвечает на вопрос. Если у вас есть другой вопрос, вы можете задать его, нажав Задать вопрос . Вы также можете добавить вознаграждение, чтобы привлечь больше внимания к этому вопросу, когда у вас будет достаточно репутации . - Из Обзора
Мартин Хюги
Ответы:
43
Чтобы перебрать все объекты слоя, используйте getFeatures()генератор. Это возвращает итератор features ( QgsFeature) в слое.
for feature in layer.getFeatures():pass# do something with feature
Если вас интересует только определенная функция, а не все функции в слое, вы можете получить к ней доступ, используя a QgsFeatureRequestи FID:
fid =1# the second feature (zero based indexing!)
iterator = layer.getFeatures(QgsFeatureRequest().setFilterFid(fid))
feature = next(iterator)
Когда у вас есть QgsFeatureобъект, вы можете использовать attributes()метод для извлечения атрибутов (таких как столбцы или поля), связанных с этой функцией (также известных как строка), например:
# get the feature's attributes
attrs = feature.attributes()# print the second attribute (note zero based indexing of Python lists)print(attrs[1])
Если вы хотите проиндексировать поле по его имени, а не по номеру, вам нужно использовать сопоставления полей:
Я подумал, что на самом деле я добавил бы некоторый код, поскольку поиск этой проблемы возвращает этот вопрос ... большинство людей предпочитают быстрое объяснение или фрагмент кода ссылке, которая ведет на страницу, которая содержит много дополнительной информации.
Чтобы получить информацию в таблице, вам сначала нужно получить доступ к функциям слоя . В моем случае я поместил функции в переменную. Затем вы перебираете объекты , и для каждого объекта вы вызываете его атрибуты , которые затем можно распечатать, используя их индекс столбца . Например, если я хотел бы получить все значения во втором столбце, я бы сделал это:
lyr = iface.activeLayer()
features = lyr.getFeatures()for feat in features:
attrs = feat.attributes()print attrs[1]
Ответы выше показывают только, как это сделать для активного слоя. Я думаю, во многих случаях вам может понадобиться найти указанный атрибут для слоя, который не является активным слоем, или слой, отмеченный в окне «Слои». Приведенный ниже код получит список всех слоев, которые вы добавили в окно слоев (независимо от того, отмечены они или активны), и найдет атрибут в строке 2, столбец 2.
from qgis.core importQgsProject
layer =QgsProject.instance().mapLayersByName("myLayerName")[0]
value = layer.getFeature(2).attribute(2)
Примечание. MapLayersByName возвращает список слоев с указанным именем. Я предполагаю, что один существует для этого примера.
Ответы:
Чтобы перебрать все объекты слоя, используйте
getFeatures()
генератор. Это возвращает итератор features (QgsFeature
) в слое.Если вас интересует только определенная функция, а не все функции в слое, вы можете получить к ней доступ, используя a
QgsFeatureRequest
и FID:Когда у вас есть
QgsFeature
объект, вы можете использоватьattributes()
метод для извлечения атрибутов (таких как столбцы или поля), связанных с этой функцией (также известных как строка), например:Если вы хотите проиндексировать поле по его имени, а не по номеру, вам нужно использовать сопоставления полей:
Индекс поля не должен изменяться во время цикла, поэтому его нужно вызывать только один раз.
Больше информации и примеров в кулинарной книге PyQGIS: http://www.qgis.org/pyqgis-cookbook/vector.html#iterating-over-vector-layer
Обновить
Вы можете получить доступ атрибуты функций гораздо проще, используя
QgsFeature
подобноdict
, например ,Я не уверен, какая версия пришла или всегда была там.
источник
Я подумал, что на самом деле я добавил бы некоторый код, поскольку поиск этой проблемы возвращает этот вопрос ... большинство людей предпочитают быстрое объяснение или фрагмент кода ссылке, которая ведет на страницу, которая содержит много дополнительной информации.
Чтобы получить информацию в таблице, вам сначала нужно получить доступ к функциям слоя . В моем случае я поместил функции в переменную. Затем вы перебираете объекты , и для каждого объекта вы вызываете его атрибуты , которые затем можно распечатать, используя их индекс столбца . Например, если я хотел бы получить все значения во втором столбце, я бы сделал это:
источник
Ответы выше показывают только, как это сделать для активного слоя. Я думаю, во многих случаях вам может понадобиться найти указанный атрибут для слоя, который не является активным слоем, или слой, отмеченный в окне «Слои». Приведенный ниже код получит список всех слоев, которые вы добавили в окно слоев (независимо от того, отмечены они или активны), и найдет атрибут в строке 2, столбец 2.
Примечание. MapLayersByName возвращает список слоев с указанным именем. Я предполагаю, что один существует для этого примера.
источник