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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Sat 06 May 2017 09:10

Abdoulayi
Participant occasionnel
Date d'inscription: 5 Jan 2017
Messages: 10

SQL: recherche du plus court chemin en passant par un point précis.

Bonjour à tous,

Comme mon titre l'évoque, je cherche à trouver le plus court chemin, mais en empruntant à chaque fois, une voie intermédiaire (qui n'est pas toujours la même).

Pour cela, je dispose des milliers de données (il n'est donc pas question de chercher un par un le chemin le plus proche à chaque fois :-) )
Dans les différentes tables que je dispose, j'ai réussi à les grouper afin que je puisse avoir à chaque fois, un colonne des points de départs A, une sur les points d'arrivée B et un point intermédiaire C.

L'objectif est donc de lancer une requête SQL permettant pour chaque point de départ "A", passer par son point intermédiaire "C" et d'accéder au point d'arrivée "B", tout cela par le chemin de plus proche.
Je dispose bien évidemment d'un réseau routier qui me servir de chemin à emprunter.

Sur la documentation de Postgres, que j'utilise, j'ai trouvé un exemple comme ci-dessous mais il ne me parait pas suffit car à chaque fois, il faut insérer manuellement les différents points que je souhaite. Hors, cela parait impossible dans mon cas au vu de l'immensité des données que je dispose.

En vous remerciant en avance pour votre aide.

Exemple:

SELECT seq, id1 AS node, id2 AS edge, cost, geometry
FROM pgr_dijkstra('SELECT id,  source, target, cost
FROM table_a', 120, 500, false, false)             
AS di JOIN table_b
ON di.id2 = table_b.id

Hors ligne

 

#2 Mon 15 May 2017 13:55

JD
Moderateur
Date d'inscription: 8 Aug 2013
Messages: 726

Re: SQL: recherche du plus court chemin en passant par un point précis.

Bonjour,

à priori le chemin le plus court en entre A et B en passant par C
est la somme des plus courts chemins, entre A et C et entre C et B.

En passant par une sous-requête adaptée avec un UNION, vous devriez pouvoir
arrivé au résultat escompté ?

Qu'est-ce qui vous pose problème ?

Cordialement,

Hors ligne

 

Pied de page des forums

Powered by FluxBB