#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

