Aplicación de un script de Python para filtrar por patrón de texto los métodos de la Clase QgsVectorLayer en PyQGIS

En el post pasado se probaron las bondades de un script de Python, ejecutado en la consola de Python de QGIS, para evaluar los métodos y procedimientos de la Interfase de QGIS. Ahora toca probarlo para la Clase QgsVectorLayer. Para ello, cargué el archivo vectorial, formato shapefile de ESRI, correspondiente a world_borders y comencé a probar diferentes métodos y procedimientos de la Clase QgsVectorLayer basados en un análisis detallado de la API de QGIS.

Un resumen de los comandos usados se coloca a continuación:

#Se importa el script signal2.py de mi "directorio de scripts" establecido con PYTHONPATH
import signal2
#Se importa el unico procedimiento que tiene este script
from signal2 import get_patt
#Se obtienen todos los metodos para la Clase QgsVectorLayer
L=dir(QgsVectorLayer)
len(L)
#numero de procedimientos y metodos detectados
367
#Se define la capa wb como la capa activa world_borders 
wb = iface.activeLayer()
wb.selectAll() #se seleccionan todos los rasgos
wb.invertSelection() #se deseleccionan todos los rasgos
get_patt('pen',L)
['appendError', 'pendingAllAttributesList', 'pendingFeatureCount', 'pendingFields', 'pendingPkAttributesList']
wb.pendingAllAttributesList()
[0, 1, 2, 3, 4] #lista de indices de atributos
get_patt('name',L)
['name']
help(QgsVectorLayer.name)
Help on built-in function name:

name(...)
    QgsMapLayer.name() -> QString
wb.name()
u'world_borders' #se obtiene el nombre del shapefile
wb.isValid()  #se verifica que es una capa valida
True
get_patt('Name',L)
['FileName', 'applyNamedStyle', 'attributeDisplayName', 'capitaliseLayerName', 'dynamicPropertyNames', 'exportNamedStyle', 'fieldNameIndex', 'layerNameChanged', 'loadNamedStyle', 'loadNamedStyleFromDb', 'objectName', 'originalName', 'saveNamedStyle', 'setLayerName', 'setObjectName']
wb.attributeDisplayName(1)
u'FIPS_CNTRY'
get_patt('pen',L)
['appendError', 'pendingAllAttributesList', 'pendingFeatureCount', 'pendingFields', 'pendingPkAttributesList']
wb.pendingAllAttributesList()
[0, 1, 2, 3, 4]
attr_id = wb.pendingAllAttributesList()
attr_id
[0, 1, 2, 3, 4]
for i in attr_id: #imprime los nombres de los atributos
	print wb.attributeDisplayName(i)
CAT
FIPS_CNTRY
CNTRY_NAME
AREA
POP_CNTRY
get_patt('max',L)
['maximumScale', 'maximumValue']
help(QgsVectorLayer.maximumValue)
Help on built-in function maximumValue:

maximumValue(...)
    QgsVectorLayer.maximumValue(int) -> QVariant

wb.maximumValue(3)
17075200.0 #valor maximo para el atributo 'AREA'
wb.fieldNameIndex('AREA')
3 #se verifica que a 'AREA' le corresponde el indice 3
get_patt('feature',L)
['featureAdded', 'featureBlendMode', 'featureBlendModeChanged', 'featureCount', 'featureDeleted', 'featureFormSuppress']
get_patt('Feature',L)
['FeatureFormSuppress', 'addFeature', 'addFeatures', 'allFeatureIds', 'committedFeaturesAdded', 'committedFeaturesRemoved', 'countSymbolFeatures', 'deleteFeature', 'deleteSelectedFeatures', 'getFeatures', 'pendingFeatureCount', 'selectedFeatureCount', 'selectedFeatures', 'selectedFeaturesIds', 'setFeatureBlendMode', 'setFeatureFormSuppress', 'setSelectedFeatures', 'splitFeatures', 'translateFeature', 'updateFeature']
get_patt('select',L)
 ['deselect', 'select', 'selectAll', 'selectedFeatureCount', 'selectedFeatures', 'selectedFeaturesIds', 'selectionChanged']
wb.select(3722) #se selecciona el feature numero 3722 (parte de Venezuela)
wb.startEditing() #Se inicia edicion
True
get_patt('com',L)
['commitChanges', 'commitErrors', 'committedAttributeValuesChanges', 'committedAttributesAdded', 'committedAttributesDeleted', 'committedFeaturesAdded', 'committedFeaturesRemoved', 'committedGeometriesChanges']
wb.commitChanges() #se commuta edicion
True
wb.startEditing()
True
get_patt('del',L)
['__delattr__', 'deleteAttribute', 'deleteAttributes', 'deleteFeature', 'deleteLater', 'deleteSelectedFeatures', 'deleteVertex']
wb.deleteFeature(3722) #se borra el rasgo correspondiente a Venezuela
True
wb.commitChanges()
True
wb.startEditing()
True
help(QgsVectorLayer.deleteAttributes)
Help on built-in function deleteAttributes:

deleteAttributes(...)
    QgsVectorLayer.deleteAttributes(list-of-int) -> bool

help(QgsVectorLayer.deleteAttribute)
Help on built-in function deleteAttribute:

deleteAttribute(...)
    QgsVectorLayer.deleteAttribute(int) -> bool

wb.deleteAttribute(3) #se borra el atributo 'AREA'
True
wb.commitChanges() #se commuta la edicion y se almacenan los cambios
True

Todo lo anterior fue realizado como una prueba sobre una copia del world_borders. En la siguiente imagen se puede verificar que los comandos ejecutados desde la consola de Python tuvieron el resultado esperado; especialmente los que tenían que ver con la eliminación de rasgos y atributos.

pyqgis2

Esta entrada fue publicada en Código Python, PyQGIS, SIG, Software Libre. Guarda el enlace permanente.

2 respuestas a Aplicación de un script de Python para filtrar por patrón de texto los métodos de la Clase QgsVectorLayer en PyQGIS

  1. Pingback: Cómo crear una capa de puntos con PyQGIS | El Blog de José Guerrero

  2. Pingback: Cómo crear y remover campos de atributos a través de la Python Console de PyQGIS | El Blog de José Guerrero

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s