Ver Mensaje Individual
  #1 (permalink)  
Antiguo 16/12/2010, 03:43
cry0000
 
Fecha de Ingreso: diciembre-2010
Mensajes: 4
Antigüedad: 13 años, 11 meses
Puntos: 0
Pregunta Planteamiento de consulta ¡¡Help!!

Lo primero un saludo a todos los usuarios del foro.

Ahora el problema.

El entorno es (PostgreSQL + Postgis), tengo una tabla con geometrías ('Linestring'),
con todas sus caracteristicas, Srid, etc, dentro de la tabla tengo la columna length de tipo double la cual es la longuitud de la geometria.

La consulta que querría desarrollar seria la siguiente:

Separar todas las geometrias por grupos dadas 2 condiciones.

1ª que las geometrias se toquen.

Para ello tengo la función
Código SQL:
Ver original
  1. st_touches( the_geom , the_geom)
que retorna true o false

2ª que la suma de las longuitudes del grupo que se vaya generando sea <= a un numero variable que yo le pasaria y cuando llegue a ese total aproximadamente,
se cierre ese grupo y continue con los siguientes registros, generando tantos grupos como fueran necesarios.

No debiendo existir registros duplicados, pues si una geometria forma parte de un grupo, no puede formar parte de otro.

Teniendo en cuenta que cada geometria se puede tocar con una o varias.

Y generar una tabla nueva con los campos de id de la geometría y Grupo al que pertenecería.

Lo más que de momento tengo es:

Código SQL:
Ver original
  1. SELECT  t1.gid, t2.gid, SUM(t1.LENGTH+t2.LENGTH) AS Metros  
  2. FROM tabla t1, tabla t2    
  3. WHERE st_touches(t1.the_geom,t2.the_geom) = 't' -- se tocan
  4. AND t1.LENGTH + t2.LENGTH <= 5500 -- variable
  5. GROUP BY t1.gid,t2.gid,t1.the_geom,t2.the_geom
  6. ORDER BY t1.gid,t2.gid;

Como podeis ver no se por donde empezar, ¿una función recursiva?, ¿un select?.

Con el problema que cualquiera de ellos seria el primero que voy hacer en serio y en profundidad.

Me he leido todas las paginas del foro y en algunas he visto cosas que creo que podian ayudarme, pero no termino de encontrar el camino.

Muchas gracias de antemano, y un saludo.