
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


0