banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB