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 :

zindex dans la gestion des couches (Encore!)


Sujet :

IGN API Géoportail

  1. #1
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut zindex dans la gestion des couches (Encore!)
    Ma page simplifiée de test

    En cliquant sur le bouton en haut droit pour ouvrir le control "altimétrique", puis en traçant une ligne passant par la commune verte, on s'aperçoit que la ligne rouge (de la couche "Coupe") est en dessous de la surface verte (de la couche "Commune") alors que le gestionnaire des couches mentionne le contraire. Pourquoi????
    D'après une discussion précédente, Gilles mentionne raiseLayer() que je bidouille (zindex de ma couche Coupe = 725) mais n'arrive pas à rendre opérationnel....

    Par contre ce que je constate c'est que si on renouvelle l'opération (un click sur le bouton "profil" pour fermer toutes les boites d'info, et un second click sur ce bouton pour rouvrir le control), alors on a bien le tracé (zindex de ma couche Coupe = 350 ?? Pourquoi, je ne sais pas!) au dessus de la zone verte, en conformité avec les indications du gestionnaire des couches...
    Une idée pour avoir ce comportement dès la première sollicitation de l'outil?

  2. #2
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Résolu partiellement...

    En plaçant un "setZIndex(800);" au bon endroit, je replace cette couche au dessus... Tout cela sans bien comprendre le pourquoi du comment?

    Mais cette manip semble montrer que moveLayerDown() devrait être complété par un setZIndex() adéquat?

  3. #3
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut Garder mes controls hover et clic avec l'outil "Altimétrie"
    Je reste sur la même discussion car la page test est la même. Et le sujet similaire à savoir la bonne coordination avec un outil "Altimétrie"...

    Au chargement et après un premier click sur le bouton "Altimétrie", mes controls hoverCtrl et clickCtrl sont opérationnels.
    Par contre dès que je reclick sur mon bouton "Altimétrie", je perds ces deux controls, et je n'arrive pas à les réactiver?
    Pourquoi et comment les réactiver?

  4. #4
    Membre éclairé Avatar de jrenard
    Homme Profil pro
    Webdesigner / développeur front-end
    Inscrit en
    Septembre 2013
    Messages
    456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Webdesigner / développeur front-end
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2013
    Messages : 456
    Points : 894
    Points
    894
    Par défaut
    Bonjour Christian,

    Je reproduis le comportement que tu décris, et je ne comprends pas vraiment non plus ce qu'il se passe.
    Le plus curieux, c'est qu'en demandant d'afficher les contrôles dans la console, ils existent toujours et sont toujours actifs sans avoir subi aucune modification même lorsqu'ils ont l'air de ne plus être appliqués.

    On va investiguer la question.

  5. #5
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Bonjour Jeremy,
    Ta réponse me remonte le moral en me montrant que tu (et Gilles et Anaïs et les autres IGN que j'oublie) es là. Car depuis quelques temps, c'est au plus bas! Beaucoup de choses m'échappent avec la combinaison des controls hover et click et cet outil altimétrie, et je n'en mentionne sur le forum que les plus évidentes!
    Un coup de main serait bien utile pour progresser et comprendre...
    ils existent toujours et sont toujours actifs sans avoir subi aucune modification même lorsqu'ils ont l'air de ne plus être appliqués
    Tout à fait!!!!! Donc pas la peine de les recréer, de les activer, ou que sais-je avec les fonctions associées!

    Ils sont là, mais sans être "actif"...

  6. #6
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Peut-être que cette autre page de test pourra vous aider dans vos investigations?
    Cette page est seulement différente de la première par le remplacement de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    hoverCtrl = new OpenLayers.Control.SelectFeature([layerCommune], 
     OpenLayers.Util.extend(viewer.getMap().getPopupDefaults('KML'),
        {    hover : true,
            onSelect : affich,
    onUnselect : effac,
                renderIntent : "temporary", 
                autoActivate : true
    })        
    );
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        var hoverCtrl  = new OpenLayers.Control.SelectFeature([layerCommune], {            hover : true,
            onSelect : affich,
    onUnselect : effac,
                renderIntent : "temporary", 
                autoActivate : true
            });
    On constate alors quelques modifications:
    1/ Le control se maintient alors quand on ferme l'outil "altimétrie"
    2/ Mais on le perd quand on sélectionne l'outil "altimétrie", contrairement avec la première formule. Ce qui me chagrine beaucoup. D'autres problèmes secondaires apparaissent aussi, mais restons sur l'essentiel!

    Outre le fait que j'assimile mal ce qu'apporte précisément OpenLayers.Util.extend(viewer.getMap().getPopupDefaults('KML')... comment pour répondre à ce 2/, maintenir le control "survol" avec cette deuxième formule quand on utilise l'outil "altimétrie"?

  7. #7
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par cmail Voir le message
    Outre le fait que j'assimile mal ce qu'apporte précisément OpenLayers.Util.extend(viewer.getMap().getPopupDefaults('KML')...
    Christian,

    viewer.getMap()getPopupDefaults('KML') retourne des options par défaut pour le KML à savoir :

    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
    autoActivate:false
    box:	false
    callbacks:	null
    clickout:true
    geometryTypes:null
    handlersOptions:null
    highlightOnly:false
    hover:false
    multiple:false
    multipleKey:null
    renderIntent:"select"
    scope:null
    selectStyle:null
    toggle:true
    toggleKey:null
    onBeforeSelect:function()
    onSelect:function()
    onUnselect:function()
    du coup, si tu l'enlèves, tu n'as pas toutes les options initialisées comme cela.

    Pour le reste, on regarde... ne perds pas le moral

  8. #8
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    viewer.getMap()getPopupDefaults('KML') retourne des options par défaut pour le KML à savoir :
    ????? Pourtant, il me semble bien que d'origine OpenLayers.Control.SelectFeature() donne la plupart des options avec leur valeur que tu cites?? Un controle dans le dom sur hoverCtrl pour la seconde page me laisse penser cela...
    A une incertitude près sur handlersOptions:null (Mais comme elle est à null???)

    Mais bon, je ne dois pas tout saisir....


  9. #9
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    Après beaucoup de suées, je m'aperçois aussi que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    hoverCtrl = new OpenLayers.Control.SelectFeature([layerCommune],   OpenLayers.Util.extend(****)
    clickCtrl = new OpenLayers.Control.SelectFeature([layerCommune],   OpenLayers.Util.extend(****)
    viewer.getMap().addControl(hoverCtrl);
    viewer.getMap().addControl(clickCtrl);
    n'est pas identique (en terme de gestion de couches) à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    hoverCtrl = new OpenLayers.Control.SelectFeature([layerCommune],   OpenLayers.Util.extend(****)
    clickCtrl = new OpenLayers.Control.SelectFeature([layerCommune],   OpenLayers.Util.extend(****)
    viewer.getMap().addControl(clickCtrl);
    viewer.getMap().addControl(hoverCtrl);
    Ce qui me parait très étrange.... Si à vous aussi, je pourrais entrer dans les détails. Mais si cela vous semble tout-à-fait normal, dites-moi pourquoi...

  10. #10
    Membre chevronné Avatar de gcebelieu
    Homme Profil pro
    Ingénieur Géographe et Cartographe
    Inscrit en
    Novembre 2010
    Messages
    1 106
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Géographe et Cartographe
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2010
    Messages : 1 106
    Points : 1 843
    Points
    1 843
    Par défaut
    Citation Envoyé par cmail Voir le message
    ????? Pourtant, il me semble bien que d'origine OpenLayers.Control.SelectFeature() donne la plupart des options avec leur valeur que tu cites?? Un controle dans le dom sur hoverCtrl pour la seconde page me laisse penser cela...
    A une incertitude près sur handlersOptions:null (Mais comme elle est à null???)
    Mais bon, je ne dois pas tout saisir....
    le diable est parfois dans les détails. La différence réside aussi sur les fonctions de callback :

    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
        getPopupDefaults: function(t) {
            var h= false;
            if (t=='WFS') {
               h= true;
            }
            var options= {
                multipleKey: null,
                toggleKey: null,
                multiple: false,
                clickout: true,
                toggle: !h,
                hover: h,
                highlightOnly: false,
                box: false,
                onBeforeSelect: function() {},
                onSelect: (h? Geoportal.Control.hoverFeature : Geoportal.Control.selectFeature),
                onUnselect: Geoportal.Control.unselectFeature,
                scope: null,
                geometryTypes: null,
                callbacks: null,
                handlersOptions: null,
                selectStyle: null,
                renderIntent: "select",
                autoActivate: false
            };
            return options;
        },


    Citation Envoyé par cmail Voir le message
    Après beaucoup de suées, je m'aperçois aussi que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    hoverCtrl = new OpenLayers.Control.SelectFeature([layerCommune],   OpenLayers.Util.extend(****)
    clickCtrl = new OpenLayers.Control.SelectFeature([layerCommune],   OpenLayers.Util.extend(****)
    viewer.getMap().addControl(hoverCtrl);
    viewer.getMap().addControl(clickCtrl);
    n'est pas identique (en terme de gestion de couches) à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    hoverCtrl = new OpenLayers.Control.SelectFeature([layerCommune],   OpenLayers.Util.extend(****)
    clickCtrl = new OpenLayers.Control.SelectFeature([layerCommune],   OpenLayers.Util.extend(****)
    viewer.getMap().addControl(clickCtrl);
    viewer.getMap().addControl(hoverCtrl);
    Ce qui me parait très étrange.... Si à vous aussi, je pourrais entrer dans les détails. Mais si cela vous semble tout-à-fait normal, dites-moi pourquoi...
    Cela ne me paraît pas si étrange que ça :

    la création du control SelectFeature sur un tableau de couches vecteur engendre la création d'une couche aggrégate "invisible" qui a pour but de "rassembler" les features de chacune de ces couches à un même niveau pour rendre possible la sélection de toutes en même temps. le fait de rajouter le controle à la carte rajoute donc cette couche à la carte et peut donc modifier l'ordre des couches entre elles...

    C'est un mécanisme OpenLayers à la base. Il faut qu'on prenne le temps de disséquer tout cela pour comprendre ce qui se passe.

  11. #11
    Membre éprouvé Avatar de cmail
    Homme Profil pro
    Inscrit en
    Mai 2009
    Messages
    1 730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Loire (Auvergne)

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 730
    Points : 966
    Points
    966
    Par défaut
    la création du control SelectFeature sur un tableau de couches vecteur engendre la création d'une couche aggrégate "invisible" qui a pour but de "rassembler" les features de chacune de ces couches à un même niveau pour rendre possible la sélection de toutes en même temps. le fait de rajouter le controle à la carte rajoute donc cette couche à la carte et peut donc modifier l'ordre des couches entre elles...
    Bon à savoir pour éviter quelques surprises...

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/06/2007, 22h04
  2. gestion des couches présentation et session
    Par youp_db dans le forum Développement
    Réponses: 1
    Dernier message: 19/04/2007, 17h10
  3. [VBA-E] Dysfonctionnement dans la gestion des erreurs
    Par Choco49 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/06/2006, 11h44
  4. Réponses: 2
    Dernier message: 11/05/2005, 13h23
  5. [TP]Problème dans la gestion des touches d'un tetris
    Par Guile0 dans le forum Turbo Pascal
    Réponses: 18
    Dernier message: 31/01/2005, 22h40

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