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 Thu 18 April 2013 12:25

Achref_geo
Participant actif
Date d'inscription: 19 Feb 2012
Messages: 107

Pgrouting et SRID pour les données OSM

Salut tout le monde,

J'ai besoin de votre aide pour pouvoir résoudre mon problème, j'ai utilisé une version en Java de l'outil osm2pgrouting qui permet de travailler sous Windows, j'ai réussi à importer ma couche routière dans la base de données et je vous joint une capture d’écran de ma table "route" (remarque: j'ai minimisé la largeur de plusieurs colonnes pour pouvoir capturer la table entière).
En suivant le Workshop de pgrouting http://workshop.pgrouting.org/ , je veux maintenant à travers un script PHP (y compris des requêtes de routage) faire appel à ma couche routière pour l'afficher avec OpenLayers.
Le script PHP est le suivant:
Code PHP:

Code:

<?php

   // Database connection settings
   define("PG_DB"  , "routing");
   define("PG_HOST", "localhost"); 
   define("PG_USER", "postgres");
   define("PG_PORT", "5432"); 
   define("TABLE",   "route");

   // Retrieve start point
   $start = split(' ',$_REQUEST['startpoint']);
   $startPoint = array($start[0], $start[1]);

   // Retrieve end point
   $end = split(' ',$_REQUEST['finalpoint']);
   $endPoint = array($end[0], $end[1]);
   
?>

<?php

   // Find the nearest edge
   $startEdge = findNearestEdge($startPoint);
   $endEdge   = findNearestEdge($endPoint);

   // FUNCTION findNearestEdge
   function findNearestEdge($lonlat) {

      // Connect to database
      $con = pg_connect("host=localhost dbname=adel user=postgres password=21952339");

      $sql = "SELECT gid, source, target, geom_way, 
                  ST_Distance(geom_way, ST_GeometryFromText(
                       'POINT(".$lonlat[0]." ".$lonlat[1].")', 4326)) AS dist 
                 FROM ".route."  
                 WHERE geom_way && setsrid(
                       'BOX3D(".($lonlat[0]-0.1)." 
                              ".($lonlat[1]-0.1).", 
                              ".($lonlat[0]+0.1)." 
                              ".($lonlat[1]+0.1).")'::box3d, 4326) 
                 ORDER BY dist LIMIT 1";

      $query = pg_query($con,$sql);  

      $edge['gid']      = pg_fetch_result($query, 0, 0);  
      $edge['source']   = pg_fetch_result($query, 0, 1);  
      $edge['target']   = pg_fetch_result($query, 0, 2);  
      $edge['geom_way'] = pg_fetch_result($query, 0, 3);  

      // Close database connection
      pg_close($con);

      return $edge;
   }
   
?>

En exécutant le code j'obtient le message d'erreur suivant:
Code:

Code:

Warning: pg_query() [function.pg-query]: Query failed: ERREUR: Invalid OGC WKT (too short) in C:\OSGeo4W\apache\htdocs\web\php\pgrouting.php on line 43
Warning: pg_fetch_result(): supplied argument is not a valid PostgreSQL result resource in C:\OSGeo4W\apache\htdocs\web\php\pgrouting.php on line 45

J'ai compris qu'il s'agit d'un problème de projection et que je dois travailler avec l'EPSG : 900913, tout d'abord est ce que j'ai bien compris ??
Maintenant j'essai de changer le SRID dans la colonne "geom_way" et je n'arrive pas, voici la requête update que j'utilise:
Code:

Code:

UPDATE route SET geom_way  = ST_SetSRID(geom_way, 900913);

Et voici le message d'erreur :
Code:

Code:

[WARNING  ] UPDATE route SET geom_way  = ST_SetSRID(geom_way, 900913)
            ERREUR:  la nouvelle ligne viole la contrainte de vérification « route » de la relation « enforce_srid_geom_way »

j'ai posté dans Forum SIG mais je n'ai pas eu de réponse, j'espère que vous pourriez m'aider
Merci beaucoup


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

Hors ligne

 

#2 Thu 18 April 2013 14:17

Nicolas Ribot
Membre
Lieu: Toulouse
Date d'inscription: 9 Sep 2005
Messages: 1536

Re: Pgrouting et SRID pour les données OSM

Bonjour,

Pour changer le srid de votre table, vous devez d'abord supprimer la contrainte sur le SRID, puis mettre a jour, puis remettre la contrainte:

Code:

alter table route drop constraint enforce_srid_geom_way;
update route set geom = ...
alter table route add constraint enforce_srid_geom_way (CHECK (st_srid(geom) = 900913));

Nicolas

Hors ligne

 

#3 Thu 18 April 2013 15:41

Achref_geo
Participant actif
Date d'inscription: 19 Feb 2012
Messages: 107

Re: Pgrouting et SRID pour les données OSM

Bonjour Nicolas et merci pour ta réponse,

J'ai fait ce qu'il faut, j'ai supprimé la contrainte sur le SRID, je l'ai mis à jour et ensuite j'ai remis la nouvelle contrainte "900913" mais ça n'a rien changé, le message d'erreur reste le même. Faut-t-il que les valeurs de x1 y1 x2 y2 changent du géographique en métriques ?? c'est ce que j'ai vu dans ce poste http://download.osgeo.org/pgrouting/for … c/251.html en comparant les deux captures de la table:
- "dbase.jpg" : avant la mise à jour du champ géométrique
et
- "dbase900913.jpg" : après mise à jour du champ géométrique

Est ce que ça peut avoir une influence ?

Merci

Dernière modification par Achref_geo (Thu 18 April 2013 15:42)


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

Hors ligne

 

#4 Fri 19 April 2013 22:19

cherubin12
Juste Inscrit !
Date d'inscription: 19 Apr 2013
Messages: 1

Re: Pgrouting et SRID pour les données OSM

salut à tous, j'ai besoin de votre aide. je suis en PFE pour la creation d'un sig pour le cadastre. et j'ai des dificukté de creer un champs media qui me peemettra d'attribuer une image sur chaque parcell.

Hors ligne

 

Pied de page des forums

Powered by FluxBB