Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > PostgreSQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 2 Días
manuelfec manuelfec is offline
Registrado
 
Registrado: jun 2024
Posts: 1
Poder: 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: Hace 1 Día a las 09:03:37. Razón: Añadir etiqueta SQL
Responder Con Cita
  #2  
Antiguo Hace 8 Horas
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.741
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
No conozco postgis, pero quizás te pueda dar algún consejo para debugar...

Primero pon una excepción o algo que de error dentro de la función para asegurarte de que pasa por ella.

Por otro lado puedes hacer una tabla DEBUG(TIMESTAMP, VARCHAR(256)) y dentro de la función vas haciendo un INSERT con información que te ayude a saber los valores que se van manejado.

Por ejemplo :
  • podrías guardar el resultado de ST_Area(ST_Intersection(z.geom, buffer_alum.geom)) para ver si devuelve nulos.
  • podrías guardar un SELECT COUNT(*) FROM ... WHERE ST_Intersects(z.geom, buffer_alum.geom) para ver cuantos registros se están modificando.

Espero que esto te ayude...
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Trigger dinámico para Auditoría de Tablas jwmoreira Firebird e Interbase 6 11-03-2010 22:53:07
Un trigger que dispara un procedimiento que dispara un trigger... sitrico Firebird e Interbase 5 04-06-2007 22:05:13
Trigger inferno Firebird e Interbase 1 26-10-2005 21:25:43
Trigger Para Refrescar Tablas GIVO SQL 5 21-07-2003 19:32:55


La franja horaria es GMT +2. Ahora son las 01:40:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi