Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
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 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

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

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

 

Pied de page des forums

Powered by FluxBB