banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

GEODATA DAYS 2024

#1 Mon 13 December 2010 17:27

ppluvinet
Participant assidu
Lieu: LYON
Date d'inscription: 6 Aug 2007
Messages: 610

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: LYON
Date d'inscription: 6 Aug 2007
Messages: 610

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: 1538

Re: PGrouting : paramétrer une fonction

ppluvinet a écrit:

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;


smile)

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

 

Pied de page des forums

Powered by FluxBB