#1 Mon 11 December 2017 17:36
- katana
- Participant occasionnel
- Date d'inscription: 21 Aug 2014
- Messages: 32
OpenLayer v3 et LayerSwitcher
Bonjour, j'ai 3 boutons radios osm, mapbox, bingMap. j'aimerais écrire une fonction javaScript qui permet de changer le fond de carte selon le bouton radio sélectionne.
j'ai essayé ce code qui ne marche pas, quelqu'un peut'il m'aider svp !
Code:
function changerFd(){ var choix = document.querySelector('input[type="radio"]:checked').value; var layer = map.getLayers().getArray(); layerchecked = map.getLayers().getArray()[0]; for (var i=0; i<layer.length; i++){ (if layercheked.value == choix){ choix.setVisible(false); } }
Hors ligne
#2 Mon 11 December 2017 23:07
- Damien BEAUSEIGNEUR
- Participant assidu
- Lieu: meyzieu
- Date d'inscription: 5 Sep 2005
- Messages: 425
Re: OpenLayer v3 et LayerSwitcher
Bonsoir
je voix 2 choses bizarres dans ce code.
En premier à quoi sert la boucle for si layerchecked est défini en dehors de la boucle.
Tester layercheked.value pourquoi faire? on ne tombera jamais dans ce cas.
Comment faire pour savoir quel est la case à cocher active avec la méthode de sélection?
D'un point de vue pratique, il faudrait avoir un "layerchecked.setVisible(true)" et 2 ""layerchecked.setVisible(false)"
il n'y a pas de nom par défaut pour les couches dans open layer, il faut rajouter une propriété titre par exemple pendant la création pour l'identifier par son nom.
cordialement
Hors ligne
#3 Tue 12 December 2017 11:01
Re: OpenLayer v3 et LayerSwitcher
Bonjour,
Damien a raison, il est préférable d'affecter un titre à chacune de vos couches SIG.
Pour lister les couches de l'objet Map :
Code:
map.getLayers().forEach(function(objetCouche,idCouche){ var titreCouche=objetCouche.get('title'); });
Puis, pour la fonction de visibilité avec les checkbox (avec JQuery):
Code:
$('input[type=checkbox]').on('change', function() { var idCheckbox=$(this).attr('id'); // Id A définir dans votre input map.getLayers().forEach(function(objetCouche,idCouche){ var titreCouche=objetCouche.get('title'); if(idCheckbox==idCouche){ objetCouche.setVisible(!objetCouche.getVisible()); } }); });
Cdlt,
Florian
Hors ligne
#4 Thu 30 April 2020 20:14
- sylvainSIG
- Participant assidu
- Lieu: Moissac
- Date d'inscription: 29 Nov 2018
- Messages: 265
Re: OpenLayer v3 et LayerSwitcher
Bjr,
Le sujet est un peu ancien, mais je me permet de le déterrer car il y a un problème (surement d'inattention).
En effet, la variable 'titrecouche' est définie mais n'est appelée nulle part.
D'autre part, mais cela revient au même, on peut définir (via la méthode attr) l'id comme ici, mais on peut aussi définir la valeur de l'input.
Code:
$('input[type=checkbox]').on('change', function() { var idCheckbox=$(this).attr('value'); // input value group.getLayers().forEach(function(element, index, array){ var idCouche=element.get('title'); if(idCheckbox===idCouche){ element.setVisible(!element.getVisible()); } }); });
A noter 'group' (ligne 3) fait référence à un groupe de couches, à remplacer par le nom de votre groupe bien évidemment.
A bientôt
Sylvain
Dernière modification par sylvainSIG (Thu 30 April 2020 20:15)
Hors ligne