5 votos

¿Cómo utilizar la cláusula WHERE para filtrar las características por su atributo en PyQgis?

¿Cómo obtener características por sus atributos (similar a Iqueryfilter en arcobjects) en Qgis usando python? En lugar de obtener todas las características y filtrarlas manualmente, ¿hay alguna opción para utilizar whereclause para filtrarlas?

Por ejemplo: Tengo un nombre de campo llamado 'Condados'. Tiene más de cincuenta mil características, es decir, no es posible obtener todas las características y filtrarlas debido a la pérdida de tiempo. Así que puedo consultar utilizando iqueryfilter.whereclause = 'Counties = Norwich' en arcobjects. Algo similar necesito en PyQgis. Por favor, hágame saber si es posible. Si es así, por favor, dame un ejemplo

5voto

Michael Puntos 11

Actualización Por favor, lea esta respuesta para un método más seguro de lograr lo mismo https://gis.stackexchange.com/a/74940/9839

En caso de que experimente problemas de rendimiento, puede seguir recurriendo al método original descrito a continuación.

La única forma de reenviar una cláusula WHERE al proveedor de datos (backend) por el momento es utilizar la función setSubsetString método de QgsDataProvider

Si tienes un QgsVectorLayer asignado a una variable vl :

vl.setSubsetString( 'Counties = "Norwich"' )

Esto provoca fuertes efectos secundarios, ya que el filtro se aplicará a toda la capa y no sólo a su consulta, por lo que tiene que considerar cuidadosamente si esto es realmente una opción para su caso de uso.

Cualquier otra opción requerirá una conexión separada a la base de datos o la adición de una nueva capa con un subsetString como se indica más arriba.

0 votos

Funciona bien, igual que la consulta de definición en Arcgis. Muchas gracias

0 votos

Tengo 4 lakhs de características en un archivo shape está tomando mucho tiempo para ejecutar esta consulta 'Counties = "Norwich"'. ¿hay alguna solución para acelerar la ejecución?

0 votos

Probablemente puedas crear un índice en la columna (no probado)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X