#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 !
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