#1 Wed 22 January 2014 16:46
- Disbeliever
- Participant occasionnel
- Date d'inscription: 13 Jul 2012
- Messages: 15
Reprojeter une carte en Lambert 93 avec OpenLayers
Hello.
J'ai des couches raster/vecteur de différents SRS dans mon GeoServer (2154, 3857, 4326).
Je sers ces couches en WMS/WFS via OpenLayers et les affiche sur une carte.
Le tout s'affiche en WGS84 (EPSG:4326), puisqu'il me semble que GeoServer ne peut servir les données en WMS/WFS que dans deux systèmes de projection (WGS84 et Google Mercator il me semble).
Une fois dans OpenLayers, j'aimerai reprojeter mes layers en Lambert 93, soit EPSG:2154.
J'ai donc ce code.
Code:
extent = new OpenLayers.Bounds(-6, 40.5, 10, 52); // We define geographical limits a user can't pass through options = { restrictedExtent: extent, numZoomLevels: 8, maxResolution: 0.0189453125, projection: 'EPSG:4326', displayProjection: new OpenLayers.Projection("EPSG:2154"), controls: [ new OpenLayers.Control.Navigation(), new OpenLayers.Control.Zoom(), new OpenLayers.Control.ScaleLine(), new OpenLayers.Control.MousePosition(), new OpenLayers.Control.KeyboardDefaults(), new OpenLayers.Control.NavToolbar(), new OpenLayers.Control.Permalink(), ] }; standardmap = new OpenLayers.Map('map', options); standardmap.addLayers([zasLayer, stationLayer, IGN_Scan1000, IGN_Ortho, IGN_Maps]); var center = new OpenLayers.LonLat(2.5, 49.5); var projFrom = new OpenLayers.Projection("EPSG:4326"); var projTo = new OpenLayers.Projection("EPSG:2154") var cproj = center.transform(projFrom, projTo); standardmap.setCenter(cproj, 0);
Seulement voilà, rien ne change après tout ça, la projection est toujours en WGS84.
J'ai essayé de passer un
Code:
projection: 'EPSG:2154'
directement dans les options de la carte, mais par la suite je me suis heurté à des erreurs du genre 'can't red lonlat' (forcément, 2.5 et 49.5 ne sont pas du Lambert 93) ou 'can't define lenght of null'.
De tout façon je pense que la solution est bien de reprojeter la carte avec un
Code:
transform
.
Y'a t-il quelque chose d'autre à faire, définir une résolution, etc ?
Merci d'avance.
PS : ma vue est centrée sur la France.
Hors ligne
#2 Sun 26 January 2014 17:00
Re: Reprojeter une carte en Lambert 93 avec OpenLayers
Bonjour,
OpenLayers2 ne peut pas reprojeter des données raster (ie WMS). Il faut que le serveur cartographique, GeoServer dans ton cas, serve les couches en lambert93.
Contrairement à ce que tu affirmes, GeoServer peut reprojeter les données en 2154 (lambert 93), il faut par contre rajouter le code dans la configuration du WMS (de mémoire).
Après tu définis la projection dans ton objet MAP en lambert 93 et les couches qui y sont rajoutées suivront cette projection. Ca c'est pour le cas où tu te sers de flux WMS.
Dans le cas de données vecteur, servie en WFS, c'est autre choses. OpenLayers 2 peut reprojeter les données. Mais dans ton cas tu définies la projection en 4326 et tu affiches les coordonnées en 2154. Par conséquent OpenLayers enverra ses requêtes avec des coordonnées en 4326 ensuite tu reprojete le centre de la carte en 2154 alors que la projection doit être en 4326. Donc ce n'est pas bon.
Enfin tu n'as pas mis les définitions de tes 5 couches zasLayer, stationLayer, IGN_Scan1000, IGN_Ortho, IGN_Maps, je ne peux pas en dire plus.
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 Sun 26 January 2014 18:55
- Disbeliever
- Participant occasionnel
- Date d'inscription: 13 Jul 2012
- Messages: 15
Re: Reprojeter une carte en Lambert 93 avec OpenLayers
Bonjour, merci de votre réponse, j'ai déjà résolu mon problème.
Par contre je ne comprends pas votre
OpenLayers2 ne peut pas reprojeter des données raster (ie WMS). Il faut que le serveur cartographique, GeoServer dans ton cas, serve les couches en lambert93.
Ma couche station était en WGS84 côté GeoServer , une fois requêté en Lambert 93 via WMS dans OpenLayers elle était bien reprojetée.
Ou bien alors vous voulez dire que si OpenLayers requête la couche en 2154, GeoServer la sert en 2154 (dans ce cas, j'ai compris) ?
Dans le code que j'ai donné, ma carte était bien reprojetée en Lambert 93 avec ce code :
Code:
var center = new OpenLayers.LonLat(2.5, 49.5); var projFrom = new OpenLayers.Projection("EPSG:4326"); var projTo = new OpenLayers.Projection("EPSG:2154") var cproj = center.transform(projFrom, projTo); standardmap.setCenter(cproj, 0);
Seulement la couche Station n'était pas reprojetée, et donc apparaissait à un endroit inadéquat de la carte.
J'ai repris le code depuis le début, je le posterai lundi si cela peut aider certains.
Dernière modification par Disbeliever (Sun 26 January 2014 18:57)
Hors ligne