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 Wed 15 March 2017 11:37

bruhnild
Participant actif
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 130

Selection ligne à N+3 d'un noeud [Postgis ou autre solution libre]

Bonjour,

Je me permet de reposter le thread de CorentinLC  du 20/01/2017 ici ==> https://georezo.net/forum/viewtopic.php?id=104800 , mais avec une légère variation du  point bloquant.

J'ai une couche points qui représente des chambres télécoms et une couche de lignes qui traverse ces chambres, les câbles. On me demande de définir le réseau à partir d'une chambre en prenant en compte le fait que le réseau doit ne pas excéder trois chambres traversées.

Cependant, quand les communes sont importantes, il y a beaucoup de possibilités, et il faut arriver à sélectionner pour chaque chambre tous les tronçons concernés, qui sont présents à N+3 (ou 5) N étant la chambre d'où le réseau part.

Ci dessous une capture pour éclaircissement.

Je me retrouve coincée aujourd’hui pour réaliser cette manipulation dans Postgis. Auriez vous des pistes de réflexion, outils ?

Merci d’avance pour votre aide,
Bonne journée,
Marine.

Dernière modification par bruhnild (Wed 15 March 2017 12:12)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#2 Wed 15 March 2017 12:04

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Selection ligne à N+3 d'un noeud [Postgis ou autre solution libre]

Bonjour,

Vous avez plusieurs solutions avec Postgis:

• Convertir votre modele en topologie (cf. http://postgis.net/docs/Topology.html) et travailler avec les arcs et sommets traversés

• Ecrire une requete recursive (Recursive CTE: https://www.postgresql.org/docs/9.6/sta … with.html) qui parcours le réseau de câbles à partir d'une chambre et s'arrête après n chambres traversées.

Nico

ps: dans votre image, les 3 câbles du bas ne devraient-ils pas être annotés "N+2" ?

Hors ligne

 

#3 Wed 15 March 2017 12:13

bruhnild
Participant actif
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 130

Re: Selection ligne à N+3 d'un noeud [Postgis ou autre solution libre]

Merci pour les pistes, il y avait effectivement une coquille dans la capture, je l'ai corrigée, merci de l'avoir relevée!

Hors ligne

 

#4 Wed 15 March 2017 13:09

dbaston
Juste Inscrit !
Lieu: Montpelier
Date d'inscription: 3 Jun 2016
Messages: 7
Site web

Re: Selection ligne à N+3 d'un noeud [Postgis ou autre solution libre]

Bonjour,

Vous pourriez peut-être trouver une solution avec pgRouting (une autre extension pour PostgreSQL)

Il me semble que la fonction pgr_drivingDistance fera l'affaire:
http://docs.pgrouting.org/2.0/fr/src/dr … g-distance

Vous auriez à bâtir d'abord un réseau pgRouting à partir de vos géométries PostGIS.

Daniel

Hors ligne

 

#5 Wed 15 March 2017 13:49

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Selection ligne à N+3 d'un noeud [Postgis ou autre solution libre]

Avec une requete recursive, ca donnerait qqch comme:

La table cable contient les cables, connectés aux chambres (table room): un cable part d'une chambre et arrive dans une chambre.

Par exemple, pour trouver tous les cables partant de la chambre d'id=1:

• La premiere partie de la requete trouve tous les cables partant de la chambre de départ et connectés a des chambres (geomroom)
• la deuxieme partie, récursive, cherche tous les cables connectés aux chambres trouvées à l'étape précédente.

Ici, la requete ne prend donc pas en compte des cables partant d'une chambre, connectés à aucune chambre.

Code:

with recursive tmp as (
  select r.id as id_chambre_src, c.id as id_cable, 1::int as step, array[r2.id] as idrooms,
     r2.geom as geomroom
  from room r join cable c on st_dwithin(st_boundary(c.geom), r.geom, 0.001) --lien entre la chambre de départ et un câble
    join room r2 on st_dwithin(st_boundary(c.geom), r2.geom, 0.001) -- lien entre un cable et sa chambre d'arrivée
    -- id chambre de départ
  where r.id = 1 and r2.id <> 1

  UNION ALL
    -- selection des cables connectés aux chambres courantes,
    select t.id_chambre_src, c.id, step+1, t.idrooms||r.id, r.geom
    from cable c join tmp t on st_dwithin(st_boundary(c.geom), t.geomroom, 0.001)
      join room r on st_dwithin(st_boundary(c.geom), r.geom, 0.001)
    where c.id <> t.id_cable and not (r.id = any(t.idrooms)) -- on ne prend pas les câbles et les chambres déjà traitées (condition de stop de la récursion)

) select * from tmp;

Pour trouver les cables connectés a N chambres de la chambre de départ:

with recursive .... (
) select * from tmp
where step < N;

Ex avec les données de l'image:

Code:

id_chambre_src    id_cable    step    idrooms
1                  2            1        {5}
1                  4            1        {2}
1                  6            1        {3}
1                  16           1        {6}
1                  8            2        {3,4}
1                  10           2        {6,7}

Nicolas


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#6 Wed 15 March 2017 13:53

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1554

Re: Selection ligne à N+3 d'un noeud [Postgis ou autre solution libre]

Pour une telle problématique de réseau (surement orienté), je vous conseille vivement de passer en topologie, histoire d'avoir des arcs (cables) et des noeuds (chambres) avec des relations explicites entre eux.

(il y a qq messages sur ce forum qui indiquent comment passer d'un modèle objet à un modèle topologique avec postgis.)

Nicolas

Hors ligne

 

#7 Wed 15 March 2017 15:48

bruhnild
Participant actif
Lieu: Lyon
Date d'inscription: 7 Jun 2014
Messages: 130

Re: Selection ligne à N+3 d'un noeud [Postgis ou autre solution libre]

Merci pour le gros coup de pouce, c'est exactement ce que je voulais obtenir, et même plus!

Marine.

Hors ligne

 

#8 Tue 04 April 2017 17:05

fassa222
Participant occasionnel
Date d'inscription: 18 Jan 2012
Messages: 36

Re: Selection ligne à N+3 d'un noeud [Postgis ou autre solution libre]

Nicolas Ribot a écrit:

Pour une telle problématique de réseau (surement orienté), je vous conseille vivement de passer en topologie, histoire d'avoir des arcs (cables) et des noeuds (chambres) avec des relations explicites entre eux.

(il y a qq messages sur ce forum qui indiquent comment passer d'un modèle objet à un modèle topologique avec postgis.)

Nicolas


Bonjour Nicolas, Votre idée m’intéresse beaucoup. Du coup es ce que vous avez un exemple de création de topologie avec l'insertion d'une géométrie. J'ai compensé à rechercher mais je pige pas grande chose, puisse que je suis nouveau sur postgis. J'ai meme regardé le lien que vous avez postez mais pas grande chose, j'ai réussi à créer une topologie mais j'arrive pas a inserer une géométrie dans la topologie Merci de votre réponse

Hors ligne

 

Pied de page des forums

Powered by FluxBB