Bonjour à tous,

Je travaille actuellement avec PostGIS et sollicite votre aide pour la problématique suivante :

J'ai une table qui contient des câbles, une autre qui contient des sites. Un câble a un site d'origine, et un autre d'extrémité, ceux-ci sont connus par jointure sur un code de référence, mais un câble a aussi des site de passages entre les 2.
Je retrouve ces sites de passage grâce à une jointure géométrique :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
FROM table_cable
LEFT JOIN table_site ON ST_DWITHIN(table_cable.geom, table_site.geom, 0.2)
Et ça fonctionne bien, je retrouve bien les sites que je souhaite. Le problème est que ces sites sont dans le mauvais ordre par rapport à la direction du câble : le site d'origine est affiché en dernier, celui d'extrémité en premier :


table_cable.code table_cable.origine table_cable.extremite table_site.code_site
code_ABC 1 4 4
code_ABC 1 4 3
code_ABC 1 4 2
code_ABC 1 4 1


Or je vise le résultat suivant :

table_cable.code table_cable.origine table_cable.extremite table_site.code_site
code_ABC 1 4 1
code_ABC 1 4 2
code_ABC 1 4 3
code_ABC 1 4 4

J'ai vérifié les données visuellement sur QGis, les câbles sont bien orientés dans la bonne direction, j'ai aussi essayé avec une clause ORDER BY par rapport au point d'origine du câble :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
ORDER BT ST_DISTANCE(ST_STARTPOINT(table_cable.geom), table_site.geom)
Mais cela ne fonctionne pas, les câbles n'étant pas toujours en ligne droite, le point d'extrémité peut se retrouver plus proche à vol d'oiseau du point d'origine que d'autres sites de passage qui doivent apparaitre avant dans mon tri.


Je ne suis pas un expert en SIG et je n'ai pas trouvé de solution en écumant Google, aussi je m'en remet à vous au cas où quelqu'un aurait une suggestion ?

Edit : j'ai aussi essayé un ST_REVERSE, sans aucun changement