#1 Fri 03 February 2012 15:24
[OpenLayers 2.11] Affichage WMS / MapServer
Bonjour,
J'essaie sans succès d'afficher un WMS produit par MapServer.
Mon environnement est un serveur dédié virtuel sous Ubuntu.
Il s'agit d'un tout simple fichier Shape en WGS84 (EPSG:4326).
Voici le MapFile :
Code:
MAP NAME "essai_wms" SIZE 800 600 EXTENT 1.936506 48.715488 2.105538 48.799863 STATUS ON UNITS METERS SHAPEPATH "/var/www/mapserver/data" IMAGECOLOR 255 255 255 IMAGETYPE PNG WEB METADATA "wms_title" "essai_wms" "wms_onlineresource" "http://xxx/cgi-bin/mapserv?map=/var/www/mapfiles/essai_mswms.map&" "wms_srs" "EPSG:4326" "wms_format" "image/png" "wms_enable_request" "*" END END PROJECTION "init=epsg:4326" END LAYER NAME "com_layer" DATA "com_layer" STATUS ON TYPE POLYGON PROJECTION "init=epsg:4326" END METADATA "wms_title" "com_layer" "wms_srs" "EPSG:4326" END CLASS NAME "com_layer" STYLE COLOR 232 232 232 OUTLINECOLOR 32 32 32 END END END END
Et voici le code javascript :
Code:
var map = new OpenLayers.Map("map", { controls:[ new OpenLayers.Control.Navigation(), new OpenLayers.Control.PanZoomBar(), new OpenLayers.Control.LayerSwitcher(), new OpenLayers.Control.Attribution(), new OpenLayers.Control.MousePosition() ], maxResolution: "auto", projection: new OpenLayers.Projection("EPSG:4326") }); var ol_layer = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0", {layers: "basic"} ); map.addLayer(ol_layer); com_layer = new OpenLayers.Layer.WMS("com_layer", "http://http://xxx/cgi-bin/mapserv?map=/var/www/mapfiles/essai_mmswms.map&", {layers: "com_layer", isBaseLayer: false } ); map.addLayer(com_layer); map.zoomToMaxExtent();
J'obtiens bien le fond de carte, mais pas ma couche supplémentaire de communes, qui pourtant est bien présente dans le LayerSwitcher et s'affiche bien lorsque je charge le wms dans QGIS ou bien directement le navigateur par l'url suivante :
Code:
http://xxx/cgi-bin/mapserv?map=/var/www/mapfiles/essai_mswms.map&layer=com_layer&mode=map
Merci de votre aide,
Christophe Damour (SIGéal)
Hors ligne
#2 Fri 03 February 2012 15:31
Re: [OpenLayers 2.11] Affichage WMS / MapServer
Christophe,
Il manque les métadatas dans la couche. Test ton GetCapabilities http://monhost?map=XXX&REQUEST=GetCapabilities&VERSION=1.3.0&SERVICE=WMS et corrige les problèmes à l'aides des messages en commentaire.
Tu peux aussi utiliser firebug pour obtenir les url des tuiles dans OpenLayers pour voir le message d'erreur si nécessaire.
Je te laisse faire une recherche dans le wiki
Y.
[edit] lu trop vite, les métadatas existent bien, mais le reste du message est utile pour retrouver des informations
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 03 February 2012 18:31
Re: [OpenLayers 2.11] Affichage WMS / MapServer
Bonjour Yves,
Merci pour ta réponse.
Elle va m'aider car je n'avais pas pensé à utiliser l'onglet Réseau de Firebug !
Du coup j'ai pu corriger un premier problème dans l'url du mapfile (http redoublé).
En testant directement l'url d'une tuile donnée par Firebug, j'obtiens l'erreur suivante :
Code:
msLoadMap(): Unable to access file. (/var/www/mapfiles/essai_mmswms.map)
Je pense donc que mon problème est lié aux droits d'accès sur le mapfile ou le dossier dans lequel il se trouve.
Pour le moment je n'ai pas encore trouvé la bonne configuration...
As-tu des conseils en la matière ?
Christophe Damour (SIGéal)
Hors ligne
#4 Sun 05 February 2012 16:13
Re: [OpenLayers 2.11] Affichage WMS / MapServer
Bonjour,
Es tu sur que le chemin vers le fichier est correct ?
Tu peux faire un test un peu bourrin avec chmod -R a+r /var/www/. Si cela fonctionne tu peux revenir à des droits plus restrictifs.
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 Sun 05 February 2012 17:17
Re: [OpenLayers 2.11] Affichage WMS / MapServer
Le chemin était correct, mais effectivement j'ai du modifier les droits et le propriétaire du dossier dans lequel je mets mes mapfiles. Par ailleurs, il y avait un autre problème dans mon mapfile : UNITS METERS alors que le srs est 4326...
Ces corrections faites, j'ai réussi à faire à visualiser ma couche dans openlayers, et à la superposer à un fond en 4326.
Je progresse donc...
Je suis donc passé à un essai plus compliqué avec une couche POSTGIS en 4326, que je voudrais superposer à un fond osm en 900913.
Voilà ce que j'ai essayé qui me semble correspondre à ce que disent les docs :
Code:
MAP NAME "essai_wms" SIZE 800 600 EXTENT 1.936506 48.715488 2.105538 48.799863 STATUS ON IMAGECOLOR 255 255 255 IMAGETYPE PNG WEB METADATA "wms_title" "essai_wms" "wms_onlineresource" "http:/***/cgi-bin/mapserv?map=/var/www/mapfiles/essai_mswms_4326.map&" "wms_srs" "EPSG:4326 EPSG:900913" "wms_format" "image/png" END END PROJECTION "init=epsg:4326" END LAYER DEBUG ON NAME "communes " CONNECTIONTYPE POSTGIS CONNECTION "user=*** password=*** dbname=*** host=localhost port=5432" DATA "the_geom from communes using unique gid using srid=4326" STATUS DEFAULT TYPE POLYGON PROJECTION "init=epsg:4326" END METADATA "wms_title" "communes " "wms_srs" "EPSG:4326 EPSG:900913" # "wms_extent" "1.936506 48.715488 2.105538 48.799863" END CLASS NAME "communes " STYLE COLOR 232 232 232 OUTLINECOLOR 32 32 32 END END END END
Malheureusement, je n'obtiens aucun affichage sous openlayers.
Lorsque je vérifie le GetCapabilities, je constate qu'il y a un souci avec les bounding box :
Code:
<Layer> <Name>essai_wms</Name> <Title>essai_wms</Title> <Abstract>essai_wms</Abstract> <SRS>EPSG:4326</SRS> <SRS>EPSG:900913</SRS> <LatLonBoundingBox minx="1.93651" miny="48.7155" maxx="2.10554" maxy="48.7999" /> <BoundingBox SRS="EPSG:4326" minx="1.93651" miny="48.7155" maxx="2.10554" maxy="48.7999" /> <Layer queryable="0" opaque="0" cascaded="0"> <Name>communes</Name> <Title>communes</Title> <SRS>EPSG:4326</SRS> <SRS>EPSG:900913</SRS> <LatLonBoundingBox minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" /> <BoundingBox SRS="EPSG:4326" minx="-2.5e+07" miny="-2.5e+07" maxx="2.5e+07" maxy="2.5e+07" />
As-tu une idée de ce qui ne va pas ?
Christophe Damour (SIGéal)
Hors ligne
#6 Sun 05 February 2012 18:04
Re: [OpenLayers 2.11] Affichage WMS / MapServer
Bonjour,
Je ne vois pas ce qui pourrait poser problème dans le mapfile. Que donne l'url demandée par OpenLayers ?
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 Sun 05 February 2012 18:21
Re: [OpenLayers 2.11] Affichage WMS / MapServer
L'url appelée par OpenLayers est la suivante :
Code:
http://***/cgi-bin/mapserv?map=/var/www/mapfiles/essai_mswms_4326.map&
Si je la complète avec la clause layer et le mode map, la couche s'affiche parfaitement dans le navigateur.
Code:
http://***/cgi-bin/mapserv?map=/var/www/mapfiles/essai_mswms_4326.map&layer=communes&mode=map
Lorsque je charge la page openlayers, firebug me donne l'url suivante :
Code:
http://***/cgi-bin/mapserv?map=/var/www/mapfiles/essai_mswms_4326.map&LAYERS=communes&TRANSPARENT=TRUE&ISBASELAYER=false&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&STYLES=&FORMAT=image%2Fpng&SRS=EPSG%3A900913&BBOX=-180,-90,40074836.68,40074926.68&WIDTH=256&HEIGHT=256
Le problème est certainement lié à cette bounding box farfelue...
Christophe Damour (SIGéal)
Hors ligne
#8 Sun 05 February 2012 18:43
Re: [OpenLayers 2.11] Affichage WMS / MapServer
Christophe,
As tu adapté ton code JavaScript ? Par défaut OpenLayers prend des valeurs en WGS84 pour la bbox. Il faut donc "lui" dire que tu es en 900913 pour la projection et lui donner une bbox cohérente (en 900913).
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
#9 Sun 05 February 2012 19:31
Re: [OpenLayers 2.11] Affichage WMS / MapServer
J'ai les lignes suivantes dans le code de création de l'objet Map :
Code:
units: "m", projection: new OpenLayers.Projection("EPSG:900913")
Que veux-tu dire par "lui donner une BBOX cohérente (en 900913)" ?
J'ai essayé de remplacer ma clause EXTENT dans le mapfile par des coordonnées en 900913, mais ça n'a rien changé...
Christophe Damour (SIGéal)
Hors ligne
#10 Sun 05 February 2012 20:10
Re: [OpenLayers 2.11] Affichage WMS / MapServer
Bonsoir,
Pas dans le mapfile, dans l'objet map d'OpenLayers :
http://dev.openlayers.org/docs/files/Op … .maxExtent
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
#11 Sun 05 February 2012 20:17
Re: [OpenLayers 2.11] Affichage WMS / MapServer
Yesss !
Merci mille fois pour ton aide dominicale, Yves.
En synthèse, j'ai résolu mon problème comme suit :
- En rendant l'utilisateur apache propriétaire du dossier des mapfiles.
- En supprimant la clause UNITS METER (incompatible avec le srs 4326) dans le mapfile.
- En précisant dans mon code openlayers une bouding box cohérente avec ce que renvoie le mapfile wms, mais exprimée dans les coordonnées compatibles avec le srs de l'objet map openlayers (900913) :
Code:
maxExtent: new OpenLayers.Bounds(215570.837459, 6226722.756288, 234387.367578, 6240970.351355)
Je poursuis mes investigations.
Prochaine étape : passer au serveur WFS.
Dernière modification par SIGEAL (Thu 16 February 2012 07:31)
Christophe Damour (SIGéal)
Hors ligne