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

Printemps des cartes 2024

#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

FlorianD
Membre
Date d'inscription: 22 Dec 2016
Messages: 90
Site web

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: 263

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

 

Pied de page des forums

Powered by FluxBB