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)
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
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;
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.
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);
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 :
Personne n'aurait une petite idee svp?
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;
Partager