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

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

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


Fichier(s) joint(s) :
Pour accéder aux fichiers vous devez vous inscrire.

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 sad

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 wink

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 smile

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

 

Pied de page des forums

Powered by FluxBB