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

State Of The Map 2024

#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

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9861
Site web

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

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9861
Site web

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

 

Pied de page des forums

Powered by FluxBB