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: 10053
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: 10053
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: 10053
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: 10053
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: 10053
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

Copyright Association GeoRezo