5 votos

Error al convertir valores en la calculadora de campos en QGIS

Me gustaría calcular el flujo de agua en un sistema fluvial. El flujo se expresa en km 3 /año y me gustaría convertirlo a m 3 /mes. Mi sintaxis es:

"flux"*1000000000/12

Si ejecuto esto se muestra el siguiente error:

Se ha producido un error durante la evaluación de la expresión de cálculo: No se puede convertir ',' en número de coma flotante.

El mismo error que sigo recibiendo si el to_real se está ejecutando.

¿Alguien tiene una idea?

4voto

DBM Puntos 51

El mensaje de error indica que "flux" es del tipo text y debe convertirse en float para realizar los cálculos necesarios (además, indica que QGIS realiza dicha conversión de forma implícita, siempre que la cadena tenga el formato correcto).

Para ser precisos, el decimal correcto es ".", y en tu caso obviamente es ",".

Por lo tanto, con la observación anterior desviándose de mi comentario sólo tiene que hacer su cálculo en una cadena con "," sustituido por "." como

replace("flux", ',', '.') * 1000000000.0 / 12.0

Esto, por supuesto, puede ser confuso, ya que el operador "*" puede tener diferentes significados en función del tipo de datos resultante, p. ej:

  • tipo de datos resultante float : '10.3' * 3 = 30.9 en el generador de expresiones de QGIS
  • tipo de datos resultante string : '10.3' * 3 = '30.9' en el generador de expresiones de QGIS
  • tipo de datos resultante string : '10.3' * 3 = '10.310.310.3' como en Python (siempre se evalúa como string )

Así, la forma más clara sería

to_real(replace("flux", ',', '.')) * 1000000000.0 / 12.0

porque multiplica explícitamente real por real .

-1voto

hirschme Puntos 23

Como usted no compartió ningún conjunto de datos en particular aquí estoy asumiendo que usted tiene un campo que tiene un tipo similar de conjunto de datos, también no uso qgis pero estoy seguro de que esta sería la misma solución para qgis también.

first image
second image 1. Abra la calculadora de campos en el campo de destino que desea rellenar con los datos convertidos.

third image 2. Defina un bloque de código en el cuadro de diálogo de la calculadora de campos, a continuación se muestra el código que necesita.

def converttometer( x ):
x = x.replace(",", "")
x = float(x)
x = x*1000000000/12
return x 
  1. Llame a la función en el espacio inferior, sustituya Flux_KM por el nombre de su campo.

    converttometer(!Flux_KM!)

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