Quantcast
Channel: Respuestas SIG | El blog de franz - Preguntas recientes
Viewing all articles
Browse latest Browse all 915

EXPRESIONES CALCULADORA DE CAMPOS QGIS

$
0
0
Hola, sigo experimentado problemas con funciones en el modelador grafico q QGIS, ya utilice varias funciones que anduvieron utilizando el parametro capa y llamando a la funcion desde la calculadora con ese pasametro algoritmo(@nombreresultadoalgoritmoanterior).

Pero ahora me encuentro con esta función que me funciona en la calculadora de campos comun sobre una capa activa, y la adapte con el nombre del algoritmo anterior al igual que hice con las otras y no funciona. La calculadora de campos sólo me dice que se detecto un error y no puedo ver en que parte del código, hay alguna forma que pueda visualizar esos errores ? 

Aqui va la función (se basa en un campo grupo numerico, y un campo prueba que contiene la fecha y hora que debe restar en formato txto)

from qgis.PyQt.QtCore import QCoreApplication

from qgis import processing

from qgis.gui import *

from qgis.core import *

from datetime import datetime

from PyQt5.QtCore import QVariant

from qgis.utils import iface

@qgsfunction(args='auto', group='Custom')

def duuu_MDL_gg(capa, feature, parent):

    field_name = 'prueba'  # Nombre de la columna

    new_field_name = 'duracion'  # Nombre del nuevo campo

    

    

    # Verificar si el campo ya existe y eliminarlo si es necesario

    fields = capa.fields()

    if new_field_name in fields.names():

        capa.deleteAttribute(fields.indexFromName(new_field_name))

        capa.updateFields()

    

    # Obtener el índice del campo original

    capa.dataProvider().fields().indexFromName('prueba')

    

    # Crear el nuevo campo de tipo texto

    layer.dataProvider().addAttributes([QgsField('duracion', QVariant.Int)])

    capa.updateFields()

    

    # Obtener los registros ordenados por FID ascendente

    features = sorted(capa.getFeatures(), key=lambda x: x.id())

    

    values_by_group = {}  # Diccionario para almacenar los valores de fecha por grupo

    

    # Recorrer las características y almacenar los valores de fecha por grupo

    for feature in features:

        group_value = feature['grupo']  # Obtener el valor del campo 'grupo'

        date_string = feature[field_index]  # Obtener la cadena de la fecha

        

        # Convertir la cadena de fecha a un objeto datetime

        date = datetime.strptime(date_string, '%d/%m/%Y %H:%M:%S')

        

        if group_value not in values_by_group:

            values_by_group[group_value] = []

        

        values_by_group[group_value].append(date)

    

    # Calcular la duración y actualizar el campo 'duracion' por cada grupo

    for feature in features:

        group_value = feature['grupo']  # Obtener el valor del campo 'grupo'

        date_string = feature[field_index]  # Obtener la cadena de la fecha

        

        # Obtener los valores de fecha correspondientes al grupo actual

        group_dates = values_by_group.get(group_value, [])

        

        if not group_dates:

            continue  # Si no hay valores de fecha para el grupo, pasar a la siguiente característica

        

        # Ordenar los valores de fecha de forma ascendente

        sorted_dates = sorted(group_dates)

        

        # Calcular la duración restando el último valor de fecha del primer valor de fecha

        duracion = (sorted_dates[-1] - sorted_dates[0]).total_seconds()

        

        # Convertir la duración a horas, minutos y segundos en formato HH:MM:SS

        hours = int(duration // 3600)

        minutes = int((duration % 3600) // 60)

        seconds = int(duration % 60)

        

        duracion_string = "{:02d}:{:02d}:{:02d}".format(hours, minutes, seconds)

        

        # Actualizar el campo 'duracion' de la característica con el formato HH:MM:SS

        feature[new_field_name] = duracion_string

        capa.updateFeature(feature)

    

    

    return duration_string

Viewing all articles
Browse latest Browse all 915

Trending Articles