#1 Mon 13 December 2010 17:27
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
PGrouting : paramétrer une fonction
Bonsoir,
Je souhaite créer les plus courts chemins d'une grosse série de points noddeb à une autre série de points nodfin . Or, la fonction shortest_path_astar ne permet que de mettre des entiers. J'aurais souhaité faire quelque chose dans ce style :
Code:
SELECT * FROM shortest_path_astar('SELECT gidarc as id, startp2 as source, endp2 as target ,x1,y1,x2,y2,longueur as cost,longueur as reverse_cost from arc', 'select names from noddeb', 'select names from nodfin', true, true) ;
Pas très à l'aise dans la création de fonction sous postgreSQL, pourriez-vous m'aider ? Merci d'avance
La solution en C sous linux que l'on trouve dans le tutoriel ne m'inspire pas trop ne connaissant pas C , d'autant plus que je suis sous Windows.
Pascal PLUVINET
Hors ligne
#2 Mon 13 December 2010 17:40
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
Re: PGrouting : paramétrer une fonction
Désolé, je me réponds moi-même :
Code:
create table pgrout.chemins as SELECT a.names as names_deb, b.names as names_fin, (shortest_path_astar('SELECT gidarc as id, startp2 as source, endp2 as target ,x1,y1,x2,y2,longueur as cost,longueur as reverse_cost from arc', a.names,b.names,true,true)).cost , (shortest_path_astar('SELECT gidarc as id, startp2 as source, endp2 as target ,x1,y1,x2,y2,longueur as cost,longueur as reverse_cost from arc', a.names,b.names,true,true)).edge_id FROM noddeb a , nodfin b;
Pascal PLUVINET
Hors ligne
#3 Mon 13 December 2010 17:49
- Nicolas Ribot
- Membre
- Lieu: Toulouse
- Date d'inscription: 9 Sep 2005
- Messages: 1554
Re: PGrouting : paramétrer une fonction
Désolé, je me réponds moi-même :
Code:
create table pgrout.chemins as SELECT a.names as names_deb, b.names as names_fin, (shortest_path_astar('SELECT gidarc as id, startp2 as source, endp2 as target ,x1,y1,x2,y2,longueur as cost,longueur as reverse_cost from arc', a.names,b.names,true,true)).cost , (shortest_path_astar('SELECT gidarc as id, startp2 as source, endp2 as target ,x1,y1,x2,y2,longueur as cost,longueur as reverse_cost from arc', a.names,b.names,true,true)).edge_id FROM noddeb a , nodfin b;
)
Sinon, point besoin de C pour des fonctions PG:
Il est possible de creer des fonctions pur SQL, qui realisent un enchainement de requetes, ou creent des tables tmp, ou autre manip, la definition est toute simple.
Et sinon pl/pgsql, langage de programmation de PG, simple aussi, qui permet de faire des choses plus complexes: boucles, tests, logs, etc.
(la doc postgresql donne quelques tutos bien faits sur ces sujets:
http://www.postgresql.org/docs/current/ … c-sql.html
http://www.postgresql.org/docs/current/ … gsql.html)
Nico
Hors ligne