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

Printemps des cartes 2024

#1 Fri 03 February 2012 15:24

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

[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

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

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 wink

Y.
[edit] lu trop vite, les métadatas existent bien, mais le reste du message est utile pour retrouver des informations wink


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

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

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

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

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

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

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

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

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

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

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

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

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

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

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

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

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

SIGEAL
Participant assidu
Lieu: Saint Laurent des Combes
Date d'inscription: 5 Sep 2005
Messages: 195
Site web

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

 

Pied de page des forums

Powered by FluxBB