Suite

Problème dans pgRouting avec les données de google earth


Bonjour, je suis nouveau sur le forum et sur Postgesql, postgis et pgRouting. J'essaie de faire un pgrouting pour mes routes de la ville.

J'utilise googlemaps pour faire des lignes avec les coordonnées des routes et exporter les résultats dans un fichier kml. Exemple22.950164627408352,40.592917358186945 22.950657309819846,40.592514769916995

mais j'ai un problème avec l'insertion dans postgresql Les requêtes pour la table et la géométrie des routes.

CREATE TABLE roads( "id" entier CLE PRIMAIRE, "Nom" texte NON NULL, "Longueur (m)" numérique CHECK("Longueur (m)" > 0) ); SELECT AddGeometryColumn(",'roads','the_geom','4326','MULTILINESTRING',2) ;

Après avoir utilisé un insert comme celui-ci, mais j'ai un problème avec MULTILINESTRING

INSÉRER DANS LES VALEURS des routes(1,'Kwnn/nou Kanarh',1000,ST_SetSRID(ST_GeomFromKML(' 26.683023,37.7939654,0.0 26.6839457,37.7941011,0.0 26.6857266,37.7944063,0.0 26.687851,37.7948472,0.0 26.69034,37.7955084,0.0 26.6947603,37.7972888,0.0 26.6975284,37.7980687,0.0 26.6992879,37.7984926,0.0 26.701498,37.7993573,0.0 26.7026782,37.79989990000001,0.0 26.703794,37.8000355,0.0 26.7052317,37.8002729,0.0 26.7067122,37.8006375,0.0 26.7095018,37.8014089,0.0 '),4326));

Mettre à jour Après les insertions, je crée une topologie et d'autres étapes à partir de http://workshop.pgrouting.org/chapters/topology.html pour créer un pgRouting pour les données d'insertion, mais lorsque j'exécute lepgr_dijkstrala requête est

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

Donnez-moi cette erreur ERREUR : le sommet cible n'a pas été trouvé. je ne trouve pas la raison


Pour pgRouting, ce n'est pas une bonne idée d'avoir de "vraies" multi-géométries. Il vaut mieux n'utiliser queChaîneLigne.

De plus, votre géométrie KML contient unZvaleur, donc vous utilisez soit une géométrie 3D, soit vous utilisezST_Force_2Dignorer leZvaleurs. Sinon, il renverra une erreur du type "La géométrie a une dimension Z mais pas la colonne".

J'ai légèrement modifié votre SQL, et ceci devrait être un exemple fonctionnel :

CREATE TABLE roads( "id" serial, "name" text NOT NULL, "length" numérique CHECK("length" > 0), "the_geom" geometry("LineString",4326) );

… pour créer la table avec une colonne géométrique 2D LineString. Insérez ensuite un enregistrement avec :

INSÉRER DANS routes("nom","longueur","the_geom") VALEURS( 'Kwnn/nou Kanarh', 1000, ST_Force_2D( ST_SetSRID( ST_GeomFromKML(' 26.683023,37.7939654,0.0 26.6839457,37.7941011,0.0 26.6857266,37.7944063,0.0 26.687851,37.7948472,0.0 26.69034,37.7955084,0.0 26.6947603,37.7972888,0.0 26.6975284,37.7980687,0.0 26.6992879,37.7984926,0.0 26.701498,37.7993573,0.0 26.7026782,37.79989990000001,0.0 26.703794,37.8000355,0.0 26.7052317,37.8002729,0.0 26.7067122,37.8006375,0.0 26.7095018,37.8014089,0.0 ' ),4326) ) );


Voir la vidéo: make pgrouting problem (Octobre 2021).