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
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 originalSELECT t1.gid, t2.gid, SUM(t1.LENGTH+t2.LENGTH) AS Metros
FROM tabla t1, tabla t2
WHERE st_touches(t1.the_geom,t2.the_geom) = 't' -- se tocan
AND t1.LENGTH + t2.LENGTH <= 5500 -- variable
GROUP BY t1.gid,t2.gid,t1.the_geom,t2.the_geom
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.