Annonce
Suite à un problème technique intervenu entre le 22 et le 23 mars, nous avons du procéder dans la soirée du 25 mars, à la restauration de la base de données du 24 mars (matinée).
En clair, nous avons perdu vos contributions et inscriptions du dimanche 24 et du lundi 25 mars.
Nous vous prions de nous excuser.
#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