Fonction A*

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

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.

    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 :

    • 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.

    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);
    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_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);

    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.

Accéder aux archives

« Novembre 2024  
Lun Mar Mer Jeu Ven Sam Dim
        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  

Ouverture de session

Qui est en ligne

Il y a actuellement 1 utilisateur et 87 invités en ligne.
Locations of visitors to this page
Drupal Top Sites - Ultimate Drupal Exposure