#1 Fri 31 July 2009 15:33
- abir_rzg
- Participant occasionnel
- Date d'inscription: 20 Jul 2009
- Messages: 15
Import/Affichage shapefile: PostgreSQL/PostGIS/MapServer
Bonjour,
A vrai dire, je me mêle vraiment les pinceaux en ce moment concernant Mapserver, PostGIS et PostgreSQL. En fait, mon boulo est l'import des données à partir de fichiers shp dans une base de données spatiale (càd PostgreSQL/PostGIS) puis afficher ces données avec Mapserver.
Je travaille sous Windows XP.
J'ai installé:
* Mapserver 2.3.1 (je ne sais pas si je dois faire une configuration en particulier pour utiliser MapServer avec PostGIS)
* Postgres Plus Advanced Server 8.3R2 avec PostGIS 1.3.5 (J'ai suivi la doc officielle de PostgreSQL)
En essayant d'appliquer:
1) J'arrive à créer une BD spatiale et la remplir avec des données avec des requêtes SQL simples
2) Quand j'essaie d'importer les données d'une liste de shapfile dans ma base avec le code suivant dans ma fenêtre MinGW après m'être placée dans le dossier contenant les shapefiles:
Code:
for i in $(find . | grep shp);do shp2pgsql -dDI $i $(basename $i .shp) | psql madatabase;done
j'ai cette erreur:
Code:
psql: FATAL: password authentication failed for user "Administrateur"
Et même si je voix bien qu'elle est liée à la connexion au serveur PostgreSQL, je ne trouve pas comment la résoudre.
3) J'ai essayé d'afficher avec MapServer les données que j'ai entrées avec une requête sql simple dans ma base mais j'ai l'erreur suivante que je ne sais pas comment résoudre même en considérant l'aide proposée dans le texte suivant l'erreur:
Code:
msDrawMap(): Image handling error. Failed to draw layer named 'parcours'. msPOSTGISLayerOpen(): Query error. Couldn't make connection to DB with connect string 'user=manager dbname=madatabase host=localhost'. Error reported was 'fe_sendauth: no password supplied '. This error occured when trying to make a connection to the specified postgresql server. Most commonly this is caused by (1) incorrect connection string (2) you didnt specify a 'user=...' in your connection string (3) the postmaster (postgresql server) isnt running (4) you are not allowing TCP/IP connection to the postmaster (5) your postmaster is not running on the correct port - if its not on 5432 you must specify a 'port=...' (6) the security on your system does not allow the webserver (usually user 'nobody') to make socket connections to the postmaster (7) you forgot to specify a 'host=...' if the postmaster is on a different machine (8) you made a typo
J'espère trouver un coup de main ici.
Merci.
Hors ligne
#2 Fri 31 July 2009 15:40
Re: Import/Affichage shapefile: PostgreSQL/PostGIS/MapServer
modifie psql madatabase; par psql madatabase -U postgres;
en gros par défaut il utilise le nom de la base comme nom d'utilisateur. s'il est différent spécifie le !
Concernant MapServer : je ne pense pas que tu utilises la version 2.3.1 ! La dernière est la 5.4.2
D'autre par dans le mapfile il faut définir le mdp :
Error reported was 'fe_sendauth: no password supplied '
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#3 Fri 31 July 2009 16:20
- abir_rzg
- Participant occasionnel
- Date d'inscription: 20 Jul 2009
- Messages: 15
Re: Import/Affichage shapefile: PostgreSQL/PostGIS/MapServer
Merci Yves pour ta réponse.. toujours près à aider.. J'admire
modifie psql madatabase; par psql madatabase -U postgres;
J'ai changé l'utilisateur comme tu me l'a indiqué mais j'ai toujours la même erreur. peut-être je dois spécifier le mot de passe avec l'utilisateur. Mais comment?
Concernant MapServer : je ne pense pas que tu utilises la version 2.3.1 ! La dernière est la 5.4.2
en fait la version 2.3.1 c'est la version du package binaire ms4w téléchargé sur cette page http://maptools.org/ms4w/index.phtml?pa … loads.html
D'autre par dans le mapfile il faut définir le mdp :
Error reported was 'fe_sendauth: no password supplied '
ici aussi je doit spécifier le mot de passe de l'utilisateur apparemment. Mais comment le faire dans le mapfile? Serait-ce dans cette ligne? et si oui comment?:
Code:
CONNECTION "user=manager dbname=madatabase host=localhost"
Hors ligne
#4 Fri 31 July 2009 16:35
Re: Import/Affichage shapefile: PostgreSQL/PostGIS/MapServer
Bonjour,
autre technique ;
Code:
su postgres
puis lance ton script.
pour Mapserver :
Code:
CONNECTION "user=manager dbname=madatabase host=localhost password=monMDP"
Y.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#5 Mon 03 August 2009 09:58
- abir_rzg
- Participant occasionnel
- Date d'inscription: 20 Jul 2009
- Messages: 15
Re: Import/Affichage shapefile: PostgreSQL/PostGIS/MapServer
Bonjour,
J'ai essayé une autre methode pour l'ajout des données du shape dans la base (j'ai utilisé une autre base et un autre shape):
Code:
psql testgis -U manager | shp2pgsql -dDI EXP_SEGMENT_FONCTIONNEL ams
en exécutant cette commande sur MinGW, la création de la table ams et l'ajout des données sont effectués. Le seul problème est que quand j'essai de voir le résultat à partir de Postgre Studio, il n'y a rien de nouveau dans ma base testgis! Comment savoir si les modifications ont été effectuées? Postgre Studio ne communique-t-il pas avec les mêmes bases manipulées à partir de MinGW?
Une autre remarque: à la fin de l'exécution de shp2pgsql -dDI EXP_SEGMENT_FONCTIONNEL ams MinGW me demande le mot de pase de l'utilisateur manager et quand je lui donnele mdp, le curseur fait un saut de ligne et se trouve au début d'une ligne vide (normalment il attend des requêtes sql uniquement dans ce mode) mais je ne sais pas comment revenir à la ligne de commande normale à partir de là.
Hors ligne
#6 Mon 03 August 2009 10:34
Re: Import/Affichage shapefile: PostgreSQL/PostGIS/MapServer
Bonjour,
La commande normale est celle-ci :
Code:
shp2pgsql -dDI EXP_SEGMENT_FONCTIONNEL ams | psql testgis -U manager
On créer les commandes sql avec shp2pgsql puis on l'envoie dans la commande psql.
Y.
PS : je déplace le thread dans le forum GeoBD.
Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !! - GeoRezo vous aide ? Aidez GeoRezo !
Hors ligne
#7 Mon 03 August 2009 12:01
- abir_rzg
- Participant occasionnel
- Date d'inscription: 20 Jul 2009
- Messages: 15
Re: Import/Affichage shapefile: PostgreSQL/PostGIS/MapServer
pour l'affichage des données j'ai mis le mot de passe comme tu as indiqué Yves et j'ai cette erreur:
msDrawMap(): Image handling error. Failed to draw layer named 'parcours'. prepare_database(): Query error. Error declaring cursor: ERROR: find_srid() - couldnt find the corresponding SRID - is the geometry registered in the GEOMETRY_COLUMNS table? Is there an uppercase/lowercase missmatch? With query string: DECLARE mycursor BINARY CURSOR FOR SELECT "id"::text,asbinary(force_collection(force_2d( line_substring)),'NDR'),id::text from (select '[ Parcours ]'::text as id , line_substring (the_geom ,0 ,0.716763707222655) from great_roads where data like '%Paul%') as foo WHERE line_substring && setSRID('BOX3D(-10 -11.5831663326653,10 11.5831663326653)'::BOX3D, find_srid('','great_roads',' line_substring') )
J'ai essayé de changer ma requète comme la solution indiquée dans l'erreur:
Code:
DECLARE mycursor BINARY CURSOR FOR SELECT "id"::text,asbinary(force_collection(force_2d( line_substring)),'NDR'),id::text from (select '[ Parcours ]'::text as id , line_substring (the_geom ,0 ,0.716763707222655) from great_roads where data like '%Paul%') as foo WHERE line_substring && setSRID('BOX3D(-10 -11.5831663326653,10 11.5831663326653)'::BOX3D, find_srid('','great_roads',' line_substring') )
mais il me donne cette erreur:
getString(): Symbol definition error. Parsing error near ( DECLARE mycursor BINARY CURSOR FOR SELECT ):(line 15)
Une idée?
Dernière modification par abir_rzg (Mon 03 August 2009 12:33)
Hors ligne
#8 Mon 03 August 2009 15:13
- abir_rzg
- Participant occasionnel
- Date d'inscription: 20 Jul 2009
- Messages: 15
Re: Import/Affichage shapefile: PostgreSQL/PostGIS/MapServer
Hello there!
Finalement l'import des données du shapefile a marché quand j'ai utilisé la ligne de commande DOS et non MinGW! Apparement il y avait un problème quelque part là.
Pour l'affichage, ça a aussi marché finalement avec une requête moins compliquée et à partir des données que je viens d'importer.
En résumé pour les débutants comme moi que ça interesse:
Préparer PostgreSQL pour accueillir une BD spatiale:
Copier les fichiers suivants vers les destinations mentionnées:
%EDB_HOME%\spatial\lib\liblwgeom.dll -> %EDB_HOME%\dbserver\lib
%EDB_HOME%\spatial\lib\libgeos-2.dll -> %EDB_HOME%\dbserver\bin
%EDB_HOME%\spatial\lib\libgeos_c-1.dll -> %EDB_HOME%\dbserver\bin
%EDB_HOME%\spatial\share\* -> %EDB_HOME%\dbserver\share\contrib
définier les variables d'environnements relatives à psql et shp2pgsql car nous allons les utiliser en ligne de commande DOS.
Mettre en place la BD spatiale:
à partir de l'interpretteur de commande EDB-PSQL ou bien à partir de PostGres Studio (Outil->Editeur de requête) créer une nouvelle BD puis exécuter pour cette BD les fichiers sql suivants:
%EDB_HOME%\dbserver\share\contrib\lwpostgis.sql
%EDB_HOME%\dbserver\share\contrib\spatial_ref_sys.sql
Importer les données d'un shapefile:
taper en ligne de commade DOS
Code:
shp2pgsql -dDI chemin_du_shapefile\nom_du_shapefile nom_de_la_table | psql nom_de_la_BD -U nom_de_lutilisateur
Afficher les données stockées dans la base:
définier le mapfile comme suit:
Code:
MAP IMAGETYPE PNG EXTENT #définir les extents comme trouvées dans les infos en tapant dans la ligne de commande de mapserver [b]ogrinfo -al -so chemin_du_shapefile\nom_du_shapefile.shp[/b] SIZE 400 300 IMAGECOLOR 255 255 255 LAYER CONNECTION "user=_nom_utilisateur dbname=nom_BD host=localhost password=mdp_utilisateur" CONNECTIONTYPE POSTGIS NAME nom_du_layer DATA "the_geom from (select * from nom_table) foo USING UNIQUE gid" STATUS DEFAULT TYPE LINE #on le défini selon le type de données du shapefile trouvées dans les infos en tapant dans la ligne de commande de mapserver [b]ogrinfo -al -so chemin_du_shapefile\nom_du_shapefile.shp[/b] CLASS NAME 'nom_de_la_classe' STYLE COLOR 32 32 32 END END END END
ensuite pour exécuter le mapfile et afficher les données sur le navigateur taper l'url suivant:
Code:
http://localhost:num_du_port_du_serveur_apache_de_mapserver/cgi-bin/mapserv.exe?map=chemin_du_mapfile/nom_du_mapfile.map&layer=nom_du_layer&mode=map
Hors ligne