PostgreSQL - COLINDANCIAS DE UN TERRENO2

 
Vista:
Imágen de perfil de bit

COLINDANCIAS DE UN TERRENO2

Publicado por bit (4 intervenciones) el 11/11/2013 19:35:37
TENGO CASI SOLUCIONADO EL PROBLEMA.. HE CREADO NUEVAS VARIABLES Y FUNCIONA PARCIALMENTE SI ALGUIEN PUEDE HALLAR PORQUE NO ALMACENA Y MUESTRA EN EL ARRAY "vresultado" ME AYUDARIA MUCHO..!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
-- Function: mapa.b_colindancias(character varying, character varying)
 
-- DROP FUNCTION mapa.b_colindancias(character varying, character varying);
 
CREATE OR REPLACE FUNCTION mapa.b_colindancias(p_codigo_catastral character varying)
  RETURNS SETOF TEXT[] AS
$BODY$
DECLARE
 
  minx integer;
  maxx integer;
  miny integer;
  maxy integer;
  reg1 RECORD;
  reg2 RECORD;
  reg3 RECORD;
  reg4 RECORD;
 
  regC RECORD;
 
  regc1 RECORD;
  regc2 RECORD;
  regc3 RECORD;
  regc4 RECORD;
 
  vresultado TEXT[]:='{}';
  j int:=1;
 
BEGIN
   RAISE NOTICE 'mostrando registro:...';
   j:=1;
--devuelve los 4 puntos del poligono objetivo:
   SELECT ST_XMin(i.the_geom)::numeric as minx INTO reg1 from mapa.inmueble as i where i.codigo_catastral=p_codigo_catastral;
   SELECT ST_XMax(i.the_geom)::numeric as maxx INTO reg2 from mapa.inmueble as i where i.codigo_catastral=p_codigo_catastral;
   SELECT ST_YMin(i.the_geom)::numeric as miny INTO reg3 from mapa.inmueble as i where i.codigo_catastral=p_codigo_catastral;
   SELECT ST_YMax(i.the_geom)::numeric as maxy INTO reg4 from mapa.inmueble as i where i.codigo_catastral=p_codigo_catastral;
   RAISE NOTICE 'el minx: %',reg1;
--devuelve los lotes conlindantes:
   FOR regC IN
	SELECT i.codigo_catastral,i.numero_lote
	FROM mapa.inmueble AS i
	JOIN mapa.inmueble AS i2
	ON ST_DWithin(i2.the_geom,i.the_geom,8)
	WHERE i2.codigo_catastral=p_codigo_catastral
   LOOP
	--si es diferente al codigo catastral pivote trabajar con los otros codigos catastrales
	IF regC.codigo_catastral<>p_codigo_catastral THEN
		RAISE NOTICE 'regC.[numero_lote]: %', regC.numero_lote;
 
 
		--sacar 4 puntos del poligono colindante:
		SELECT st_xmin(i.the_geom)::numeric as minx INTO regC1 from mapa.inmueble as i where i.codigo_catastral=quote_literal(regC.codigo_catastral);
		SELECT st_ymin(i.the_geom)::numeric as miny INTO regC2 from mapa.inmueble as i where i.codigo_catastral=quote_literal(regC.codigo_catastral);
		SELECT st_xmax(i.the_geom)::numeric as maxx INTO regC3 from mapa.inmueble as i where i.codigo_catastral=quote_literal(regC.codigo_catastral);
		SELECT st_ymax(i.the_geom)::numeric as maxy INTO regC4 from mapa.inmueble as i where i.codigo_catastral=quote_literal(regC.codigo_catastral);
 
		--hacer las comparaciones para introduccir al vector_resultado
		IF(regC4>=reg3)THEN
			RAISE NOTICE 'Norte: %', quote_ident(regC.numero_lote);
			vresultado[i]:='Norte';
			vresultado[i+1]:=regC.numero_lote::varchar;
			RAISE NOTICE 'vresultado: %', vresultado[1];
			--asignar al vector la orientacion y el numero_lote
		END IF;
		IF(regC2<=reg4)THEN
			RAISE NOTICE 'Sur: %',quote_ident(regC.numero_lote);
			vresultado[i]:='Sur';
			vresultado[i+1]:=regC.numero_lote;
		END IF;
		IF(regC3<=reg1)THEN
			RAISE NOTICE 'Oeste: %',quote_ident(regC.numero_lote);
			vresultado[i]:='Oeste';
			vresultado[i+1]:=regC.numero_lote;
		END IF;
		IF(regC1>=reg2)THEN
			RAISE NOTICE 'Este: %',quote_ident(regC.numero_lote);
			vresultado[i]:='Este';
			vresultado[i+1]:=regC.numero_lote;
		END IF;
	END IF;
 
	j:=j+2;
 
    END LOOP;
 
 
 
    RAISE NOTICE 'fuera reg3.xmin: %s...', quote_ident((reg3.xmin)::varchar);
    --RETURN; -- FINALIZA O INDICA QUE usado si se ha definido variables de entrada y salida
    --RETURN QUERY EXECUTE sql; -- cuando tenemos que devolver REGISTROS DE LA VARIABLE: sql
    --RETURN NEXT registro;--RETORNA EL VALOR DE LA VARIABLE "reg1"
    --RETURN NEXT reg1;
    RETURN NEXT vresultado;
END;
$BODY$
  LANGUAGE plpgsql VOLATILE
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder