“¿Seleccionar por atributo” en QGIS usando python?

15

¿Hay una manera de usar la función "Seleccionar por atributo" en QGIS usando un comando de 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 funciones que tienen este atributo. El nombre de la columna está fijo 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 declaració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á la conexión de base de datos innecesaria.

¿Hay alguna forma de usar la función "Seleccionar por atributo" en python para que las funciones estén resaltadas? Al usar la función en QGIS, todas las características que no coinciden con la consulta son temporalmente desactivadas, lo que también estaría bien.

    
pregunta userHH 30.08.2012 - 13:54

3 respuestas

8

Sí. 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 Coobook de PyQGIS para 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 tengas que crear otra capa, ya que select() no tiene argumentos de ajuste. Puede usar una capa de memoria para evitar tener que crear archivos físicos (más información en el libro de cocina).

editar:

En realidad, puedes usar selectedFeaturesIds() con setSelectedFeatures(ids) para cambiar la selección al subconjunto que creaste. Citando la implementación directamente:

/** Get a copy of the user-selected features */  
QList<QgsFeature> selectedFeatures();

/** Return reference to identifiers of selected features */
const QSet<qint64> &selectedFeaturesIds() const;

/** Change selection to the new set of features */
void setSelectedFeatures(const QSet<qint64> &ids);
    
respondido por el lynxlynxlynx 30.08.2012 - 14:28
9

A partir de QGIS 2.2, esto se admite de una manera muy natural. Se puede hacer a través del motor de expresiones QGIS usando el método QgsFeatureRequest.setFilterExpression( unicode ) .

# The important part: get the feature iterator with an expression
it = l.getFeatures( QgsFeatureRequest().setFilterExpression ( u'"Counties" = \'Norwich\'' ) )
# Set the selection
l.setSelectedFeatures( [ f.id() for f in it ] )

Lo mejor de esto: si tiene una versión reciente de QGIS (2.10 y posterior), esto se filtrará directamente en la base de datos, mucho más eficaz que otras soluciones, a la vez que será muy legible.

    
respondido por el Matthias Kuhn 21.10.2013 - 12:23
2

sextante.runalg ('qgis: selectbylocation', "bufferarea", "hospitales", 1)

enlace

    
respondido por el user16233 16.03.2013 - 15:35

Lea otras preguntas en las etiquetas