POSTGIS - Trier par distance par rapport à l'origine/direction
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:
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:
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