Outdated version of the documentation. Find the latest one here.

Expresiones, Filtros y Calculando Valores

QGIS tiene apoyo para el análisis de expresiones parecidas al SQL. Solo se reconoce un pequeño subconjunto de sintaxis SQL. Las expresiones pueden ser evaluados ya sea como predicados booleanos (regresando Verdadero o Falso ) o como funciones (regresando un valor escalar). Vea Expresiones en el Manual del usuario para obtener una lista completa de las funciones disponibles.

Se le da apoyo a tres tipos:

  • numero - números enteros y números con decimales, e.j. 123, 3.14

  • cadena - se tiene que encerrar en comas individuales: 'hola mundo'

  • columna de referencia - cuando se evalúa, la referencia se substituye con el valor actual del campo. Los nombres no se escapan.

Los siguientes operadores están disponibles:

  • operadores aritméticos: “+”. “-”, “/”, ^

  • paréntesis: para hacer cumplir la precedencia del operador: (1 + 1) * 3

  • unario mas y menos: -12, +5

  • funciones matemáticas: sqrt, sin, cos, tan, asin, acos, atan

  • funciones de conversión: to_int, to_real, to_string, to_date

  • funciones geométricas: $area, $length

  • funciones de manejo de geometría: $x, $y, $geometry, num_geometries, centroid

Se apoya las siguientes predicciones:

  • comparación: =, !=, >, >=, <, <=

  • patrones iguales: LIKE (using % and _), ~ (expresión regular)

  • lógica predicado: AND, OR, NOT

  • revisión de valores NULO: IS NULL, IS NOT NULL

Ejemplos de predicado:

  • 1 + 2 = 3
  • sin(angulo) > 0

  • ‘Hello’ LIKE ‘He%’`

  • (x > 10 AND y > 10) OR z = 0

Ejemplo de escala de expresiones:

  • 2 ^ 10
  • sqrt(val)
  • $length + 1

Análisis de expresiones

>>> exp = QgsExpression('1 + 1 = 2')
>>> exp.hasParserError()
False
>>> exp = QgsExpression('1 + 1 = ')
>>> exp.hasParserError()
True
>>> exp.parserErrorString()
PyQt4.QtCore.QString(u'syntax error, unexpected $end')

Evaluar expresiones

Expresiones Basicas

>>> exp = QgsExpression('1 + 1 = 2')
>>> value = exp.evaluate()
>>> value
1

Expresiones con caracteristicas

The following example will evaluate the given expression against a feature. “Column” is the name of the field in the layer.

>>> exp = QgsExpression('Column = 99')
>>> value = exp.evaluate(feature, layer.pendingFields())
>>> bool(value)
True

You can also use QgsExpression.prepare() if you need check more than one feature. Using QgsExpression.prepare() will increase the speed that evaluate takes to run.

>>> exp = QgsExpression('Column = 99')
>>> exp.prepare(layer.pendingFields())
>>> value = exp.evaluate(feature)
>>> bool(value)
True

Manejar errores

exp = QgsExpression("1 + 1 = 2 ")
if exp.hasParserError():
  raise Exception(exp.parserErrorString())

value = exp.evaluate()
if exp.hasEvalError():
  raise ValueError(exp.evalErrorString())

print value

Ejemplos

El siguiente ejemplo se puede utilizar para filtra capas y regresar cualquier característica que empata con el predicado.

def where(layer, exp):
  print "Where"
  exp = QgsExpression(exp)
  if exp.hasParserError():
    raise Exception(exp.parserErrorString())
  exp.prepare(layer.pendingFields())
  for feature in layer.getFeatures():
    value = exp.evaluate(feature)
    if exp.hasEvalError():
      raise ValueError(exp.evalErrorString())
    if bool(value):
      yield feature

layer = qgis.utils.iface.activeLayer()
for f in where(layer, 'Test > 1.0'):
  print f + " Matches expression"