#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
ENDCe 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
ENDEt dans chaque layer:
Code:
PROJECTION
"init=epsg:21781"
END
METADATA
"wms_title" "nom_de_ma_couche"
"wms_srs" "EPSG:21781"
ENDAttention, 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


