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é ?

#1 Wed 24 June 2009 13:38

BBarthur
Participant actif
Date d'inscription: 17 Jun 2009
Messages: 57

[Mapserver] WMS changer de projection

Bonjour

Mon MapServer sert un WMS actuellement en epsg 4326. J'aimerais pouvoir le changer en epsg 21781, car les cartes sont aplaties. Je suis un peu perdu dans mon mapfile, sachant que j'ai des attributs PROJECTION ou encore wms_srs un peu partout.

Voici à quoi ressemble mon mapfile:

Code:

MAP

 OUTPUTFORMAT
   NAME png
   DRIVER "GD/PNG"
   MIMETYPE "image/png"
   IMAGEMODE RGB
   EXTENSION "png"
   FORMATOPTION "INTERLACE=OFF"
 END

 NAME "Essai"
 EXTENT -180 -90 180 90
 IMAGECOLOR 255 255 255
 IMAGETYPE png
 SIZE 400 300
 STATUS ON
 UNITS METERS
 MAXSIZE 4000
 PROJECTION
  "init=epsg:4326"
 END

 WEB
   IMAGEPATH "..."
   IMAGEURL "..."
   METADATA
     "wms_title"           "WMS Essai"
     "wms_onlineresource"  "http://localhost/cgi-bin/mapserv?map=/.../mapfile.map&"
     "wms_srs"             "EPSG:4326"
   END
 END

 LAYER
   DATA "..."
   NAME "..."
   PROJECTION
     "init=epsg:21781"
   END
   METADATA
     "wms_title"           "..."
     "wms_srs"             "EPSG:4326"
   END
   STATUS ON
   TYPE RASTER
   UNITS METERS
 END

END

Ce mapfile fonctionne, mais lorsque je fais des modifs, soit le client me donne une erreur de srs, soit ça ne change rien.

Une idée ?

Merci

Hors ligne

 

#2 Wed 24 June 2009 13:45

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

Re: [Mapserver] WMS changer de projection

Bonjour,

Il faut réaliser deux choses pour que cela fonctionne :
1. permettre au serveur carto la reprojection, pour cela dans le mapfile il faut lui lister les projections autorisées :

Code:

"wms_srs"             "EPSG:4326 EPSG:21781"

(de mémoire)
2. il faut demander la projection désirée dans la requête envoyée au serveur WMS : LAYERS=babla&SRS=EPSG:21781

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 24 June 2009 13:48

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

Re: [Mapserver] WMS changer de projection

Bonjour,


Voici un exemple complet de MapFile pour un serveur WMS avec la configuration pour la reprojection :
http://mapserver.org/ogc/wms_server.htm … er-mapfile

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

 

#4 Wed 24 June 2009 15:23

BBarthur
Participant actif
Date d'inscription: 17 Jun 2009
Messages: 57

Re: [Mapserver] WMS changer de projection

Yves a écrit:

1. permettre au serveur carto la reprojection, pour cela dans le mapfile il faut lui lister les projections autorisées :

Code:

"wms_srs"             "EPSG:4326 EPSG:21781"


Ajouté à mon mapfile.

Yves a écrit:

2. il faut demander la projection désirée dans la requête envoyée au serveur WMS : LAYERS=babla&SRS=EPSG:21781


Pour cela, j'imagine que MapFish/OpenLayers s'en occupent via:

Code:

map = new OpenLayers.Map('mymap', { projection: "EPSG:21781", ...

Non ?

Malgré tout cela, le résultat est le même. Je fais évidemment attention à modifier les bounds dans mon code JS et l'extent dans le mapfile avec des coordonnées correspondant à cet epsg, mais rien n'y fait.

Hors ligne

 

#5 Wed 24 June 2009 15:35

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

Re: [Mapserver] WMS changer de projection

Bonjour,

il faut peut être vider le cache du navigateur wink

Tu peux tester ton service WMS directement sans passer par OpenLayers histoire de voir si ta couche s'affiche correctement.

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

 

#6 Wed 24 June 2009 16:04

BBarthur
Participant actif
Date d'inscription: 17 Jun 2009
Messages: 57

Re: [Mapserver] WMS changer de projection

Le cache du navigateur n'y est pour rien apparemment.

Par contre,  je me demande si ce n'est pas mon map.setcenter(new OpenLayers.LonLat(...),...) qui pose problème, puisque je suis en epsg 21781 et plus en 4326. J'ai essayé de mettre des coordonnées en 21781 dedans mais c'est pareil. Il faut utiliser une autre fonction ?

Hors ligne

 

#7 Wed 24 June 2009 16:08

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

Re: [Mapserver] WMS changer de projection

Bonjour,

Vous devez définir la projection de la carte (objet map) et des couches (objects layers) dans la même projection. Il est toutefois possible de reprojeter des couches via OpenLayer (mais plus complexe).

Il vaut mieux garder une projection commune pour toute vos couches et réaliser la reprojection côté serveur.

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

 

#8 Wed 24 June 2009 16:22

BBarthur
Participant actif
Date d'inscription: 17 Jun 2009
Messages: 57

Re: [Mapserver] WMS changer de projection

Admettons que mon WMS soit entièrement en epsg 21781. Côté client, je dois avoir:

Code:

map = new OpenLayers.Map('mymap', { projection: "EPSG:21781", ...

ça c'est juste ?

Si oui, comment je fais mon map.setcenter(new OpenLayers.LonLat(...),...) ? Avec des coordonnées en 21781 ? ou malgré tout en 4326 ?

J'avoue que je suis un peu perdu dans tout ça.... et ça m'agace furieusement de passer une demi-journée sur un truc à priori très simple.

Hors ligne

 

#9 Wed 24 June 2009 16:26

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

Re: [Mapserver] WMS changer de projection

Bonjour,

Je pense qu'il faut aussi définir la projection de la carte

Code:

var options = {
        projection: new OpenLayers.Projection("EPSG:21781"),
        units: 'm',
    };
    map = new OpenLayers.Map('map', options);

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

 

#10 Wed 24 June 2009 17:47

BBarthur
Participant actif
Date d'inscription: 17 Jun 2009
Messages: 57

Re: [Mapserver] WMS changer de projection

YESSS !!

Merci Yves !

à l'origine de mes tracas d'une après-midi entière: le units:'m'

Pas besoin de déclarer le new OpenLayers.Projection(...), le simple projection: 'EPSG:21781' suffit.

Encore merci, problème résolu !

Hors ligne

 

#11 Wed 08 July 2009 21:13

chec
Juste Inscrit !
Date d'inscription: 18 Apr 2007
Messages: 1

Re: [Mapserver] WMS changer de projection

Pourriez vous  indiquer à la communauté comment vous avez réussi à résoudre votre problème

Hors ligne

 

#12 Wed 08 July 2009 21:45

BBarthur
Participant actif
Date d'inscription: 17 Jun 2009
Messages: 57

Re: [Mapserver] WMS changer de projection

Très volontiers, bonjour quand même.

Eh bien comme je l'indique deux messages plus haut, le problème venait apparemment du fait que je ne spécifiais pas les unités à openlayers. Voilà.
Je précise que je ne reprojette pas mes données, contrairement à ce que le titre du topic pourrait laisser croire.

Bon allez, je vais être un peu plus précis. Dans mon mapfile, j'ai:

Code:

 PROJECTION
  "init=epsg:21781"
 END

 WEB
   IMAGEPATH "***"
   IMAGEURL "***"
   METADATA
     "wms_title"           "WMS_titi"
     "wms_onlineresource"  "/chemin/vers/mon/mapfile.map&"
     "wms_srs"           "EPSG:21781"
   END
 END

Et dans chaque layer:

Code:

   PROJECTION
     "init=epsg:21781"
   END
   METADATA
     "wms_title"           "nom_de_ma_couche"
     "wms_srs"             "EPSG:21781"
   END

Attention, il semble qu'il soit superflu de préciser la projection si aucune reprojection ne doit être faite, mais maintenant que mon mapfile fonctionne, je n'y touche plus.

...et enfin pour openlayers:

Code:

map=new OpenLayers.Map('mymap', {
   projection: "EPSG:21781",
   controls: [],
   units: 'm',
   maxExtent: new OpenLayers.Bounds(xxxxxx,xxxxxx,xxxxxx,xxxxxx),
   resolutions: [xxxxxx,xxxxxx,xxxxxx,xxxxxx,xxxxxx,xxxxxx]
});

Et voilà...

Hors ligne

 

Pied de page des forums

Powered by FluxBB