#1 Mon 02 June 2014 19:17
- Géronimo
- Participant occasionnel
- Date d'inscription: 21 May 2014
- Messages: 14
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.
Hors ligne
#2 Tue 03 June 2014 09:16
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3197
- Site web
Re: distance entre deux points par une polyligne
Bonjour,
A priori
Déterminer la polyligne de la couche 1 à la quelle le point de la couche 3 appartient (st_within ?)
Déterminer le point amont de la couche 2 à partir de la polyligne précédente
Création d'un BBox à partir de ce point et du point de la couche 3
Intersection de cette BBox avec la polyligne
St_length sur la géométrie résultante.
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#3 Tue 03 June 2014 09:31
- Géronimo
- Participant occasionnel
- Date d'inscription: 21 May 2014
- Messages: 14
Re: distance entre deux points par une polyligne
Bonjour, merci de votre réponse.
Ne sachant pas ce qu'est une bbox, j'ai cherché sur internet, il s'agit donc d'une bounding box. Sauf qu'il n'y a aucune explication sur ce que c'est, sur l'utilité d'un tel outil. Est-ce que vous pourriez me fournir quelques explications en plus, s'il vous plait ?
Hors ligne
#4 Tue 03 June 2014 10:15
- ChristopheV
- Membre
- Lieu: Ajaccio
- Date d'inscription: 7 Sep 2005
- Messages: 3197
- Site web
Re: distance entre deux points par une polyligne
Christophe
L'avantage d'être une île c'est d'être une terre topologiquement close
Hors ligne
#5 Wed 04 June 2014 11:43
- Géronimo
- Participant occasionnel
- Date d'inscription: 21 May 2014
- Messages: 14
Re: distance entre deux points par une polyligne
Bonjour à tous !
Déjà, merci pour vos réponses, ChristopheV.
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 :
Code:
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.
Merci encore et à bientôt.
Hors ligne