#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
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
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
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.
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
Re: [Mapserver] WMS changer de projection
Bonjour,
il faut peut être vider le cache du navigateur
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
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
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