Bonjour a tous,

Je commence un peu a en ce dimanche normalement pepere car je suis bloqué sur une fonction que j'essaye de modifier depuis pas mal de temps sans succes...Je suis novice avec les fonctions postgres et la solution est peut etre des plus simples donc avis aux ames charitables pour me sortir de la panade...

Voici la fonction que j'utilise (fonction de pgrouting que j'ai modifie pour lire plusieurs origine destination dans une table)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
 
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 tmp_od_primaire 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 id_section = 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'appelle cette fonction dans la requete suivante

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
 
 
/*CREATION DE LA TABLE RESULTAT     OK*/
 
CREATE TABLE dijsktra_result(gid int4) with oids;
 
SELECT AddGeometryColumn('dijsktra_result', 'the_geom', '3947', 'MULTILINESTRING', 2);
 
INSERT INTO dijsktra_result (the_geom) 
 
            SELECT the_geom FROM dijkstra_sp('vue_section', 52, 35);
Cette premiere etape marche nickel...Seulement j'essaye de recuperer les identifiant origine et destination dans la table resultat afin de pouvoir les separer et leur appliquer des traitement. Mais horreur, j'arrive toujours au meme resultat, a savoir la colonnes geometry remplie correctement mais les autres vides.

Pour info, j'essaye simplement d'integrer dans ma boucle un update id_o et id_d afin de recuperer les origines destination de chaque section de rue traitee avec un truc style UPDATE en fin mais il me plante :

Fonction modifiee qui plante :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
 
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 tmp_od_primaire 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 id_section = 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;
 
UPDATE dijsktra_result SET id_or=id_o FROM  t WHERE id_or is null
UPDATE dijsktra_result SET id_dr=id_d FROM  t WHERE id_or is null
 
 END LOOP;
 RETURN;
END;
Personne n'aurait une petite idee svp?