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 Thu 04 April 2019 11:18

D3us
Participant actif
Date d'inscription: 6 Mar 2019
Messages: 57

Reconnaitre une edge table

Bonjour,

Je suis rendu au moment où je génère mon trajet avec QGIS à l'aide de l'algorithme de mon choix (a*, dijkstra etc...)
Sauf que cela ne fonctionne pas, alors je me demande si j'ai bien été sur la table, voilà ce que j'ai fait.
Après avoir intégré mon fichier osm a ma base de données avec osm2pgsql, j'ai lancer la génération de la topographie :

Code:

select pgr_createTopology('planet_osm_roads', 0.000001);

Puis j'ai lancé la requête suivante pour créer les colonnes qui me manquaient (source et target sont déjà présents) :

Code:

ALTER TABLE planet_osm_roads
    ADD COLUMN cost_len double precision,
    ADD COLUMN cost_time double precision,
    ADD COLUMN rcost_len double precision,
    ADD COLUMN rcost_time double precision,
    ADD COLUMN x1 double precision,
    ADD COLUMN y1 double precision,
    ADD COLUMN x2 double precision,
    ADD COLUMN y2 double precision,
    ADD COLUMN to_cost double precision,
    ADD COLUMN rule text,
    ADD COLUMN isolated integer;

Enfin j'ai rempli ces colonnes automatiquement avec différentes fonction (st_startpoint, st_length_spheroid etc...)

Code:

UPDATE planet_osm_roads SET x1 = st_x(st_startpoint(way)),
                      y1 = st_y(st_startpoint(way)),
                      x2 = st_x(st_endpoint(way)),
                      y2 = st_y(st_endpoint(way)),
  cost_len  = st_length_spheroid(way, 'SPHEROID["WGS84",6378137,298.25728]'),
  rcost_len = st_length_spheroid(way, 'SPHEROID["WGS84",6378137,298.25728]');
  


UPDATE planet_osm_roads SET
    cost_time = CASE
        WHEN oneway='TF' THEN 10000.0
        ELSE NULL
        END,
    rcost_time = CASE
        WHEN oneway='FT' THEN 10000.0
        ELSE NULL
        END;

Et quand je charge ma table dans QGIS avec pgroutingLayer, Cela me retourne "no path found in (U) dijkstra : [source] to [target]"
Donc je me demande si la "edge_table" ne serait pas une autre table que celle que j'ai choisi, d'où ma question : Comment reconnait on une edge table ?

Hors ligne

 

#2 Fri 12 April 2019 16:12

D3us
Participant actif
Date d'inscription: 6 Mar 2019
Messages: 57

Re: Reconnaitre une edge table

Bonjour,

Je poste la solution ici pour répondre aux futurs personnes ayant un problème similaire.
Premièrement, une edge_table est une table disposant de champs géométrique permettant la création de topologie.

Deuxièmement, il faut utiliser la fonction pgr_nodeNetwork() pour relier les jonctions de routes correctement entre elles, d'où le soucis de l'itinéraire non trouvé.

Hors ligne

 

#3 Tue 23 April 2019 11:51

Tanina234
Juste Inscrit !
Date d'inscription: 7 Nov 2018
Messages: 8

Re: Reconnaitre une edge table

Bonjour,

Je travaille sur le pgRouting ,  ce que je fais c'est que je crée ma colonne 'source' et 'target ' en premier avec un simple ALTER TABLE :

Code:

 ALTER TABLE matable
add "source" int8 ; 

ALTER TABLE matable
add "target" int8 ;

puis je crée ma topologie avec:

Code:

select pgr_createTopology('matable',1, 'geom', 'id', 'source', 'target', rows_where:= 'true', clean:= true);

après il faut faire attention au seuil de tolérance , ça doit matcher avec l'unité de la données!

:)

Dernière modification par Tanina234 (Tue 23 April 2019 11:52)

Hors ligne

 

#4 Fri 26 April 2019 10:32

D3us
Participant actif
Date d'inscription: 6 Mar 2019
Messages: 57

Re: Reconnaitre une edge table

Bonjour, oui j'ai déjà créé ma topologie, et du coup j'ai lancé

Code:

SELECT pgr_nodeNetwork('planet_osm_line', 0.001, 'osm_id' , 'way' , 'noded' );

Et ça fait 2 jours que ça tourne :'(

C'est normal ?

Hors ligne

 

Pied de page des forums

Powered by FluxBB