#1 Wed 10 June 2009 14:45
- ls
- Juste Inscrit !
- Date d'inscription: 10 Jun 2009
- Messages: 7
[mapserver] WFS et Postgis
Bonjour les gens,
Je souhaite utiliser mapserver pour fournir des services web à OL.
Dans mon mapfile, j'ai ça :
Code:
MAP NAME "mon mapfile" IMAGETYPE PNG24 SIZE 600 300 EXTENT 400000.0 1700000.0 800000.0 2100000.0 UNITS METERS IMAGECOLOR 255 255 255 SHAPEPATH "\ms4w\apps\mesdonnees\" TRANSPARENT ON WEB IMAGEPATH "c:/ms4w/apps/tempimg" IMAGEURL "./tempimg" METADATA #configuration WMS "wms_title" "mon WMS" "wms_onlineressource" "localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/simple.map&" "wms_srs" "epsg:32620" "wms_format" "image/png" #configuration WFS "wfs_title" "mon WFS" "wfs_onlineressource" "localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/simple.map&" "wfs_srs" "epsg:32620" END END PROJECTION "init=epsg:32620" END OUTPUTFORMAT NAME png DRIVER "GD/PNG" MIMETYPE "image/png" IMAGEMODE PC256 EXTENSION "png" TRANSPARENT ON END #couche vecteur limites des communes LAYER NAME "limcom" STATUS ON METADATA # pour WMS "wms_title" "limcomwms" # pour WFS "wfs_title" "limcomwfs" "gml_featureid" "nom" "gml_include_items" "all" END PROJECTION "init=epsg:32620" END DUMP TRUE TEMPLATE "bidon.html" TYPE POLYGON STATUS ON #DATA "limites_communes" #pour le SHP CONNECTIONTYPE postgis CONNECTION "user=postgres dbname=postgis_test password=adminbd host=localhost" DATA "the_geom from limites_communes" CLASS COLOR 50 180 50 OUTLINECOLOR 0 255 0 END END # Fin du layer (limites des communes) END # fin du mapfile
Si j'utilise le shape comme source du layer, ma couche s'affiche correctement dans OL en WMS et en WFS.
Si j'utilise la table postgis, ça fonctionne toujours pour le WMS, par contre le WFS ne renvoie rien, snif.
La requête http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\apps\simple.map&SERVICE=WFS&REQUEST=GetFeature&VERSION=1.1.0&TYPENAME=limcom
renvoie quand j'utilise la table postgis :
Code:
<wfs:FeatureCollection xsi:schemaLocation="http://mapserver.gis.umn.edu/mapserver localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/carte.map&?SERVICE=WFS&VERSION=1.1.0&REQUEST=DescribeFeatureType&TYPENAME=limcom&OUTPUTFORMAT=text/xml; subtype=gml/3.1.1 http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd"> − <gml:boundedBy> − <gml:Envelope srsName="epsg:32620"> <gml:lowerCorner>483771.832100 1750864.746560</gml:lowerCorner> <gml:upperCorner>713620.503486 2004044.982458</gml:upperCorner> </gml:Envelope> </gml:boundedBy> </wfs:FeatureCollection>
Il manque les données, c'est ballot. La même requête avec le shape comme source du layer renvoie bien la description de l'ensemble des données.
Keskispasse ? pourquoi mes objets ne s'affichent pas ?
Merci de votre aide
Loïc
PS : j'ai l'impression que ce sujet http://georezo.net/forum/viewtopic.php?id=60460 traite du même problème, mais la discussion dérive vers autre chose sans que le problème ait été résolu.
Dernière modification par ls (Wed 10 June 2009 14:47)
Hors ligne
#2 Wed 10 June 2009 14:55
Re: [mapserver] WFS et Postgis
Bonjour,
Quelle version de MapServer utilises tu ?
Non ce n'est pas le même problème. Je pencherai sur un problème de MapServer avec l'extent de la couche postgis. Surtout pour une version de MapServer < 5.0.0
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 Wed 10 June 2009 15:00
- ls
- Juste Inscrit !
- Date d'inscription: 10 Jun 2009
- Messages: 7
Re: [mapserver] WFS et Postgis
J'utilise la version 5.2.1.
Code:
C:\ms4w\Apache\cgi-bin>mapserv -v MapServer version 5.2.1 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=PDF OUTPUT=SWF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICO NV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=FASTCGI SUP PORTS=THREADS SUPPORTS=GEOS SUPPORTS=RGBA_PNG INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE
Hors ligne
#4 Wed 10 June 2009 16:51
- Guillaume Sueur
- Participant assidu
- Lieu: Toulouse
- Date d'inscription: 23 Sep 2005
- Messages: 331
- Site web
Re: [mapserver] WFS et Postgis
Bonjour
Puisque ça marche avec le Shape, on va se concentrer sur ce qui différencie les deux modes :
- ta couche postgis est-elle bien référencée en 32620 ?
- si tu fais "SELECT extent(the_geom) from limites_communes" dans la bd, obtiens-tu des valeurs correctes ?
- Si tu remplace ton DATA par "the_geom from (SELECT * from limites_communes) as foo USING UNIQUE gid USING SRID= 32620", est-ce que ça marche (en remplaçant gid par ta clé primaire éventuellement) ?
Tiens nous au courant, c'est toujours intéressant ces situations !
Guillaume
Hors ligne
#5 Wed 10 June 2009 17:44
- ls
- Juste Inscrit !
- Date d'inscription: 10 Jun 2009
- Messages: 7
Re: [mapserver] WFS et Postgis
Merci de prendre un peu de temps pour m'aider.
Donc, dans l'ordre :
- ta couche postgis est-elle bien référencée en 32620 ?
Les coordonnées de l'attribut the_geom sont bien en 32620; par contre, dans la table geometry_column, le srid de cet attribut est défini à -1. Si je lui affecte la valeur 32620, voici ce que retourne http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\apps\simple.map&SERVICE=WFS&REQUEST=GetFeature&VERSION=1.1.0&TYPENAME=limcom :
Code:
<ows:ExceptionReport version="1.1.0" xml:lang="en-US" xsi:schemaLocation="http://www.opengis.net/ows/1.1 http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd"> − <ows:Exception exceptionCode="mapserv" locator="NoApplicableCode"> − <ows:ExceptionText> msWFSGetFeature(): WFS server error. ms_error->code not found msPOSTGISLayerWhichShapes(): Query error. Error executing POSTGIS SQL statement (in FETCH ALL): DECLARE mycursor BINARY CURSOR FOR SELECT asbinary(force_collection(force_2d(the_geom)),'NDR'),OID::text from limites_communes WHERE the_geom && setSRID('BOX3D(-3.40282346638529e+038 -3.40282346638529e+038,3.40282346638529e+038 3.40282346638529e+038)'::BOX3D, find_srid('','limites_communes','the_geom') ) -ERROR: Operation on two geometries with different SRIDs msPOSTGISLayerRetrievePGVersion(): Query error. Error executing POSTGIS statement (msPOSTGISLayerRetrievePGVersion():select substring(version() from 12 for (position('on' in version()) - 13)) </ows:ExceptionText> </ows:Exception> </ows:ExceptionReport>
- si tu fais "SELECT extent(the_geom) from limites_communes" dans la bd, obtiens-tu des valeurs correctes ?
Oui, j'obtiens ça : "BOX(483771.8125 1750864.625,713620.5625 2004045)"
c'est cohérent, et c'est aussi ce qui apparaît dans la réponse à la requête (voir mon premier post), sauf que les valeurs sont arrondies.
- Si tu remplace ton DATA par "the_geom from (SELECT * from limites_communes) as foo USING UNIQUE gid USING SRID= 32620", est-ce que ça marche (en remplaçant gid par ta clé primaire éventuellement) ?
Là, je dois avouer que je ne comprends pas ce que je fais... gid est bien ma clé primaire, la requête http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\apps\simple.map&SERVICE=WFS&REQUEST=GetFeature&VERSION=1.1.0&TYPENAME=limcom retourne ça :
Code:
<ows:ExceptionReport version="1.1.0" xml:lang="en-US" xsi:schemaLocation="http://www.opengis.net/ows/1.1 http://schemas.opengis.net/ows/1.1.0/owsExceptionReport.xsd"> − <ows:Exception exceptionCode="mapserv" locator="NoApplicableCode"> − <ows:ExceptionText> msWFSGetFeature(): WFS server error. ms_error->code not found msPOSTGISLayerWhichShapes(): Query error. Error executing POSTGIS SQL statement (in FETCH ALL): DECLARE mycursor BINARY CURSOR FOR SELECT asbinary(force_collection(force_2d(the_geom)),'NDR'),gid::text from (SELECT * from limites_communes) as foo WHERE the_geom && setSRID('BOX3D(-3.40282346638529e+038 -3.40282346638529e+038,3.40282346638529e+038 3.40282346638529e+038)'::BOX3D, 32620 ) -ERROR: Operation on two geometries with different SRIDs </ows:ExceptionText> </ows:Exception> </ows:ExceptionReport>
En tout cas, au vu de tous ces messages d'erreur, la piste est bonne, et c'est sans doute de côté là (postgis) que vient le problème...
Hors ligne
#6 Wed 10 June 2009 17:55
Re: [mapserver] WFS et Postgis
Bonjour,
Il ne faut pas modifier directement la table geometry_columns ! ton erreur "-ERROR: Operation on two geometries with different SRIDs" vient de là !
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
#7 Wed 10 June 2009 18:33
- ls
- Juste Inscrit !
- Date d'inscription: 10 Jun 2009
- Messages: 7
Re: [mapserver] WFS et Postgis
Bonjour,
Ok, c'était effectivement une grosse bêtise de modifier à la main geometry_columns...
J'ai suivi la procédure décrite là : http://thesteve0.wordpress.com/2007/10/ … d-postgis/
Et maintenant ça marche, la requête retourne bien mes objets si j'utilise DATA sous cette forme :
DATA "the_geom from (SELECT * from limites_communes_bis) as foo USING UNIQUE gid USING SRID=32620"
Par contre avec :
DATA "the_geom from limites_communes_bis"
ça ne fonctionne pas (même retour de requête qu'au premier post, uniquement l'extent, sans les données)
Est-ce normal ? ou bien est-ce qu'il y a un autre problème quelque part ?
Merci
Hors ligne
#8 Wed 10 June 2009 21:05
- Guillaume Sueur
- Participant assidu
- Lieu: Toulouse
- Date d'inscription: 23 Sep 2005
- Messages: 331
- Site web
Re: [mapserver] WFS et Postgis
oui, c'est normal. Mais je pense que tu peux te contenter de
DATA "the_geom FROM limites_communes USING UNIQUE gid"
comme indiqué dans un autre post à propos du getFeatureInfo en WMS
Guillaume
Hors ligne
#9 Thu 11 June 2009 13:14
- ls
- Juste Inscrit !
- Date d'inscription: 10 Jun 2009
- Messages: 7
Re: [mapserver] WFS et Postgis
Bonjour,
OK, ça fonctionne correctement avec : DATA "the_geom FROM limites_communes USING UNIQUE gid".
Merci encore.
Loïc
Hors ligne