La fonction shortest_path_astar
est définie de la façon suivante :
CREATE OR REPLACE FUNCTION shortest_path_astar(sql text, source_id integer, target_id integer, directed boolean, has_reverse_cost boolean)
RETURNS SETOF path_result
RETURNS SETOF path_result
Les arguments sont :
- sql
- une requête SQL, qui doit renvoyer un ensemble de lignes ayant les colonnes suivantes :
- id: une entier (int4), l'identifiant de l'arc
- source: un entier (int4), l'identifiant du noeud source
- target: un entier (int4), l'identifiant du noeud destination
- cost: une valeur flotante (float8) représentant le coût de la traversé de l'arc. (un coût négatif permettra d'empécher l'insertion de l'arc dans le graphe).
- x1: coordonée x du noeud source de l'arc
- y1: coordonée y du noeud source de l'arc
- x2: coordonée x du noeud destination de l'arc
- y2: coordonée x du noeud destination de l'arc
- reverse_cost (optional): le coût de la traversée dans le sens inverse de l'arc. Cela est uniquement utilisé lorsque le graphe est orienté et que les paramètres has_reverse_cost sont à vrai (voir la remarque ci-dessous concernant les coûts inverses).
- source_id
- int4 identifiant du point de départ
- target_id
- int4 identifiant du point d'arrivé
- directed
- vrai si le graphe est orienté
- has_reverse_cost
- si sa valeur est vrai, la colonne
reverse_cost
du résultat SQL généré sera utilisé pour le coût de la traversé d'un arc dans la direction oposée. - vertex_id: l'identifiant du noeud origine de chaque arc. Il y a une ligne supplémentaire après le dernier arc qui contient le noeud de la destination du chemin.
- edge_id: l'identifiant de l'arc croisé
- cost: le coût associé à l'arc courant. Il vaut 0 pour les lignes après le dernier arc. Donc, le coût total du chemin peut être calculé en utilisant la somme de la colonne coût de toutes le lignes.
La fonction renvoie un ensemble de lignes. Il y a une ligne pour chaque arc traversé et une en plus contenant le noeud terminal. Les colonnes de chaque lignes sont :
Exemple:
SELECT * from shortest_path_astar('SELECT gid as id, source::int4,
target::int4, length::double precision as cost, x1, y1, x2, y2
FROM dourol',3, 7, false, false);
target::int4, length::double precision as cost, x1, y1, x2, y2
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)
----------+---------+------------------------
3 | 2 | 0.000763954363701041
4 | 21 | 0.00150254971056274
6 | 5 | 0.000417442425988342
7 | -1 | 0
(4 rows)
SELECT * from shortest_path_astar('SELECT gid as id, source::int4,
target::int4, length::double precision as cost,length::double precision
as reverse_cost, x1, y1, x2, y2 FROM dourol', 3, 7, true, true);
target::int4, length::double precision as cost,length::double precision
as reverse_cost, x1, y1, x2, y2 FROM dourol', 3, 7, true, true);
Posted in version imprimable | Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | 3766 lectures
Posté par rédacteurs le 21 Août, 2006 - 11:43.