#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