#1 Fri 20 July 2012 16:40
- martin.baussier
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 22 Sep 2007
- Messages: 69
mapserver & geojson
Bonjour,
Nous avons plusieurs tables stockées dans Postgis et nous souhaiterions utiliser MapServer pour générer des flux GeoJson afin de récupérer ceux-ci avec OpenLayers et manipuler les données avec Jquery.
J'ai donc fais une petite recherche et j'ai bien ajouter le bloc OUTPUTFORMAT suivant dans mon MapFile :
Code:
OUTPUTFORMAT NAME 'geojson' DRIVER 'TEMPLATE' MIMETYPE 'application/json; subtype=geojson' FORMATOPTION 'FILE=myTemplate.js' END
ainsi que le template (dans un fichier à côté) :
Code:
[resultset layer=commune] { "type": "FeatureCollection", "features": [ [feature trimlast=","] { "type": "Feature", "id": "[oid]", "geometry": { "type": "Polygon", "coordinates": [ { "type": "Point", "coordinates": [[x], [y]] } ] }, "properties": { "code_insee": "[code_insee]" } }, [/feature] ] } [/resultset]
Et enfin je test le tout avec ces deux requêtes côté navigateur client :
Code:
http://srvsig01:1111/cgi-bin/mapserv.exe?MAP=C:\\OSgeo\\apache\\htdocs\\mapfile\\test.map&SERVICE=WFS&VERSION=1.0.0&REQUEST=GetFeature&typename=commune&OUTPUTFORMAT=geojson
ou
Code:
http://srvsig01:1111/cgi-bin/mapserv.exe?MAP=C:\\OSgeo\\apache\\htdocs\\mapfile\\test.map&MODE=MAP&OUTPUTFORMAT=geojson
Et bien entendu, je récupère, dans le premier cas, toujours gml (dans du wfs) et dans le second cas une image blanche !
Auriez vous des liens sur de la doc, une idée ..., une petite phrase d'encouragement, pour m'aider à avancer ?
Merci d'avance et un très bon week-end à la communauté,
Martin BAUSSIER
Technicien SIG
Communauté d'agglomération de Sophia-Antipolis
Martin Baussier
Institut national de l'origine et de la qualité (INAO)
Chargé de mission géomatique (Service Délimitation - BDDC)
Hors ligne
#2 Fri 20 July 2012 19:50
- michel56
- Participant assidu
- Lieu: Lorient
- Date d'inscription: 14 Jul 2012
- Messages: 474
Re: mapserver & geojson
Tu peux faire une requête PostGis et récupérer directement le flux GeoJSON avec ST_AsGeoJSON().
http://postgis.org/docs/ST_AsGeoJSON.html
Opérateur cartographique & DAO & PHP.
Hors ligne
#3 Sat 21 July 2012 00:09
Re: mapserver & geojson
Salut,
Ta version de Mapserver est bien un 6.x? Pour les versions 5.x, il faut normalement passer par un appel CGI pour que ça marche
Code:
http://srvsig01:1111/cgi-bin/mapserv.exe?MAP=C:\\OSgeo\\apache\\htdocs\\mapfile\\test.map&layer=commune&mode=nquery&qformat=geojson
sinon pour la version 6.x c'est par un appel WFS (qui marche chez moi) avec un exemple d'appel identique au vôtre.
Par contre, pensez à changer
Code:
"coordinates": [[x], [y]]
par
Code:
"coordinates": [[[shpxy]]]
vu que vous semblez vouloir retourner des polygones
Cordialement
ThomasG
Hors ligne
#4 Mon 23 July 2012 10:23
- martin.baussier
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 22 Sep 2007
- Messages: 69
Re: mapserver & geojson
Merci pour ces infos qui me permettent de redémarrer la semaine un peu plus serein.
Et merci également pour la réactivité qui me surprend à chaque fois...
Pour la première solution "Template dans MapServer":
J'ai tenté de relancer la fonction CGI après avoir fait la correction du type de coordonnées ([[[shpxy]]]) suggérée par ThomasG .
Le résultat est alors le suivant :
Code:
Content-type: text/html <HTML> <HEAD><TITLE>MapServer Message</TITLE></HEAD> <!-- MapServer version 5.6.6 OUTPUT=GIF OUTPUT=PNG OUTPUT=JPEG OUTPUT=WBMP OUTPUT=SWF OUTPUT=SVG SUPPORTS=PROJ SUPPORTS=AGG SUPPORTS=FREETYPE SUPPORTS=ICONV SUPPORTS=FRIBIDI SUPPORTS=WMS_SERVER SUPPORTS=WMS_CLIENT SUPPORTS=WFS_SERVER SUPPORTS=WFS_CLIENT SUPPORTS=WCS_SERVER SUPPORTS=SOS_SERVER SUPPORTS=THREADS SUPPORTS=RGBA_PNG INPUT=JPEG INPUT=POSTGIS INPUT=OGR INPUT=GDAL INPUT=SHAPEFILE --> <BODY BGCOLOR="#FFFFFF"> isValidTemplate(): Web application error. Missing magic string, myTemplate.js doesn't look like a MapServer template. </BODY></HTML>
Malheureusement l’exécutable osGeo pour Windows installe visiblement une version de MapServer un peu obsolète :-(
Je me tourne donc vers la seconde solution "l'interrogation directe de Postgis avec la fonction ST_AsGeoJSON(geom)" tel que Michel56 le propose:
Serait il possible de récupérer également dans la réponse en GeoJson les données attributaires ???
Visiblement d'après la documentation Potsgis je n'ai pas l'impression. il faudrait peut être envisager de faire deux requêtes une pour la géométrie, l'autre pour les données attributaires et créer la fonction qui génére le tableau JSON mais j'avoue que je n'avais pas prévu de partir la dedans...
Qu'en pensez vous ?
Martin BAUSSIER
Technicien SIG
Communauté d'agglomération de Sophia-Antipolis
Dernière modification par martin.baussier (Mon 23 July 2012 10:25)
Martin Baussier
Institut national de l'origine et de la qualité (INAO)
Chargé de mission géomatique (Service Délimitation - BDDC)
Hors ligne
#5 Mon 23 July 2012 11:40
- michel56
- Participant assidu
- Lieu: Lorient
- Date d'inscription: 14 Jul 2012
- Messages: 474
Re: mapserver & geojson
Oui, tu peux récupérer tes données attributaires dans la même requête.
Tu fais un script PHP ou Python et tu récupères ce que tu veux dans ta requête SQL. (C'est une requête normale + ST_AsGeoJSON(geom))
Attention, pour un affichage sur internet, le flux ne doit pas être trop important.
Quant à: ASP NET?
Cordialement.
Dernière modification par michel56 (Mon 23 July 2012 11:47)
Opérateur cartographique & DAO & PHP.
Hors ligne
#6 Mon 23 July 2012 15:33
- martin.baussier
- Participant actif
- Lieu: Montpellier
- Date d'inscription: 22 Sep 2007
- Messages: 69
Re: mapserver & geojson
Effectivement je viens de comprendre l'utilisation de la fonction ST_AsGeoJSON.
Merci pour les renseignements,
Martin BAUSSIER
Martin Baussier
Institut national de l'origine et de la qualité (INAO)
Chargé de mission géomatique (Service Délimitation - BDDC)
Hors ligne
#7 Mon 23 July 2012 17:35
Re: mapserver & geojson
Bonjour,
Pour info, bien que vous sembliez déjà avoir fait votre choix sur l'erreur Mapserver voir la doc
cf http://www.mapserver.org/development/rf … ight=magic
Cordialement
ThomasG
Hors ligne