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é ?

Annonce

Printemps des cartes 2024

#1 Thu 19 July 2007 09:21

guidodo
Participant occasionnel
Lieu: Saint-Maur-des-Fossés
Date d'inscription: 4 Jan 2006
Messages: 26

[OpenLayers] Reprojection des couches WMS

Bonjour à tous,

Je suis en ce moment en plein développement sur OpenLayers, permettant de coupler l'API Google Maps à mes propres couches WMS.

Les couches WMS viennent de MapServer couplé à PostGIS. L'échelle de travail va de la France Entière jusqu'aux communes en terme de zooms. La projection utilisée est indifféremment l'EPSG 27582 (Lambert II) ou l'EPSG 4326 (WGS84).

J'ai plusieurs problèmes à résoudre et j'espère (et n'en doute pas) pouvoir trouver de l'aide ici. Je liste donc toutes mes questions plutot que de créer XX topics.

Q1- Concernant l'affichage des couches WMS : lorsque je choisis de les afficher en "tiled", la superposition avec Google Maps est parfaite. Cependant, ce qui est assez troublant, c'est qu'il charge systématique 40 tuiles (couvrant le monde entier à mon sens), même s'il n'y a pas de données à afficher. En terme de temps de chargement / affichage, et de montée de charge sur le serveur, ce n'est pas exceptionnel. Lorsque j'opte pour un layer "Untiled", affichage quasi instantané de la couche en une seule fois, mais gros décalage au niveau de la superposition. En gros, ce décalage s'observe de l'échelle de la France, puis plus on se rapproche, plus le décalage se réduit (au niveau d'une région, la Bretagne par exemple, ca se superpose bien). De plus, à chaque zoom, le layer untiled ne s'actualise pas, il faut que je fasse un léger pan pour que celui-ci se recharge.

Existe t'il une parade (projection à utiliser de préférence ?) pour pouvoir afficher un layer untiled sur un fond Google Maps dans avoir de décalage ?


Q2- J'ai créé une fonction javascript qui a pour but d'afficher, en un seul layer WMS, plusieurs de layers MapServer (jusque là, pas de souci). En gros, dans l'appel new OpenLayers.Layer.WMS(name, url, {layers:"layer1,layer2,layer3"}...)
La liste des layers à définir est contenu dans une variable de type string. Concrètement, j'essaie de faire passer la commande suivante :

variable_layer = new OpenLayers.Layer.WMS(variable_name, variable_url, variable_param, variable_option);
map.addLayer(variable_layer);

L'affichage de la couche ne se fait pas.
Toutes ces variables sont définies préalablemment, et sont parfaitement opérationnelles lorsque je ne passe pas par des variables. Quelqu'un a t'il déjà réalisé ce type de manip pour l'affichage des couches ? Ou bien est-ce impossible ?

Q3- La question subsidiaire : peut-on verrouiller l'affichage de OpenLayers pour que l'utilisateur ne puisse pas dézoomer plus qu'au niveau de la France ? (il n'a pas besoin de voir le monde entier).

Voila en gros mes plus gros souci pour le moment, le reste étant relativement "mineur".

En espérant que quelqu'un pourra m'apporter un éclairage...

Par avance un grand merci ! wink

Guidodo

Dernière modification par guidodo (Thu 19 July 2007 09:26)

Hors ligne

 

#2 Thu 19 July 2007 14:36

Nicolab
Membre
Lieu: Osaka
Date d'inscription: 9 Dec 2005
Messages: 95

Re: [OpenLayers] Reprojection des couches WMS

Hello Guidodo
Q1: GMaps API utilise la proj Mercator, je pense que le mieux est de rester dans ce systeme pour vos couches WMS, ou de reprojeter à la volée via un .js
Q2: Je ne sais pas trop pour ca
Q3: Oui, le niveau de zoom max/min et l'extent sont paramétrable en options

Code:

var options = { 
                    numZoomLevels: 16        
                  };

map = new OpenLayers.Map( $('map') , options);

Pour restreindre l'extent, voyez du côté de bounds.js

Code:

   bounds = new OpenLayers.Bounds(-180,-90,180,90);
   map.zoomToExtent(bounds);

Bon dev !
PikO

Hors ligne

 

Pied de page des forums

Powered by FluxBB