Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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

Printemps des cartes 2024

#1 Tue 07 June 2016 14:40

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

[PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Bonjour à tous et toutes,

Je travaille actuelle avec PgAdmin et plus précisemment l'extension pgrouting afin de calculer la distance du plus court chemin entre tous les terminaux GNL du monde.
J'ai donc créé un "grid" mondial qui est une grille évitant les continents (étant donné que les bateaux transportant le GNL doivent évidemment passer seulement par les zones maritimes).
J'ai une table de points qui sont les terminaux GNL.
J'ai lié tous ces points au grid avec un st_shortestline, obtenant une table de shorteslines.
Afin de créer le réseau complet (table "network") qui lierait chaque terminal GNL entre eux à travers le monde, j'ai donc fait une union entre la table du "grid" original et les "shortestline".
Une fois ce network créé, j'ai lancé la création de la topologie telle que :

Code:

ALTER TABLE network
ADD COLUMN source integer,
ADD COLUMN target integer,
ADD COLUMN cost double precision,
ADD COLUMN x1 double precision,
ADD COLUMN y1 double precision,
ADD COLUMN x2 double precision,
ADD COLUMN y2 double precision;

UPDATE network
SET x1=st_x(st_startpoint(geom)),
y1=st_y(st_startpoint(geom)),
x2=st_x(st_endpoint(geom)),
y2=st_y(st_endpoint(geom));

CREATE INDEX network_idx ON network USING gist (geom);

SELECT pgr_createTopology('network', 0.000000001, 'geom', 'id');

Cela me créé donc une table "network_vertices_pgr".
Mon souhait était de réaliser l'algorithme pgr_dijkstra d'un terminal GNL vers un autre terminal GNL, et ce pour chaque couple de terminaux.
Pour ce faire, j'ai créé une table intermédiraire ("table_correspondance") qui me permettait d'identifier quel id de la table "network_vertices_pgr" correspondait à chaque terminal.
Ainsi, je réalisais pgr_dijkstra entre l'id d'un de mes terminaux, et l'id d'un autre de mes terminaux.
Seulement, j'ai remarqué que l'algorithme ne me donnait des résultats que pour certains couples source/target.
De nombreux couples (environ 3/4 de ceux que je veux étudier) renvoient des résultats vides, sans raison.
Par exemple l'instruction suivante renvoie un résultat vide :

Code:

SELECT seq, id1 AS node, id2 AS edge, cost
FROM pgr_Dijkstra('SELECT id, source, target, cost, x1, y1, x2, y2 FROM network', 20, 50, FALSE, FALSE);

J'ai utilisé pgr_kdijkstra pour visualiser ensuite sur qgis les couples source/target dont les routes étaient bien calculées, car je croyais au début à un défaut du grid (des sources rattachées à éléments isolés du grid auraient pu donner des résultats vides). Cependant, j'ai remarqué en regardant sur qgis, que, pour la même source, certaines target (terminal GNL) étaient traitées, alors qu'une autre target proche géographiquement et étant reliée correctement au grid, n'était mystérieusement pas traitée.
Et effectivement, quand je lancais pgr_dijkstra sur ces target loupées, le résultat était et demeure désespérément vide.
Il reste sans doute des éléments du network qui sont isolés, mais les source/target n'y sont pas attachées, j'ai pu le vérifier, donc j'avoue ne pas comprendre d'où vient le problème.
J'ai refait des procédures plusieurs fois et j'obtient toujours le même problème.
J'ai également vérifié que chaque élément de ma "table_correspondance" (qui représente tous mes terminaux GNL) correspond bien à un élément dans la table "network_vertices_pgr" (qui représente chaque noeud du réseau).
Et si ce n'est pas un problème de discontinuité du réseau, ni un problème de source/target, je ne vois vraiment pas d'où vient le problème.
D'autant plus que lorsque je réalise un pg_analyzegraph sur mon network, il me renvoie que le réseau est ok.

Il y a un point cependant qui peut poser problème, même si je ne verrais pas vraiment pourquoi :
Lorsque je créé mon network et ensuite lance la topologie, il y a des éléments où les colonnes "source" et "target" ne sont pas remplis par le pgr_createTopology.
Or pg_dijkstra exigeait que je supprime ces éléments avant de lancer un calcul, car il ne veut pas d’élément sans source dans la table network, même si ces éléments ne sont pas concernés par le calcul présent.
Donc je les efface de la table network.

J'ai essayé d'être le plus précis possible sans m'étaler trop longuement, donc n'hésitez pas si vous avez des questions sur mes procédures non détaillées ou bien si j'ai été trop confus.
Auriez-vous des indications qui pourraient m'aider à comprendre d'où vient le problème?

Merci d'avance

Dernière modification par Nugg_00 (Tue 07 June 2016 15:11)

Hors ligne

 

#2 Wed 08 June 2016 09:07

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Bonjour,
Un sujet passionnant !

Le premier élément qui m'intrigue c'est la colonne cost. Cette colonne représente le coût du trajet c'est à dire que lorsque l'on cherche le trajet le plus court il faut faire un calcul de la colonne avec sa longueur

Code:

UPDATE TABLE set cost = st_length(the_geom)

Si cette colonne n'est pas remplie cela signifie que tous les segments ont la même longueur.

Le deuxième élément qui pique les yeux c'est dans la commande de création de la topologie

Code:

SELECT pgr_createTopology('network', 0.000000001, 'geom', 'id');

La valeur 0.000000001 c'est la tolérance. Cette notion de tolérance est très importante. Je m'explique : avec une tolérance à 1 m cela signifie que deux extrémités de tronçon distantes de moins d'1m seront considérées confondues et donc lorsque on va réalisé le calcul, le tracé va pouvoir passer d'un tronçon à l'autre. Cette tolérance c'est à vous de la fixer en fonction de l'étendue de vos données et de la qualité de vos données. A l'échelle du monde un tolérance de 1 me semble convenable voir plus même, actuellement vous êtes à 1 millionième de millimètres.

Enfin qu'appelez vous un grid, c'est une grille avec un pas régulier ?
--
Nicolas GRANIER

Hors ligne

 

#3 Wed 08 June 2016 09:53

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Nicolas Granier a écrit:

Bonjour,
Un sujet passionnant !

Le premier élément qui m'intrigue c'est la colonne cost. Cette colonne représente le coût du trajet c'est à dire que lorsque l'on cherche le trajet le plus court il faut faire un calcul de la colonne avec sa longueur

Code:

UPDATE TABLE set cost = st_length(the_geom)

Si cette colonne n'est pas remplie cela signifie que tous les segments ont la même longueur.

Le deuxième élément qui pique les yeux c'est dans la commande de création de la topologie

Code:

SELECT pgr_createTopology('network', 0.000000001, 'geom', 'id');

La valeur 0.000000001 c'est la tolérance. Cette notion de tolérance est très importante. Je m'explique : avec une tolérance à 1 m cela signifie que deux extrémités de tronçon distantes de moins d'1m seront considérées confondues et donc lorsque on va réalisé le calcul, le tracé va pouvoir passer d'un tronçon à l'autre. Cette tolérance c'est à vous de la fixer en fonction de l'étendue de vos données et de la qualité de vos données. A l'échelle du monde un tolérance de 1 me semble convenable voir plus même, actuellement vous êtes à 1 millionième de millimètres.

Enfin qu'appelez vous un grid, c'est une grille avec un pas régulier ?
--
Nicolas GRANIER


Merci pour votre réponse.

Pour la colonne "cost", j'ai omis de l'indiquer, mais je la remplie avec une valeur arbitraire, qui est la même pour toutes. (par exemple '1')
Maintenant que vous soulevez la question, il est vrai que je devrais plutôt remplir cette colonne avec la longueur de chaque segment.
La maille unitaire de mon grid est un carré avec les diagonales tracées. Et j'ai du modifier à la main certains segments (le grid a été découpé avec un tracé des continents très (trop?) précis, du coup certains petites iles près des côtés isolaient certains (nombreux) segments du reste du grid.

En ce qui concerne la tolérance, le grid originel a été créé segment par segment par incrémentation de 25 km sur le monde avec postgis. (Cela a pris 3 jours pour des segments unitaires de 25 km.
Donc (il y a eu quelques changements, mais assez peu), tous les segments sont déjà clipsés entre eux par création...d'où la tolérance extrêmement faible, car il n'y a pas besoin de les joindre. Donc je ne pense pas que cela pose vraiment de problème, sauf pour certains segments que j'ai retouché à la main et qui sont peut être mal clipsés, mais souvent près des cotes, donc ils ne devraient pas bloquer le calcul par l'algorithme.

Hors ligne

 

#4 Wed 08 June 2016 10:30

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Détrompez vous la tolérance est bien le nerf de la guerre.
La valeur 0.0000001 que vous avez renseignée va passer dans tous les algorithmes de calcul de routage autant vous dire que s'il y a des arrondis, le résultat va quelque peu dérivé.

le grid originel a été créé segment par segment par incrémentation de 25 km


Avec une grille de 25Km vous pourriez même mettre une tolérance de 1000 (1 Km) ca fonctionnerait. Je vous conseille de faire un test avec une tolérance à 10m déjà.

Avec la colonne cost =1, vous indiquez au module de routage qu'une arête de votre grille est aussi grande qu'une diagonale de la grille, donc vous pouvez avoir des surprises avec le résultat. Si vous n'aviez que la grille sans les diagonales cela devrait tout de même marcher.

Je reviens sur la question de la tolérance. Vous pouvez faire un test. La table "network_vertices_pgr" est la table de noeuds entre les segments. Pour que les segments sont considérés comme joint par pgrouting, il faut qu'il n'existe qu'un seul noeud entre deux segments. S'il y a deux noeuds c'est que les segments ne sont pas considérés comme jointifs.

Faite un buffer à 1cm sur les noeuds et comptez ensuite le nombre de noeuds dans les buffers. Si vous en avez plus d'un c'est que vous avez des coupures donc pas de continuité.
A+
Nicolas GRANIER

Hors ligne

 

#5 Wed 08 June 2016 14:41

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Le gros problème que j'ai, et je viens d'en faire l'expérience en réalisant une topologie de tolérance 10 au lieu des 0.0000000001, c'est que la topologie est fausse ainsi.
Je vous joins à ce post une illustration sur une parcelle de mon grid. Avec une tolérance de 10, j'obtiens très peu de noeuds, donc un réseau erroné.
Avec 0.0000000001 j'obtiens en revanche tous les noeuds corrects du réseau.

Hors ligne

 

#6 Wed 08 June 2016 15:39

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Quelle est la projection de vos données ?

Hors ligne

 

#7 Wed 08 June 2016 15:51

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

EPSG 4326

Par contre j'ai mis un fichier joint, mais il n’apparaît pas, est-ce normal?

Hors ligne

 

#8 Wed 08 June 2016 16:19

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

oui effectivement en 4326, les unités de votre tolérance ne sont pas des mètres mais surement des degrés décimaux
D'après Google et Wikipédia 0.0001° correspond à 7.9m donc ce serait pas mal comme tolérance.

Selon le workshop de pgrouting2 (http://workshop.pgrouting.org/chapters … h-dijkstra) , vous pouvez vous faciliter la vie sans recreéer les colonne x1,y2,...

SELECT seq, id1 AS node, id2 AS edge, cost FROM pgr_dijkstra('
                SELECT gid AS id,
                         source::integer,
                         target::integer,
                         length::double precision AS cost
                        FROM ways',
                30, 60, false, false);

Hors ligne

 

#9 Thu 09 June 2016 09:53

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

L'ensemble de mes requêtes est très long, mais si vous souhaitez l'examiner pour y déceler mon erreur, je peux la poster.

Ne trouvant pas l'erreur, j'ai lancé la création d'un nouveau grid à maille plus fine avec pgadmin. Au lieu de 0.25 unités comme précédemment (ce qui, mesuré en km dans qgis avec une projection 4236, donne environ 27 km pour un segment d'un côté du carré de la maille), j'ai mis 0.025 unités.
Cela devrait donner un grid assez fin pour éviter qu'une fois découpé par les continents, certains segments restent isolés du grid.
Cela m'évitera de retoucher à la main sur QGIS ensuite les segments pour reconnecter les zones isolées.
Parce que j'ai beau chercher, je ne vois pas d'où vient l'erreur. Pour 2 points proches du réseaux, l'un peut être traité et l'autre non, alors qu'il y a une liaison entre eux! C'est clairement visible sur QGIS :

J'ai lancé un kDijkstra d'un point à de nombreux point m’intéressant.
Voici un zoom sur une partie du résultat:
Les petits points violet sont les noeuds du réseau créés par le pgr_createTopology.
Les plus gros points verts sont les points du réseau qui m'interessent (qui me donnent les id dans la table vertices des points que je veux comme Source/Target)
http://hpics.li/e56e77c
Comme vous pouvez le voir, certains points ont un résultat, tandis que d'autres non, alors qu'il n'y a pas de discontinuité du grid entre eux.
Autre chose intrigante, le résultat (path) de l'algo va parfois jusqu'au point, parfois s'arrête un segment avant (je pense qu'il s'agit des shortestlines créées pour joindre les point au grid. Mais elles sont intégrées au réseau sinon l'aglo ne fonctionnerait pas pour ces points). Étrange.

Voici un autre résultat, encore plus parlant car on voit très bien que les point sont bien connectés au grid et pourtant ne sont pas traités :
http://hpics.li/7e23bae

Dernière modification par Nugg_00 (Thu 09 June 2016 10:19)

Hors ligne

 

#10 Thu 09 June 2016 11:58

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

La tolérance à 0.025 me semble bien en effet.

pour le cas des tracés (résultat) qui s'arrêtent juste avant le point vert : je pense que vous sélectionner les tronçons par leur champ source ou target, il vous faut faire votre sélection des segments par l'identifiant. D'après votre requête c'est le champ id

Code:

SELECT pgr_createTopology('network', 0.000000001, 'geom',[b] 'id'[/b]);

Vérifier qu'il soit bien compléter. nommer le toujours id si vous devez le recréer afin d'éviter les problèmes.

pour les points qui ne paraissent pas connectés ( ou aucun tracé n'est réalisé) : chargez toutes vos données dans Qgis. Est-ce-que le tronçon qui jouxte le point vert porte t'il bien dans sa colonne source ou target l'id du vertice du point vert ? Il faut bien comprendre qu'une fois la topologie créée tous les algos tournent de manière attributaire, il n'y a plus de géographie (d'où l'importance de la tolérance au départ)

Sinon joignez moi un extrait de réseau (avec la topologie créée), les vertices sur ces points, un point vert qui pose problème et un exemple de votre requete de chemin de + court.

Hors ligne

 

#11 Thu 09 June 2016 12:37

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Voila l'exemple pour un bout du réseau.
On voit que l'id du point est bien renseigné en Source.
Par contre ce n'est pas une Target.
Mais apparemment ce n'est pas le cas non plus pour ceux ou ca marche

http://hpics.li/3b58bdb

Hors ligne

 

#12 Thu 09 June 2016 14:10

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Peut importe que le segment inverse le source ou le target, cela peut avoir de l'importance quand vous travaillez sur un réseau particulier (rue à sens unique par exemple) mais dans votre cas cela n'a pas d'importance.

Avez vous essayé les selections des trajets sur les id et non les sources / target ?

Dernière modification par Nicolas Granier (Thu 09 June 2016 14:47)

Hors ligne

 

#13 Thu 09 June 2016 14:54

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Nicolas Granier a écrit:

Peut importe que le segment inverse le source ou le target, cela peut avoir de l'importance quand vous travaillez sur un réseau particulier (rue à sens unique par exemple) mais dans votre cas cela n'a pas d'importance.

Avez vous essayé les selections des trajets sur les id et non les sources / target ?


Je ne suis pas sur d'avoir compris la question, désolé?
Quand je veux effectuer pgr_dijkstra sur un trajet, je
SELECT seq, id1 AS node, id2 AS edge, cost
FROM
pgr_Dijkstra('SELECT id, source, target, cost, x1, y1, x2, y2 FROM network', 1128, 290, FALSE, FALSE);

Ici par exemple il s'agit donc de calculer le plus court chemin entre les noeuds dont l'id est 1128 pour la Source et 290 pour la Target dans la table network_vertices.

Hors ligne

 

#14 Thu 09 June 2016 16:02

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Ici par exemple il s'agit donc de calculer le plus court chemin entre les noeuds dont l'id est 1128 pour la Source et 290 pour la Target dans la table network_vertices.


Je n'aurai pas dit ca.
Dans votre requete il s'agit de calculer le plus court chemin entre le noeud de la table network_vertices ayant l'id 1128, vers le noeud ayant l'id 290.
Il n'y a pas de colonne source et target dans la table de noeud seulement dans la table de réseau topologique.

pour faire cela les algorythmes de routage vont chercher dans la table de réseau (une fois la topologie crée bien sur) les colonnes source et target  où source = id du noeud OU target = id du noeud puis cherche le + court chemin vers la destination (sur le même pricipe. Le resultat renvoyé par la requete n'est pas l'id source ou l'id target du troncon mais l'identifiant (une autre colonne) du tronçon. Les tronçons de topologie doivent avoir leur propre id.

Dernière modification par Nicolas Granier (Thu 09 June 2016 16:03)

Hors ligne

 

#15 Thu 09 June 2016 16:36

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Nicolas Granier a écrit:

Ici par exemple il s'agit donc de calculer le plus court chemin entre les noeuds dont l'id est 1128 pour la Source et 290 pour la Target dans la table network_vertices.


Je n'aurai pas dit ca.
Dans votre requete il s'agit de calculer le plus court chemin entre le noeud de la table network_vertices ayant l'id 1128, vers le noeud ayant l'id 290.
Il n'y a pas de colonne source et target dans la table de noeud seulement dans la table de réseau topologique.

pour faire cela les algorythmes de routage vont chercher dans la table de réseau (une fois la topologie crée bien sur) les colonnes source et target  où source = id du noeud OU target = id du noeud puis cherche le + court chemin vers la destination (sur le même pricipe. Le resultat renvoyé par la requete n'est pas l'id source ou l'id target du troncon mais l'identifiant (une autre colonne) du tronçon. Les tronçons de topologie doivent avoir leur propre id.


id est une clef primaire de la table network, donc chaque troncon a son propre id.
Par contre je ne vois pas quelle est la syntaxe pour lancer algorithme non pas sur les Source/Target, mais sur les id des tronçons de la table network...auriez-vous une idée de comment faire cela?
J'ai le manuel en pdf mais ce n'est apparemment pas indiqué.

Hors ligne

 

#16 Thu 09 June 2016 17:01

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

id est une clef primaire de la table network, donc chaque troncon a son propre id.


oui c'est exact

La requête que vous passez est bonne, c'est juste que l'on ne se comprend pas.

Quand vous faite la création de la topologie, la table de vertice se crée et les champs source et target de la table de réseau se remplissent.
Un vertice est une extrémité de tronçon qui est commune avec le tronçon voisin. L'identifiant id du vertice est attribué au fur et à mesure de la création de la table vertice. Une requete spatiale est ensuite faite entre les tronçons et les vertices pour affecter les id de vertices dans les colonnes source et target de la table de tronçons. Votre table tronçon contient donc pour chaque tronçon, l'identifiant des deux id de vertices aux extrémités.

La requete de plus court chemin va d'un vertice à un autre. Vous pouvez interroger 2 vertices, recupérer leur identifiant, et lancer votre requete de routage avec ces deux valeurs. Le resultat retourné doit vous donner non pas des identifiant de vertices, mais des identifiants de troncons.

Je vais essayer de vous faire un schéma.

Hors ligne

 

#17 Fri 10 June 2016 08:40

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Voici la première illustration
pour afficher les images completement, il vous faire faire un clic droit afficher l'image ou enregistrer l'image car sur mon poste sous firefox elles sont tronquées

J'ai un segment avec l'id 111263 qui a dans sa table attributaire les colonnes source et target  avec les id des vertices bien renseignés

Les étiquettes en noir sont les identifiants des tronçons.
Les étiquettes en roses sont les identifiants des vertices

Dernière modification par Nicolas Granier (Fri 10 June 2016 08:50)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#18 Fri 10 June 2016 08:47

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

et voici la deuxième illustration.
Je vous ai volontairement laissé les commandes postgis de création du réseau topologique

Dans ce grand gribouillage, j'illustre le tracé du plus court chemin entre le vertice id 124991 et l'id 95760.
Noter au passage que j'ai simplifié la commande pgr_dijkstra en enlevant les x1,x2,...
Le résultat qui m'intéresse est la colonne edge qui me renvoie les identifiants de tronçons composant le parcours entre les deux vertices.
Enfin dans Qgis je fais un sélection manuelle de ces tronçons et le trajet apparait bien.

Si sur ca on est en accord et on se comprend, on pourra peut être trouvé ce qui ne marche pas chez vous.

Dernière modification par Nicolas Granier (Fri 10 June 2016 08:48)


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

Hors ligne

 

#19 Fri 10 June 2016 13:15

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

D'accord oui merci je comprends beaucoup mieux ce que vous vouliez dire. Je ne savais pas qu'on pouvait se passer des x1, x2, y1, y2, c'est bon à savoir!
Je n'ai jamais vérifié visuellement les résultats sur QGIS pour dijkstra simple, seulement pour kdijkstra, car beaucoup de résultats étaient vides lorsque je lancais l'algorithme dans pgadmin.

Mon nouveau grid est apparemment terminé. Il faut encore que je le découpe pour ne garder que les segments couvrant les zones maritimes.
D'ailleurs le fichier est tellement gros que je galère actuellement rien que pour le transférer d'un ordi à un autre ^^

Hors ligne

 

#20 Fri 10 June 2016 14:18

Nicolas Granier
Participant assidu
Date d'inscription: 19 Apr 2007
Messages: 271

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Je pense que vous pouvez poster un sujet sur la volumétrie des données et les temps de traitements, il y a des gens sur le forum qui vous aideront à optimiser vos requêtes et même votre configuration. J'ai moi-même réduit un traitement de découpage de 6H à 8 secondes avec grâce à l'aide un membre... mais cela est un autre sujet.

Hors ligne

 

#21 Fri 01 July 2016 09:41

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Bonjour,

Je reviens après quelques temps, j'avais mis en forme mon 'network' ou j'avais réuni mon grid principal créé à 0.025, et les shortestlines liant mes points au grid principal.
Cela avait l'air de fonctionner, j'avais lancé le :
SELECT  pgr_createTopology('network',0.00001,'geom','id','source','target');

Cela semblait bien se dérouler mais au bout de 6 jours et la fin du processus...le résultat était FAIL.
C'est particulièrement frustrant au bout de 6 jours, je ne comprends même pas comment un processus qui analyse au début puis procède peut ensuite dérouler tranquillement et signaler l'échec au bout de 6 jours, bref...
J'ai essayé de lancer un :
SELECT pgr_analyzeGraph('network',0.001,'geom','id','source','target');
Mais cela me renvoi immédiatement un "FAIL", et je comprends pas pourquoi??
Je suis désespéré étant donné le temps que cela m'a pris, pourriez-vous m'indiquer d'où peut provenir l'erreur?

Hors ligne

 

#22 Fri 01 July 2016 10:57

atilio
Participant actif
Lieu: Brest
Date d'inscription: 17 Jan 2006
Messages: 80

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Est-ce que vous avez regardé l'onglet Messages de la fenêtre résultat SQL? Vous avez un FAIL dans la fenêtre SORTIE DES DONNEES mais en principe vous avez la description de l'erreur dans l'onglet MESSAGES
C'ast vrai qu'avec seulement FAIL on n'est pas prêts de comprendre pourquoi.

Hors ligne

 

#23 Fri 01 July 2016 11:04

atilio
Participant actif
Lieu: Brest
Date d'inscription: 17 Jan 2006
Messages: 80

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Je viens de rejoindre le forum et je n'avais pas tout lu de vos échanges. J'ai une appli qui fait du routage pour la navigation de plaisance côtière. Mes tronçons ont entre 300m et 3km et pour générer ma topologie une précision de 0.001 est suffisante (ça représente autour de 100m)

Hors ligne

 

#24 Fri 08 July 2016 09:51

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

atilio a écrit:

Est-ce que vous avez regardé l'onglet Messages de la fenêtre résultat SQL? Vous avez un FAIL dans la fenêtre SORTIE DES DONNEES mais en principe vous avez la description de l'erreur dans l'onglet MESSAGES
C'ast vrai qu'avec seulement FAIL on n'est pas prêts de comprendre pourquoi.


Bonjour,

Je reviens vers vous étant donné que mon pgr_createtopology a encore "FAIL".
Cette fois j'ai donc regardé le message et il marque :

Code:

NOTICE:  268430000 edges processed
NOTICE:  268431000 edges processed
NOTICE:  268432000 edges processed
NOTICE:  268433000 edges processed
NOTICE:  268434000 edges processed
NOTICE:  268435000 edges processed
ATTENTION:  AbortSubTransaction while in COMMIT state
CONTEXT:  fonction PL/pgsql pgr_createtopology(text,double precision,text,text,text,text,text,boolean), ligne 206, lors du nettoyage de l'exception
NOTICE:  nombre maximum de sous-transactions validées (268435455) dépassé
NOTICE:  UPDATE public.network SET source = 67243911,target = 67253315 WHERE id =  206793583
ATTENTION:  AbortSubTransaction while in COMMIT state
CONTEXT:  fonction PL/pgsql pgr_createtopology(text,double precision,text,text,text,text,text,boolean), ligne 38, lors du nettoyage de l'exception
NOTICE:  Unexpected error nombre maximum de sous-transactions validées (268435455) dépassé

Total query runtime: 6 days, 09:8653:32408 hours
1 row retrieved.

Je suppose que le réseau est trop important, existe t-il un moyen pour tout de même créer la topologie ou bien faut il définitivement prendre un grid moins détaillé? (et donc avec moins d'élements)

Merci d'avance!

Hors ligne

 

#25 Fri 08 July 2016 11:45

atilio
Participant actif
Lieu: Brest
Date d'inscription: 17 Jan 2006
Messages: 80

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Vous avez manifestement un problème d'adéquation machine/logiciel/données
Vos données sont trop volumineuses pour la configuration de votre Postgresql et/ou votre machine n'est pas à la hauteur.
Il doit y avoir une valeur de paramétrage dans le fichier postgresql.conf pour augmenter le nombre de transactions (mais j'ai regardé et ce n'est pas direct, on doit devoir modifier un paramètre avec un nom qui n'a rien à avoir)
Mais de toutes façons, un process qui dure 6 jours c'est que votre config matérielle n'est pas ce qu'il faut (il doit y avoir du swapping en pagaille)
Bref! Vous pouvez essayer d'augmenter les valeurs par défaut du fichier conf, mais si vous devez attendre 6 jours pour savoir si ça marche.....
Mais ça ne présage rien de bon pour la recherche de route avec pgr_dijkstra: où vous avez des petits trajets et vous pouvez utiliser un système de bbox pour réduire le nombre de tronçons utilisés par l'algorithme ou vous aurez à attendre des jours pour avoir un trajet!

Hors ligne

 

#26 Wed 13 July 2016 10:43

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Bonjour,

J'ai repris mon grid moins détaillé, qui est bon, j'ai fait mon pgr_createtopology qui a marché.
J'ai donc lancé :

Code:

SELECT seq, id1 AS node, id2 AS edge, cost
FROM
pgr_Dijkstra('SELECT id, source, target, cost, x1, y1, x2, y2 FROM network', 1128, 290, FALSE, FALSE);

Mais j'obtiens :

Code:

NOTICE:  Deprecated function
Total query runtime: 15.2 secs
0 rows retrieved.

Je ne comprends pas mon erreur, pourriez-vous m'aider pour repérer mon erreur ici?
Je ne comprends pas pourquoi elle est "deprecated"...

Dernière modification par Nugg_00 (Wed 13 July 2016 10:47)

Hors ligne

 

#27 Wed 13 July 2016 11:08

atilio
Participant actif
Lieu: Brest
Date d'inscription: 17 Jan 2006
Messages: 80

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Quelle est la version de pgrouting que vous utilisez?
(SELECT pgr_version()wink

Hors ligne

 

#28 Wed 13 July 2016 11:17

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

atilio a écrit:

Quelle est la version de pgrouting que vous utilisez?
(SELECT pgr_version()wink


"(2.2.0,pgrouting-2.2.0,afc622e,master,1.59.0)"

Hors ligne

 

#29 Wed 13 July 2016 11:18

atilio
Participant actif
Lieu: Brest
Date d'inscription: 17 Jan 2006
Messages: 80

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Autre chose, même si je ne pense pas que ce soit la raison du problème: vous n'avez pas besoin de x1,y1,x2,y2 pour pgr_dijkstra. Ces champs sont utilisés par un autre algorithme (pgr_astar)

Hors ligne

 

#30 Wed 13 July 2016 12:00

Nugg_00
Participant occasionnel
Date d'inscription: 7 Jun 2016
Messages: 32

Re: [PostGIS] Problème de résultat pgr_dijkstra - Pgrouting

Même si je ne fais pas intervenir x1, y1, x2, y2

Code:

SELECT seq, id1 AS node, id2 AS edge, cost
FROM
pgr_Dijkstra('SELECT id, source, target, cost FROM network', 694, 966, FALSE, FALSE);

J'obtiens encore :

Code:

NOTICE:  Deprecated function
Total query runtime: 12.5 secs
0 rows retrieved.

Ma version de pgrouting est :

"(2.2.0,pgrouting-2.2.0,afc622e,master,1.59.0)"

Dernière modification par Nugg_00 (Wed 13 July 2016 12:00)

Hors ligne

 

Pied de page des forums

Powered by FluxBB