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 Fri 14 February 2014 16:08

jlebouvier
Juste Inscrit !
Date d'inscription: 27 Feb 2007
Messages: 8

Openlayers - Problème modification couche Vecteur si plus de 80 layers

Bonjour,

J'ai un petit problème avec Openlayers.

Dans un layer de type Vecteur, je n'arrive plus a modifier un objet dès que je dépasse les 80 couches (enfin un baselayer et 80 layers en plus). Comme si l'évènement de sélection n'était plus émis.


Dans l'exemple ci-dessous, je met en place une carte avec un baselayer.
Ensuite, j'ajoute 79 fois cette même couche (non définies en baselayer et non visibles. Testé avec d'autres couches chez moi mais plus simple pour expliquer mon problème ici).
J'ajoute enfin un layer de type Vecteur.

Une fois la carte il est possible de créer un polygone puis en passant sur l'outil de modification (situé à gauche de l'outil des polygone) de modifier cet objet. Jusque là tout va bien.


Par contre, si ajoute une couche de plus en dé-commentant la ligne suivante (34 normalement) :

Code:

//mlayer2 = new OpenLayers.Layer.Vector("mlayer2", {renderers: renderer})

l'opération précédente ne fonctionne plus. Impossible d'avoir la sélection de mon objet.


Code:

<!DOCTYPE html>
  <html xmlns="http://www.W3.org/1999/xhtml" xml:lang="fr" lang="fr">
  <head>
      <meta http-equiv="X-UA-Compatible" content="IE=edge" >
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
    <meta name="author" content="JLebouvier" /
    <meta name="viewport" content="width=device-width" />
    <title>TESTS</title>

        <style type="text/css">
    .olControlEditingToolbar .olControlPersonnaliseFeatureItemInactive{background-position: 0px 0px;}
    .olControlEditingToolbar .olControlPersonnaliseFeatureItemActive  {background-position: 0px -24px;}
    
    </style>

     <!--OPEN LAYERS -->
    <link rel="stylesheet" type="text/css" href="http://sig.clermont-ferrand.fr/js/OpenLayers/2.13/theme/default/style.css">
    <script type="text/javascript" charset="utf-8" src="http://sig.clermont-ferrand.fr/js/OpenLayers/2.13/OpenLayers.js"      ></script>        
        <script type="text/javascript" charset="utf-8">

        NB_LAYERS = 79
        
        function init(div_carte)
    {        
        var listeCouches= new Array();
            listeCouches.push (new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic', isBaseLayer: true})); 
            for (i=0; i<NB_LAYERS; i++)
            {
                listeCouches.push (new OpenLayers.Layer.WMS( "OpenLayers WMS : " + i, "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'}, {visibility : false}));
            }
            
            // Layers vectoriels
            mlayer1 = new OpenLayers.Layer.Vector("mlayer1")
            mlayer2 = new OpenLayers.Layer.Vector("mlayer2")    
    
            listeCouches.push (mlayer1)
            listeCouches.push (mlayer2)

            function report(event) {
                    console.log(event.type, event.feature ? event.feature.id : event.components);
            }
            mlayer1.events.on({
                    "beforefeaturemodified": report,
                    "featuremodified": report,
                    "afterfeaturemodified": report
            });

            
      // Mise en place de la carte    
      var Carte = new OpenLayers.Map({
                div: div_carte,
                layers:listeCouches
        });
            
            // Outils
            //polygon = new OpenLayers.Control.DrawFeature(mlayer1, OpenLayers.Handler.Polygon)
            modify =  new OpenLayers.Control.ModifyFeature(mlayer1, {title: "Modifier un objet", displayClass: "olControlPersonnaliseFeature"})
            var panel = new OpenLayers.Control.EditingToolbar(mlayer1);
            panel.addControls([modify]);
                    
            // Ajout des controles
            Carte.addControl(new OpenLayers.Control.LayerSwitcher());
            Carte.addControl(new OpenLayers.Control.MousePosition());                        
            Carte.addControl(panel);
      Carte.setCenter(new OpenLayers.LonLat(0, 0), 3);
            
            console.log(listeCouches.length + " layers chargés dans la carte")
    }
        </script> 
  </head>
  
  <body onLoad="init('Carte1')" onResize="" > <!---->
        <div id="Carte1" style="width:100%;height:800px;border:dotted"> 
  </body>
</html>

Avez-vous une idée ?

Hors ligne

 

#2 Sun 16 February 2014 12:51

PA
Membre
Lieu: Paris
Date d'inscription: 5 Sep 2005
Messages: 3259
Site web

Re: Openlayers - Problème modification couche Vecteur si plus de 80 layers

Bonjour,

Vous semblez effectivement atteindre les limites :

http://trac.osgeo.org/openlayers/wiki/F … dQuestions

What is the maximum amount of layers I can have in my OpenLayers Map?

The limit is about 75. After that, layers can appear above popups. This has to do with the z-index in CSS (determines what is 'above' what). Layers (overlay) start at a z-index of 325. Popups start at 750. Controls start at 1000.

Every layer 'takes up' about 5 indexes, so it will reach it's limit at around 75 layers. You cannot have more than 250 popups for the same reason.

If you need more than 75 layers, consider destroying the ones you don't show instead of hiding them and recreate them when needed.


Pierre-André Le Ny
Modérateur QGIS, Données, Coin de l'OpenSource
Aidez l'association GeoRezo !

Hors ligne

 

#3 Mon 17 February 2014 08:50

jlebouvier
Juste Inscrit !
Date d'inscription: 27 Feb 2007
Messages: 8

Re: Openlayers - Problème modification couche Vecteur si plus de 80 layers

Bonjour,

Merci pour le lien.  Effectivement je vais devoir revoir une partie de mon code.


Bonne journée.

Hors ligne

 

Pied de page des forums

Powered by FluxBB