¿Hay alguna manera de usar la función "Seleccionar por atributo" en QGIS usando un comando python? En mi complemento, el usuario debe ingresar un valor a través de una GUI y este valor debe usarse en una función que selecciona todas las características que tienen este atributo. El nombre de la columna está fijado en el código, la función solo debe buscar el valor correcto.
En mi solución actual, la función conecta QGIS a una base de datos PostgreSQL y ejecuta una instrucción SQL. Esto crea una tabla a partir del resultado y la tabla se visualiza como Shapefile en QGIS.
En principio, sería suficiente resaltar las características y no crear un nuevo Shapefile de la selección. El uso de la función "Seleccionar por atributo" también omitiría la conexión innecesaria de la base de datos.
¿Hay alguna forma de usar la función "Seleccionar por atributo" en Python para que las características se resalten? Al usar la función en QGIS, todas las características que no coinciden con la consulta se borran temporalmente, lo que también estaría bien.
Respuestas:
Si. Puede obtener todos los atributos a través de los enlaces de Python e implementar filtros adicionales en su propio complemento. Vea este extracto de PyQGIS Coobook para ver el resumen y algunos ejemplos. Entonces, simplemente excluiría cualquier resultado no coincidente del diccionario devuelto.
En cuanto a la visualización, es probable que aún tenga que crear otra capa, ya
select()
que no tiene argumentos adecuados. Puede usar una capa de memoria para evitar tener que crear archivos físicos (más sobre eso en el libro de cocina).editar:
En realidad, puede usar
selectedFeaturesIds()
consetSelectedFeatures(ids)
para cambiar la selección al subconjunto que creó. Citando la implementación directamente:fuente
A partir de QGIS 2.2, esto es compatible de una manera muy natural. Se puede hacer a través del motor de expresión QGIS utilizando el
QgsFeatureRequest.setFilterExpression( unicode )
métodoLo mejor de todo: si tiene una versión reciente de QGIS (2.10 y posterior), se filtrará directamente en la base de datos con mucho más rendimiento que otras soluciones y seguirá siendo muy legible.
fuente
sextante.runalg ('qgis: selectbylocation', "bufferarea", "hospitales", 1)
http://qgissextante.blogspot.in/2013/01/using-selection-algorithms.html
fuente