Bonjour à tous
J'ai passé la journée à tourner autour d'un problème que je n'ai pas réussi à résoudre. Si c'est une erreur de ma part, je ne la trouve pas (et rien dans le forum ne m'a mis sur une piste sérieuse). A mes yeux, ça semble être un bug...
Le but est de simplement pouvoir changer la transparence d'une couche vector (par la fonction setOpacity ) pour laquelle on a attribué un callback sur le click de ses objets.
Ca ne fonctionne pas et pire, firebug retourne une erreur ("E is null" dans le code de l'API).
Par exemple, sur cette page : http://api.ign.fr/geoportail/api/doc...ltiLayers.html il suffit de vouloir changer la transparence d'une des couches pour laquelle on a un callback lors d'une sélection (viewer.map.layers[6] par exemple), et on a le problème.
Pour résumer, un bout de code qui met en évidence l'erreur :
Le premier appel à setOpacity se déroulera sans soucis, le second non.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 // creation de la carte geoportalLoadMapIGN("carteGeoportail","normal","FXX"); olmap = MapIGN.getMap(); MapIGN.addGeoportalLayer('GEOGRAPHICALGRIDSYSTEMS.MAPS:WMSC',{opacity:1, visibility:true}); // ajout d'un couche vector couche1 = new OpenLayers.Layer.Vector("couche1"); olmap.addLayer(couche1); //premier changement de transparence -> ca marche couche1.setOpacity(.5); var click_couche1 = new OpenLayers.Control.SelectFeature([couche1], { onSelect: function(feature) { } }); olmap.addControl(click_couche1); click_couche1.activate(); //second changement de transparence -> ca plante couche1.setOpacity(.9);
D'autres fonctions (comme setVisibility) fonctionnent bien.
Si on n'a qu'une couche qui doit être sélectionnable, on peut faire le "addlayer" après avoir défini le callback puis placer la couche au premier plan (via setZIndex) et là, ça marche ...
Mais si on a besoin de plusieurs couches sélectionnables, c'est mort.
Vous auriez des suggestions ? Qu'en pensez vous ?
Merci
Partager