Re: capturar valores de campos en variables usando consulta espacial

From: Alvaro Herrera <alvherre(at)2ndquadrant(dot)com>
To: "jvenegasperu (dot)" <jvenegasperu(at)gmail(dot)com>
Cc: Ayuda <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: capturar valores de campos en variables usando consulta espacial
Date: 2015-09-22 18:04:34
Message-ID: 20150922180434.GF295765@alvherre.pgsql
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

jvenegasperu . escribió:

> -- aqui hago un select por cada variable por favor ayudenme como podria
> poner cada campo en una variable
>
> gidagua = (select gid from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom limit 1);
> iniagua = (select st_startpoint(b.the_geom) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom limit 1);
> finagua = (select st_endpoint(b.the_geom) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom limit 1);
> xiagua = (select st_x(st_startpoint(b.the_geom)) from ap_dist_agua b
> where st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and
> new.the_geom && b.the_geom limit 1);
> xfagua = (select st_x(st_endpoint(b.the_geom)) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom limit 1);
> yiagua = (select st_y(st_startpoint(b.the_geom)) from ap_dist_agua b
> where st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and
> new.the_geom && b.the_geom limit 1);
> yfagua = (select st_y(st_endpoint(b.the_geom)) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom limit 1);
> rotagua = (select rotacion from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom limit 1);

esta parte es fácil. Usa un record.

DECLARE
r record
...

select into r
gid,
st_startpoint(b.the_geom) as startpoint,
st_endpoint(b.the_geom) as endpoint
from ap_dist_agua where ...

gidagua = r.gid;
iniagua = r.startpoint;
finagua = r.endpoint;
xiagua = st_x(r.startpoint);
yfagua = st_x(r.startpoint);
... etc ...

El rotagua seguramente se puede agregar en la misma consulta de forma
similar.

> -- aqui uso el gid del agua anterior
>
> gidagua2 = (select gid from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua limit 1);
> iniagua2 = (select st_startpoint(b.the_geom) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua limit 1);
> finagua2 = (select st_endpoint(b.the_geom) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua limit 1);
> xiagua2 = (select st_x(st_startpoint(b.the_geom)) from ap_dist_agua b
> where st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and
> new.the_geom && b.the_geom and b.gid != gidagua limit 1);
> xfagua2 = (select st_x(st_endpoint(b.the_geom)) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua limit 1);
> yiagua2 = (select st_y(st_startpoint(b.the_geom)) from ap_dist_agua b
> where st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and
> new.the_geom && b.the_geom and b.gid != gidagua limit 1);
> yfagua2 = (select st_y(st_endpoint(b.the_geom)) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua limit 1);
> rotagua2 = (select rotacion from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua limit 1);

Misma cosa; acá puedes usar un nuevo r2 o bien usar el mismo r que en la
consulta anterior, ya que extrajiste todos los valores de interés.

> -- aqui uso los gid del agua 1 y 2
> gidagua3 = (select gid from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua and b.gid != gidagua2 limit 1);
> iniagua3 = (select st_startpoint(b.the_geom) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua and b.gid != gidagua2 limit 1);
> finagua3 = (select st_endpoint(b.the_geom) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua and b.gid != gidagua2 limit 1);
> xiagua3 = (select st_x(st_startpoint(b.the_geom)) from ap_dist_agua b
> where st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and
> new.the_geom && b.the_geom and b.gid != gidagua and b.gid != gidagua2 limit
> 1);
> xfagua3 = (select st_x(st_endpoint(b.the_geom)) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua and b.gid != gidagua2 limit 1);
> yiagua3 = (select st_y(st_startpoint(b.the_geom)) from ap_dist_agua b
> where st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and
> new.the_geom && b.the_geom and b.gid != gidagua and b.gid != gidagua2 limit
> 1);
> yfagua3 = (select st_y(st_endpoint(b.the_geom)) from ap_dist_agua b where
> st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and new.the_geom &&
> b.the_geom and b.gid != gidagua and b.gid != gidagua2 limit 1);
> rotagua3 = (select st_y(st_endpoint(b.the_geom)) from ap_dist_agua b
> where st_intersects(st_buffer(new.the_geom,0.5),b.the_geom) and
> new.the_geom && b.the_geom and b.gid != gidagua and b.gid != gidagua2 limit
> 1);

Ni idea si es necesario hacer un nuevo select o basta con hacer cálculos
sobre los valores que ya extrajiste.

--
Álvaro Herrera http://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda(at)postgresql(dot)org)
Para cambiar tu suscripción:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message mauricio pullabuestan 2015-09-23 21:53:45 Error "temporary" is not a known variable. al crear funcion con Select * INTO TEMPORARY tarifa_rs From t
Previous Message jvenegasperu . 2015-09-22 17:42:42 capturar valores de campos en variables usando consulta espacial