Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Suite à un problème sur notre serveur une intervention a été planifiée ce  matin. La coupure, qui ne devait pas exéder 5 mn, a duré plus longtemps que prévu. L'intervention consistait à l'augmentation de l'espace disque (GeoRezo prend un peu plus de place en viellissant). Malheureusement, le serveur se faisant vieux, quelques soucis ont eu lieu.

Nous avons procédé à un gros nettoyage d'automne : augmentation de l'espace disque, mise à jour des certificats SSL pour l'utilisation des  urls en https, upgrade d'Apache et autres outils nécessaire au bon fonctionnement.

Notre volonté à long terme est de consolider la plateforme GeoRezo et nous accueillons toutes personnes intéressées pour nous aider (technologies utilisées : drupal, docker, MySQL, git, etc.) Si vous désirez contribuer à un projet dynamique et apprendre de nouvelles choses, contactez nous !

L'équipe GeoRezo

#1 mer. 15 mars 2017 11:37

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 juin 2014
Messages: 40

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 (mer. 15 mars 2017 12:12)


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

Hors ligne

 

#2 mer. 15 mars 2017 12:04

Nicolas Ribot
Moderateur
Lieu: Toulouse
Date d'inscription: 9 sept. 2005
Messages: 1015

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 mer. 15 mars 2017 12:13

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 juin 2014
Messages: 40

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 mer. 15 mars 2017 13:09

dbaston
Membre
Lieu: Montpelier
Date d'inscription: 3 juin 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 mer. 15 mars 2017 13:49

Nicolas Ribot
Moderateur
Lieu: Toulouse
Date d'inscription: 9 sept. 2005
Messages: 1015

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 mer. 15 mars 2017 13:53

Nicolas Ribot
Moderateur
Lieu: Toulouse
Date d'inscription: 9 sept. 2005
Messages: 1015

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 mer. 15 mars 2017 15:48

bruhnild
Membre
Lieu: Lyon
Date d'inscription: 7 juin 2014
Messages: 40

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 mar. 04 avril 2017 17:05

fassa222
Membre
Date d'inscription: 18 janv. 2012
Messages: 35

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

Partagez  |