#1 Fri 22 June 2012 12:09
- m0uum0uu
- Juste Inscrit !
- Date d'inscription: 22 Jun 2012
- Messages: 1
pgRouting - multi table
Bonjour,
je développe actuellement un outil pour le calcul d'itinéraire à partir d'un réseau GTFS (bus par exemple)
Je rencontre un problème au niveau de l'utilisation de pGrouting : je dois affecter des valeurs temporaires à certains arcs. Ces valeurs sont stockées dans une autre table. Je choisi la valeur à utiliser par pgrouting (valeur de base ou valeur temporaire) à l'aide d'un LEFT JOIN + case dans le select. Les résultats de cette requête sont ceux attendus. Malheureusement lorsque je souhaite les utiliser avec pgrouting (requete dans le 1er parametre de shortest_path), les valeurs temporaires (qui peuvent parfois être très grandes) n'ont pas l'air d'être prises en compte lors du calcul mais sont retournées dans les résultats finaux. Je me retrouve avec une réponse composée d'arcs de poids gigantesques alors que des chemins de poids 1000x plus petits existent.
Ex de résultat final :
vertex_id | edge_id | cost
-----------+---------+-------
1001 | 70466 | 9780
1002 | 70467 | 60
1003 | 70468 | 60
1004 | 20422 | 78720
1005 | 20423 | 60
1006 | 20401 | 84240
1111 | 20402 | 60
1432 | 20403 | 60
1513 | 20404 | 60
1514 | 20405 | 240
...
les grandes valeurs (9780 etc) sont les poids temporaires.
Or des arcs de meme source/target mais de poids largement inférieurs existent
Voici ma requête :
SELECT * FROM shortest_path('
SELECT t.arc_id as id,
t.source_id::integer as source,
t.target_id::integer as target,
CASE
WHEN t.cost IS NULL
THEN extract(epoch from t.delais::time)::double precision
ELSE t.cost::double precision
END as cost
from (graph g LEFT JOIN graph_tmp gt ON g.arc_id = gt.arc) as t',
1001, 2020, true, false);
Graph contient la liste d'arcs et graph_tmp les poids temporaires
Le case utilise le poids temporaire s'il existe, la valeur de base sinon.
Le deuxième select me retourne bien un résultat sous la forme id|source|target|cost avec les valeurs que je souhaite.
Pour moi c'est sur ce résultat qu'est basé le graphe généré par pgRouting (?).
Peut-être n'ai-je pas bien compris l'utilité du 1er paramêtre de shortest_path() ?
J'espère que mon post est compréhensible..
Merci pour toute aide susceptible de me débloquer
Hors ligne