Vous n'êtes pas identifié(e).
- Contributions : Récentes | Sans réponse
Pages : 1
#1 02/06/2014 19:18:59
- Géronimo
- Membre
distance entre deux points par une polyligne
Bonsoir à tous,
Je vous expose mon problème :
J'ai 3 couches :
- une couche des cours d'eau, en géométrie polyligne. Il s'agit donc d'une arborescence de polyligne. Chaque branche de l'arbre représentant un tronçon hydrographique et donc une ligne sur la table attributaire de la couche.
- une couche des intersections de ces cours d'eau, en géométrie point. Chaque intersection des branches est un point et donc une ligne sur la table attributaire de cette couche.
- une couche de points parsemés sur les cours d'eau, en géométrie point. Les points sont placés sans logique particulière sur les tronçons hydrographiques.
Je voudrais, pour chaque point de la troisième couche, évaluer la distance qui le sépare de l'intersection des cours d'eau située juste en aval, c'est-à-dire des points de la deuxième couche.
Cela me permettra de sélectionner celui qui est le plus loin et d'effacer tous les autres, tronçons hydrographiques par tronçons hydrographiques.
Je veux bien sûr connaitre la distance entre ces points en passant par la polyligne du tronçon hydrographique et non par la distance la plus proche entre les deux.
Existe-t-il des requêtes ou des fonctions particulières sur postgresql permettant de calculer la distance entre deux points en passant par une polyligne, puis de résoudre mon problème ?
Je vous remercie de vos futures réponses.
A bientôt.
Dernière modification par Géronimo (02/06/2014 19:24:36)
Hors ligne
#2 04/06/2014 12:00:03
- Géronimo
- Membre
Re : distance entre deux points par une polyligne
Bonjour à tous,
J'ai finalement réussi à résoudre le problème.
Le script suivant (entre autres scripts et fonctions) a été décisif dans la résolution de mon problème :
WITH geoms AS(
Select gid_1, idf, fid_combin, code_zone2, geom, geom_2 as point1, geom_3 as point2
from v603_int)
SELECT row_number()OVER()::integer AS gid, gid_1, idf, fid_combin, code_zone2, geom, point1, point2,
ST_Length(ST_Line_Substring(geom, ST_Line_Locate_Point(geom, point1), ST_Line_Locate_Point(geom, point2))) as distance
FROM geoms;
J'avais préalablement joint dans une même table mes 3 couches (polyligne, point, point) afin d'avoir les 3 géométries sur la même table.
Ensuite, l'avant-dernière ligne de ce script est la plus importante. Par ST_Line_Substring, je crée une polyligne entre mes 2 points en passant par la polyligne du cours d'eau. Par ST_Length, je calcule la longueur de chacune des polylignes.
Hors ligne
Pages : 1