Pages: 1
- Sujet précédent - [OpenLayers] Afficher une layer en fonction du niveau de zoom - Sujet suivant
#1 Wed 08 July 2009 14:27
- scpsc
- Participant occasionnel
- Date d'inscription: 6 Jul 2009
- Messages: 20
[OpenLayers] Afficher une layer en fonction du niveau de zoom
Bonjour,
J'ai besoin de vote aide : je débute avec OpenLayers et je n'arrive pas à comprendre comment cacher une layer pour ne l'afficher qu'à partir d'un certain niveau de zoom. Voici le petit script que j'ai fait pour tester :
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>test</title> <script src="./OpenLayers-2.8/OpenLayers.js"></script> <script type="text/javascript"> var map; function init() { map = new OpenLayers.Map('map'); var wms = new OpenLayers.Layer.WMS("OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", {layers: 'basic' }); var optionsSRTM = {resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125], maxResolution: 0.17578125,minResolution: 0.0439453125}; var srtm = new OpenLayers.Layer.GML("KML", "./test.kml", { format: OpenLayers.Format.KML}, optionsSRTM); // srtm.setVisibility(false); // if (map.getZoom() > 2) // { // srtm.setVisibility(true); // } map.addLayers([wms, srtm]); map.zoomToMaxExtent(); map.addControl(new OpenLayers.Control.LayerSwitcher()); } </script> </head> <body onload="init()"> <div id="map" style="width: 512px;height: 256px;border: 1px solid #d1d1d1;"></div> </body> </html>
J'ai essayé 2 choses :
- utiliser les options de résolution dans la déclaration de ma layer
- jouer avec la visibilité
Dans les 2 cas ça ne marche pas. Pour la tentative avec la setVisibility, je me demande si c'est pas parce que la layer n'est pas rechargée quand je zoom / dézoom. J'ai tâché de suivre ces instructions sans succès : je pense qu'il y a quelque chose que je n'ai pas compris...
Je joins un fichier kml pour tester.
Merci d'avance !
Hors ligne
#2 Wed 08 July 2009 15:08
- BBarthur
- Participant actif
- Date d'inscription: 17 Jun 2009
- Messages: 57
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
Bonjour
Je ne suis pas du tout un pro, mais deux trucs me paraissent bizarres:
- tu ne déclares pas tes résolutions dans le new OpenLayers.Map
- tu les déclares dans les options du layer, alors que maxResolution et minResolution suffisent en principe
Avec ça, tu n'a normalement pas besoin de ta petite condition mise en commentaire
Hors ligne
#3 Wed 08 July 2009 16:10
- scpsc
- Participant occasionnel
- Date d'inscription: 6 Jul 2009
- Messages: 20
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
Merci beaucoup pour ta réponse.
J'ai modifié mon code comme tu le suggères : les différentes résolutions s'appliquent bien à la map (j'ai maintenant seulement 6 niveaux de zoom) mais mon vecteur s'affiche à tous les niveaux.
Voici mon code modifié :
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>test</title> <script src="./OpenLayers-2.8/OpenLayers.js"></script> <script type="text/javascript"> var map; function init() { var options = {resolutions: [1.40625,0.703125,0.3515625,0.17578125,0.087890625,0.0439453125]}; map = new OpenLayers.Map('map', options); var wms = new OpenLayers.Layer.WMS("OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", {layers: 'basic' }); var optionsSRTM = {maxResolution: 0.17578125,minResolution: 0.0439453125}; var srtm = new OpenLayers.Layer.GML("KML", "./test.kml", { format: OpenLayers.Format.KML}, optionsSRTM); map.addLayers([wms, srtm]); map.zoomToMaxExtent(); map.addControl(new OpenLayers.Control.LayerSwitcher()); } </script> </head> <body onload="init()"> <div id="map" style="width: 512px;height: 256px;border: 1px solid #d1d1d1;"></div> </body> </html>
Hors ligne
#4 Wed 08 July 2009 16:19
- BBarthur
- Participant actif
- Date d'inscription: 17 Jun 2009
- Messages: 57
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
et avec:
Code:
var optionsSRTM = {maxZoomLevel: 3};
?
Hors ligne
#5 Wed 08 July 2009 16:25
- scpsc
- Participant occasionnel
- Date d'inscription: 6 Jul 2009
- Messages: 20
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
Hélas non
Est-ce que ça pourrait venir du fait que c'est du kml ?
Hors ligne
#6 Wed 08 July 2009 16:27
- BBarthur
- Participant actif
- Date d'inscription: 17 Jun 2009
- Messages: 57
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
essayes si ça marche sur le wms de metacarta
Hors ligne
#7 Wed 08 July 2009 16:35
- scpsc
- Participant occasionnel
- Date d'inscription: 6 Jul 2009
- Messages: 20
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
Ca marche mais c'est pas du tout l'effet que je veux : là ça force le niveau de zoom entre les valeur min et max (ce qui est logique pour une carte). J'avais cru comprendre qu'il était possible de contrôler l'affichage d'une layer en fonction du niveau de zoom avec ces paramètres mais je commence à me demander si j'ai bien compris : /
Pourtant l'intro de la page que j'ai linkée est assez claire :
The OpenLayers Map is designed to display each of its layers at different levels of Scale or Resolution.
Hors ligne
#8 Wed 08 July 2009 16:44
- BBarthur
- Participant actif
- Date d'inscription: 17 Jun 2009
- Messages: 57
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
Oui, je vois bien ce que tu veux dire, mais je ne vois pas pourquoi on n'y arrive pas. Peut-être qu'openlayers ne juge pas nécessaire d'afficher les autres niveaux de zooms si les seuils n'ont été configurés que sur une seule couche. Mais là ça devient trop compliqué pour moi, désolé... j'espère qu'un pro va passer par là pour te tirer d'affaire.
Hors ligne
#9 Wed 08 July 2009 16:49
- scpsc
- Participant occasionnel
- Date d'inscription: 6 Jul 2009
- Messages: 20
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
Oui peut-être ça ou alors les layers GML ne gèrent pas le niveau de zoom. D'après la doc elles héritent de la layer Vector donc je suppose que ça devrait marcher mais je débute
En tous cas merci beaucoup d'avoir pris le temps de chercher !
Et si quelqu'un a une idée je suis preneur !
Hors ligne
#10 Mon 20 July 2009 11:05
- scpsc
- Participant occasionnel
- Date d'inscription: 6 Jul 2009
- Messages: 20
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
J'ai obtenu une solution à mon problème en passant par la liste de diffusion d'OpenLayers. Je la donne ici au cas où quelqu'un aurait le même soucis. En fait apparemment les couches GML ne supportent pas les options de résolution. Je suis donc passé par une couche Vector :
Code:
var map; function init() { var options = {resolutions: [1.40625, 0.703125, 0.3515625, 0.17578125, 0.087890625, 0.0439453125]}; map = new OpenLayers.Map('map', options); var wms = new OpenLayers.Layer.WMS("OpenLayers WMS", "http://labs.metacarta.com/wms/vmap0", {layers: 'basic' }); var test_kml = new OpenLayers.Layer.Vector("test_kml", { maxResolution: 0.17578125, minResolution: 0.0439453125, strategies: [new OpenLayers.Strategy.BBOX()], protocol: new OpenLayers.Protocol.HTTP({ url: "./test.kml", format: new OpenLayers.Format.KML({format: OpenLayers.Format.KML})})}); map.addLayers([wms, test_kml]); map.zoomToMaxExtent(); map.addControl(new OpenLayers.Control.LayerSwitcher()); }
Hors ligne
#11 Fri 28 August 2009 15:13
- Sfox
- Participant occasionnel
- Date d'inscription: 29 Jun 2009
- Messages: 24
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
Bonjour,
moi j'arrive pas toujours pas à afficher ma couche par échelle, il me l'affiche toujours en zoomExtent. voici mon script openlayers:
Code:
map = new OpenLayers.Map('map',{ maxExtent: bounds,[b]maxResolution : "auto"[/b], units : "meters", projection : "epsg:27563" }); .... .... layer_wfs = new OpenLayers.Layer.Vector("WFS", { strategies: [ new OpenLayers.Strategy.Fixed(), new OpenLayers.Strategy.Cluster(), new OpenLayers.Strategy.BBOX() ], protocol: new OpenLayers.Protocol.HTTP({ url: " http://localhost:81/cgi-bin/mapserv.exe?map=C:/OLWebSite/App_Data/olvbmapfileOracleWFS.map &", params: { format: "WFS", service: "WFS", request: "GetFeature", srs: "epsg:27563", VERSION : "1.0.0", typename : 'EAU_EQUIP_PUBLIC' }, format: new OpenLayers.Format.GML() }), styleMap:new OpenLayers.StyleMap({ "default": WFSstyle, "select": { fillColor: "#8aeeef", strokeColor: "#32a8a9" } }) }, { extractAttributes:true, displayInLayerSwitcher: true, [b]scales:[0,5000][/b] });
j'ai essayé d'utiliser l'option scales comme décrit sur le net mais ça ne marche pas.
j'ai même essayé avec les résolutions comme vous l'avez décrit "scpsc" mais toujours rien.
Pourriez vous m'aider svp? merci d'avance.
Hors ligne
#12 Fri 11 March 2011 17:45
- Ptigrouick
- Participant occasionnel
- Lieu: Maison de la Télédétection
- Date d'inscription: 8 Dec 2008
- Messages: 20
- Site web
Re: [OpenLayers] Afficher une layer en fonction du niveau de zoom
Bonjour,
Je déterre ce vieux topic pour indiquer une méthode que j'ai utilisé pour résoudre le problème de l'affichage de couche en fonction du niveau de zoom. Je voulais afficher une couche TMS uniquement entre les niveaux de zoom 5 et 15. Pour un zoom plus petit que 5 ou plus grand que 15, la couche ne devait pas s'afficher. Voici ma solution :
Code:
<script type="text/javascript"> function init() { var map = new OpenLayers.Map(''); var osmlayer = new OpenLayers.Layer.OSM("OpenStreetMap"); var hill = new OpenLayers.Layer.TMS("Relief (NASA SRTM3)", "http://toolserver.org/~cmarqu/hill/", { type: 'png', getURL: osm_getTileURL, displayOutsideMaxExtent: true, isBaseLayer: false, transparent: true, "visibility": true, alwaysInRange: false, maxResolution: map.getResolutionForZoom(5), minResolution: map.getResolutionForZoom(15) } ); map.addLayers([osmlayer,hill]); } </script>
A noter que j'ai supprimé la définition de la fonction osm_getTileURL qui n'apporte rien d'intéressant à l'affaire.
J'espère que ça pourra être utile à d'autres.
Plus d'infos sur mon site : http://libreavous.teledetection.fr/geom … ux-de-zoom
Dernière modification par Ptigrouick (Thu 17 March 2011 15:19)
Hors ligne
Pages: 1
- Sujet précédent - [OpenLayers] Afficher une layer en fonction du niveau de zoom - Sujet suivant