La fonction shortest_path
est définie de la manière suivante :
CREATE OR REPLACE FUNCTION shortest_path(sql text, source_id integer, target_id integer, directed boolean, has_reverse_cost boolean) RETURNS SETOF path_resultLes arguments sont les suivants :
- sql
- une requête SQL qui doit renvoyer les champs suivants :
SELECT id, source, target, cost FROM edge_table;
- id: l'identifiant entier (int4) de l'arc
- source: un identifiant entier (int4) du noeud de départ
- target: un identifiant entier (int4) du noeud d'arrivée
- cost: le coût de la traversée d'un arc (float8, un coût négatif permet de s'assurer qu'on ne passera jamais par cette arc)
- reverse_cost : (optionel) le coût de la traversée de l'arc en sens invers. Cela n'estutilisé que lorsque la fonction est appelé avec l'argument
has_reverse_cost
à vrai.
- source_id
- identifiant du noeud de départ.
- target_id
- identifiant du noeud d'arrivée.
- directed
- vrai si le graphe est orienté.
- has_reverse_cost
- vrai si la colonne
reverse_cost
doit être considérée lors de la recherche du plus court chemin, dans le cas où lma traversée de l'arc se fait en sens invers.
- vertext_id : l'identifiant du noeud source de chaque arc. Il y a une ligne supplémentaire contenant l'identifiant du noeud d'arrivée,
- edge_id : l'identifiant de l'arc traversé,
- cost : le coût de la traversée de l'arc. Cette valeur vaut 0 pour la dernière ligne renvoyée. Donc le coût total du parcour peut être calculé en faisant la somme des valeurs de cette colonne.
SELECT * FROM shortest_path('SELECT gid AS id, source::int4, target::int4, length::double precision AS cost, FROM dourol',3, 7, false, false);
vertex_id | edge_id | cost -----------+---------+------------------------ 3 | 2 | 0.000763954363701041 4 | 21 | 0.00150254971056274 6 | 5 | 0.000417442425988342 7 | -1 | 0 (4 rows)
SELECT * FROM shortest_path('SELECT gid AS id, source::int4, target::int4, length::double precision AS cost,length::double precision AS reverse_cost FROM dourol', 3, 7, true, true);
Posted in version imprimable | Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | 4162 lectures
Posté par djay le 26 Mai, 2007 - 15:36.