Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/08/2010, 11:07
Avatar de webness
webness
 
Fecha de Ingreso: enero-2009
Ubicación: BOGOTA
Mensajes: 312
Antigüedad: 16 años, 2 meses
Puntos: 5
Aporte procedimiento almacenado

HOLA, llego con un aporte, este procedimiento almacenado permite hacer un query y sacar unas coordenadas de una tabla, posteriormente se recorre este resultado, preguntado que puntos se encuentran en un radio circular dado teniendo como centroide cada una de las coordenadas anteriores. El resultado de este query es el input para un insert.

Código MySQL:
Ver original
  1. CREATE OR REPLACE FUNCTION P_VALTEC_CATS_RADIO(integer,text,int) RETURNS VOID as $$
  2.     rec     RECORD ;
  3.     radio   alias for $1;
  4.     tabla   alias for $2;
  5.     fuente      alias for $3;
  6.  
  7.     radio_grados    DOUBLE PRECISION;
  8.     radio_grados := (radio)::double precision/(110880)::double precision;
  9.         FOR rec IN EXECUTE 'SELECT id,cx,cy FROM valtec_puntos' LOOP
  10.             EXECUTE 'INSERT INTO valtec_cats_influencia (coddane,id_punto,codigo_categoria,nombre_categoria,area,fuente)
  11.             SELECT  coddane,'||rec.id||',codigo_categoria,nombre_categoria,'||radio||','||fuente||'
  12.             FROM    '||tabla||' WHERE CIRCLE '||quote_literal('(('||rec.cx||','||rec.cy||'),'||radio_grados||')')||' ~ POINT (cx,cy)';
  13.         END LOOP;
  14.         RETURN;
  15. $$ LANGUAGE plpgsql;