Bonjour,
Me voilà face à un épineux problème :
Je travaille sur des données géographiques routières.
Dans ma table, road j'ai (id, name, code, the_geom)
Je cherche à agréger toutes les routes qui se touchent et qui ont les mêmes noms et codes.
Pour ça j'ai 2 fonctions à ma disposition :
ST_Union(geometry, geometry)
ST_touches(geometry, geometry)
La première additionne les 2 géométries en une seule, la seconde détermine si les 2 géométries se touchent.
J'ai créer ma propre fonction d'agrégat ("geometry_sum") sur base de ST_union qui fonctionne exactement comme l'agrégat "SUM" existant dans le standart SQL
Je peux donc facilement grouper mes routes avec la requête suivante :
Il me reste à trouver comment faire en sorte que seules les routes qui se touchent soient groupées ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 SELECT name, code, geometry_sum(the_geom) FROM road GROUP BY r1.name, r1.code
Et là ... je sèche
Il faudrait en quelque sorte que j'ai accès dans ma requête à la valeur de l'agrégat en cours pour pouvoir tester s'il touche la géométrie. (pas sûr que ce soit très clair ce que j'écris)
Donc je me tourne vers vos lumière en quête d'une solution.
Partager