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 Fri 12 February 2010 11:49

yteb
Participant occasionnel
Date d'inscription: 25 Jun 2007
Messages: 22

pgrouting dijkstra avec boucle sur table

Bonjour à tous,

je travaille actuellement sur la creation d'un reseau cyclable sur un territoire. J'ai des sections de rue avec des points précédemment calculés. Et je souhaiterais relier mes polylignes entre elles en fonction de leur poids et de plusieurs origine-destination. J'ai donc essayé de creuser un peu et j'essaye d'utiliser pgrouting pour relier mes sections non pas en fonction de leur longueur mais en remplacant cette valeur par mes poids. Voila pour le contexte, maintenant mon pb :-(...

En utilisant cet outil sur la donnee test, pas de probleme. J'obtiens bien mon trace de chemin le plus court. Par contre j'essaye d'utiliser la fonction pgrouting de dijkstra en donnant non plus deux valeurs origine / destination, mais en lui demandant de realiser la procedure sur une table contenant plusieurs origine destination...Et la je bloque completement...

En fait au debut je pensais faire un simple :

Code:

CREATE TABLE dijsktra_result(gid int4) with oids;

SELECT AddGeometryColumn('dijsktra_result', 'the_geom', '2276', 'MULTILINESTRING', 2);

INSERT INTO dijsktra_result(the_geom) 

            SELECT the_geom FROM dijkstra_sp('edges', ID_origine, ID_destination);

Avec une requete qui bouclait sur la table qui contenait mes identifiants ID_origine et ID_destination mais je ne sais pas du tout par ou commencer et ou je peux intervenir (avec access par exemple j'aurais juste boucler en vba...)

Merci d'avance pour le coup de main

Hors ligne

 

#2 Wed 17 February 2010 11:17

yteb
Participant occasionnel
Date d'inscription: 25 Jun 2007
Messages: 22

Re: pgrouting dijkstra avec boucle sur table

OK j'ai trouvé. La solution est en fait assez simple. Il suffit de modifier legerement la fonction dijkstra_sp en remplaçant les variables quote_literal par les valeurs de la table dans une boucle for. Je vous poste le code pour ceux que ca interesserait :

Code:

 
DECLARE 
 r record;
 path_result record;
 v_id integer;
 e_id integer;
 geom geoms;
 id integer;
 t record;
 
BEGIN
 
 id :=0;
 FOR t IN SELECT * FROM ttt LOOP
 
 FOR path_result IN EXECUTE 'SELECT gid,the_geom FROM ' ||
          'shortest_path(''SELECT gid as id, source::integer, target::integer, ' || 
          'length::double precision as cost FROM ' ||
   quote_ident(geom_table) || ''', ' || t.id_o || 
          ' , ' || t.id_d || ' , false, false), ' || 
          quote_ident(geom_table) || ' where edge_id = gid ' 
        LOOP
                 geom.gid      := path_result.gid;
                 geom.the_geom := path_result.the_geom;
   id := id+1;
   geom.id       := id;
                 
                 RETURN NEXT geom;
 END LOOP;
 END LOOP;
 RETURN;
END;

J'ai juste ajoute "FOR t IN SELECT * FROM ttt LOOP" en debut de code et remplacé les valeurs "sources" et "target" par le resultat de ma requete.

Peut etre que ca pourra interesser quelqu'un un jour!

A bientot

Dernière modification par yteb (Thu 18 February 2010 18:03)

Hors ligne

 

Pied de page des forums

Powered by FluxBB