Fonction Shooting*
La fonction shortest_path_shooting_star
est définie de la façon suivante :
CREATE OR REPLACE FUNCTION shortest_path_shooting_star(sql text, source_id integer, target_id integer,directed boolean, has_reverse_cost boolean)
RETURNS SETOF path_result
Les arguments sont :
- sql
- une requête SQL, qui doit renvoyer un ensemble de lignes ayant les mêmes colonnes que celles nécessaires à A* plus :
- rule: une chaîne de caractère contenant une liste d'identifiants d'arcs, séparés par une virgule, qui décrit le sens giratoir (si je suis sur tel tronçon je peux aller sur tel tronçon avec le coût décrit dans la colonne
to_cost
)
- to_cost : le coût d'un passage restrain (peut être très élevé dans le cas où le fait de tourner vers tel arc entraine le passage par un feu)
- source_id
- int4 identifiant de l'arc de départ
- target_id
- int4 identifiant de l'arc 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.
La fonction renvoie un ensemble de lignes équivalent à celui renvoyé par A* mis à part que le dernier coût retourné n'est pas -1
.
Exemple:
SELECT * from shortest_path_shooting_star('SELECT id, source, target, cost,
x1, y1, x2, y2, rule, to_cost FROM edges', 17, 9, true, false);
vertex_id | edge_id | cost
----------+---------+------------------------
16 | 17 | 1
15 | 16 | 1
2 | 5 | 1
3 | 4 | 1
20 | 12 | 2
10 | 9 | 2
(6 rows)