IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

IGN API Géoportail Discussion :

Son propre gestionnaire de couche


Sujet :

IGN API Géoportail

  1. #1
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 13
    Points
    13
    Par défaut Son propre gestionnaire de couche
    Bonjour,

    Je souhaite utilise mon propre gestionnaire de couche (avec un arbre car j'aurais des couches kml perso).

    Pour afficher/cacher une couche, pas de problème, il y a la fonction setVisibility()
    Mais, ce qui m'interesse aussi, c'est de savoir quand est disponible une couche en fonction du zoom. Avec le controleur par défaut, on voir que la checkbox se déactive et que le texte change de couleur.

    Comment reproduire cela ? (je ne parle pas de css, mais bien de déterminé quand une couche est dispo ou non)

    Merci

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par norky Voir le message
    Comment reproduire cela ? (je ne parle pas de css, mais bien de déterminé quand une couche est dispo ou non)
    Il faut que le gestionnaire de couches écoute l'évènement "changelayer" pour se redessiner. Voilà le morceau de code de Geoportal.Control.LayerSwitcher qui fait ce travail :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
                    ...
                    // check data layers if they are visible
                    var checked= layer.getVisibility();
                    var inputElem= document.createElement("input");
                    inputElem.id= "input_" + layer.id;
                    inputElem.name= layer.name;
                    inputElem.type= "checkbox";
                    inputElem.value= layer.name;
                    inputElem.checked= checked;
                    inputElem.defaultChecked= checked;
                    inputElem.className= 'gpLayerVisibilityClass';
                    inputElem.style.autocomplete= "off";
                    if (!layer.inRange) {
                        inputElem.disabled= true;
                    }
                    ...
                    // create span
                    var labelSpan= document.createElement("span");
                    labelSpan.id= 'label_' + layer.id;
                    var layerLab= OpenLayers.i18n(layer.name);
                    // convert HTML entities to get the right length :
                    var entityBuffer= document.createElement("textarea");
                    entityBuffer.innerHTML= layerLab.replace(/</g,"&lt;").replace(/>/g,"&gt;");
                    layerLab= entityBuffer.value;
                    entityBuffer= null;
                    if (layerLab.length >= Geoportal.Control.LayerSwitcher.LAYER_LABEL_MAXLENGTH) {
                        // FIXME : HTML tags within string
                        layerLab= layerLab.substring(0,Geoportal.Control.LayerSwitcher.LAYER_LABEL_REPLACEMENT_INDEX)+
                                  Geoportal.Control.LayerSwitcher.LAYER_LABEL_SUFFIX_REPLACEMENT;
                    }
                    labelSpan.innerHTML= layerLab;
                    labelSpan.className= "gpLayerSpanClass";
                    labelSpan.title= OpenLayers.i18n(layer.name);
                    if (!layer.inRange) {
                        labelSpan.className+= "NotInRange";
                    }
                    ...
    la première partie du code vérifier si la couche est à rendre visible (et instancie la case à cocher), la seconde partie du code vérifie si effectivement la couche est affichable (inRange). Le changement de couleur du nom de la couche étant géré via CSS.

  3. #3
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Merci bien, je me suis plongé dans ce code.
    Mais je suis passé finalement par une toute autre manière, je développe mon propre Viewer (qui étant le defaut) similaire au standard.

  4. #4
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par norky Voir le message
    Merci bien, je me suis plongé dans ce code.
    Mais je suis passé finalement par une toute autre manière, je développe mon propre Viewer (qui étant le defaut) similaire au standard.
    Je serai preneur du code (une fois finalisé) pour le mettre à disposition ou en exemple sur le site API

  5. #5
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Citation Envoyé par dgrichard Voir le message
    Je serai preneur du code (une fois finalisé) pour le mettre à disposition ou en exemple sur le site API
    Surtout que j'ai raté ma phrase.
    C'est plutôt layer switcher que je refais

    J'essai de faire un peu comme geoportail.fr, un arbre qui se déplie.

    De plus, j'utilise JQuery et treeview pour le gérer

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 78
    Points : 25
    Points
    25
    Par défaut
    Je trouve ce post très intéressant. Cela veut donc dire qu'il existe un moyen de créer une nouvelle couche complètement personnalisée dans la liste des couches existantes ?
    Si je veux ajouter un input texte en dernière position de la liste des couches par exemple, il faut surcharger la méthode redraw ? Ou on est obligé de créer le div à la main ?

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur cartographe
    Inscrit en
    Avril 2009
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 173
    Points : 4 224
    Points
    4 224
    Par défaut
    Citation Envoyé par kiouz Voir le message
    Je trouve ce post très intéressant. Cela veut donc dire qu'il existe un moyen de créer une nouvelle couche complètement personnalisée dans la liste des couches existantes ?
    Voire en mettre un autre en surchargeant la classe Geoportal.Control.LayerSwitcher

    Citation Envoyé par kiouz Voir le message
    Si je veux ajouter un input texte en dernière position de la liste des couches par exemple, il faut surcharger la méthode redraw ? Ou on est obligé de créer le div à la main ?
    En général, la surcharge de redraw() ne suffit pas, mais c'est le point de départ, surtout si on rajoute de l'évènement (onclick, etc ...)

Discussions similaires

  1. Réponses: 15
    Dernier message: 04/01/2007, 11h15
  2. Créer son propre LayoutManager
    Par tomburn dans le forum Agents de placement/Fenêtres
    Réponses: 9
    Dernier message: 17/03/2005, 16h15
  3. créer son propre protocole
    Par matthew_a_peri dans le forum Développement
    Réponses: 11
    Dernier message: 04/03/2005, 14h16
  4. Création de son propre message dans un formulaire
    Par androme dans le forum C++Builder
    Réponses: 17
    Dernier message: 06/02/2005, 23h13
  5. [C#] Ajouter son propre composant dans Design de VS.Net
    Par yannick_sch dans le forum Windows Forms
    Réponses: 2
    Dernier message: 26/08/2004, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo