Ver Mensaje Individual
  #1  
Antiguo 15-06-2024
manuelfec manuelfec is offline
Registrado
 
Registrado: jun 2024
Posts: 1
Reputación: 0
manuelfec Va por buen camino
trigger con tablas espaciales

Hola comunidad, espero que se encuentren todos bien, acudo a ustedes en busca de ayuda, estoy intentando realizar estos triggers pero no he podido, por favor ayúdenme.

Ya tengo la extension a postgis y el SRID es metrico

estoy utilizando Postgres

Tengo una tabla de zonificación de geometría tipo polígono con una columna llamada área_iluminada, también tengo una tabla de alumbrado_publico de geometría tipo punto con una columna llamada cobertura. Quiero crear un disparador que almacene en la columna Illuminated_area el área que se superpone entre los polígonos de zonificación y la unión de los polígonos resultantes del buffer alumbrado_publico cuya distancia del buffer es la cobertura. teniendo en cuenta que puedo modificar la posición de los puntos o la cobertura por lo que debe ser actualizable.

he llegado al siguinte codigo pero no funciona, area_iluminada sigue dando null:

Código SQL [-]
Función para calcular el área iluminada y actualizar zonificacion
CREATE OR REPLACE FUNCTION calcular_area_iluminada() RETURNS TRIGGER AS $$
BEGIN
    -- Actualizar el área iluminada en zonificacion
    UPDATE zonificacion z
    SET area_iluminada = ST_Area(ST_Intersection(z.geom, buffer_alum.geom))
    FROM (
        SELECT ST_Union(ST_Buffer(geom, cobertura)) AS geom
        FROM alumbrado_publico
    ) AS buffer_alum
    WHERE ST_Intersects(z.geom, buffer_alum.geom);

    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- Trigger para INSERT en alumbrado_publico
CREATE TRIGGER calcular_area_iluminada_insert
AFTER INSERT ON alumbrado_publico
FOR EACH ROW
EXECUTE FUNCTION calcular_area_iluminada();

-- Trigger para UPDATE en alumbrado_publico
CREATE TRIGGER calcular_area_iluminada_update
AFTER UPDATE ON alumbrado_publico
FOR EACH ROW
EXECUTE FUNCTION calcular_area_iluminada();

-- Trigger para DELETE en alumbrado_publico
CREATE TRIGGER calcular_area_iluminada_delete
AFTER DELETE ON alumbrado_publico
FOR EACH ROW
EXECUTE FUNCTION calcular_area_iluminada();

Última edición por dec fecha: 16-06-2024 a las 09:03:37. Razón: Añadir etiqueta SQL
Responder Con Cita