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 :

addlayer et clone


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 addlayer et clone
    Sur cette page de test pourquoi dans le premier viewer la couche "commune43" n'arrive pas à afficher layerCommune?
    Cela est lié à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    viewer2.getMap().addLayer(layerCommune.clone()) ;
    (en la supprimant tout redevient clair) mais pourquoi le fait d'ajouter un clone dans le second viewer empêche l'affichage dans le premier viewer de l'objet cloné?
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  2. #2
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    Bonjour,
    ça fonctionne si vous ajoutez le viewer2 à la fin du chargement de la couche layerCommune:
    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
      layerCommune = viewer1.getMap().addLayer(
             "KML",
             "Commune 43",
             "Obs43data.kml", {// ou Obs43.kml"
    
             visibility: true
    		 ,eventListeners:{
            "loadend":function(){
                  loadGUI2();
            }
          }
    
           }, {
             formatOptions: {
                 'extractAttributes': true,
                     'extractStyles': false
             } 
        });

  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
    Oui Zineb, on est bien d'accord sur vos propos. Et c'est comme cela que je contourne ce problème.
    Mais je reprends ma question initiale. Pourquoi le viewer1 n'arrive pas à finir le chargement de l'objet cloné?
    Cela ne me parait pas très logique.
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  4. #4
    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
    Bon, admettons que je reste sur mon ignorance....

    Je remets donc la création de la couche clonée (layerCommuneClone) dans le "loadend" du viewer1...

    Mais pouvez-vous me dire alors comment je dois faire pour que mon "Control.selectFeature" de mon viewer2 s'effectue après la création de layerCommuneClone?
    Voir ce cas de figure dans cette page de test
    Actuellement, une erreur se déclenche montrant que le control est créé, me semble-t-il, avant layerCommuneClone...
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  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
    Trop tard pour l'IGN. Je n'aurai pas de réponse ce week-end à cette nouvelle question...
    Mais on ne sait jamais.
    Sur cette nouvelle page, j'ai mieux agencé la chronologie des chargements>>> Plus d'erreur mais mon Control.SelectFeature sur le viewer2 ne prend pas en compte le layerCommuneClone ...

    Constat:
    1/ Dans l'onglet DOM de firebug, je vois bien que les deux couches sont prises en compte dans mon hoverControl...
    2/ De même, layerCommuneClone existe et possède tous les features de layerCommune...
    3/ layerCommuneClone (couche intitulé "Commune" dans le viewer2) doit être déselectionner pour que le Control.SelectFeature soit opérationnel sur la couche "Canton". Bizarre, non?
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  6. #6
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    Bonjour,
    Pas évident de se retrouver dans le code de cette page...
    En mettant le contrôle de sélection à l'intérieur de loadGUI2, on a plus besoin de déselectionner layerCommuneClone.

  7. #7
    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
    Pas évident de se retrouver dans le code de cette page...
    J'imagine vos difficultés...



    En mettant le contrôle de sélection à l'intérieur de loadGUI2, on a plus besoin de déselectionner layerCommuneClone.
    ????? Pas ici?
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  8. #8
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    Le code en question est en PJ.
    Fichiers attachés Fichiers attachés

  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
    C'est vraiment étrange?
    Sauf erreur de ma part votre page test en ligne est là
    Ici, elle n'est absolument pas opérationnelle. Notamment une erreur: "TypeError: b is undefined" qui semble sous-entendre une mauvaise chronologie de chargement des couches.

    Remarque: En étudiant ces problèmes de clone() de couche, j'étais parti sur le codage que vous préconisez (A savoir le control.selectFeauture dans loadGUI2) qui est bien l'approche de codage la plus "logique". Or devant l'erreur systématique ci-dessus décrite, j'ai été amené à mettre le control.selectFeauture dans loadGUI1 qui supprime l'erreur mais à d'autres inconvénients comme déjà dit...
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  10. #10
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    Ok j'ai saisi le problème mais je n'ai pas encore la solution
    Je vous tiens au courant rapidement!

  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
    j'ai saisi le problème mais...
    J'aime bien quand les techniciens de l'IGN me dise cela. Je me dis alors: "Arrête de t'attaquer à la falaise!". Des experts s'en chargent avec bien plus de compétence que toi...

    Quant aux délais: peu importe (j'ai aussi une solution de replis, bas de gamme). L'important c'est que des solutions (faciles, j'espère) seront apportées.

    Merci Zainab pour ta disponibilité.
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  12. #12
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    Bonjour,
    Après quelques recherches, il se trouve que c'est un bug OpenLayers:

    La méthode clone () ne définit pas l'attribut layer des features de la couche clonée (mis à null).
    Du coup, il faut le faire à la main après la création de la couche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for (var i = 0; i < layerCommuneClone.features.length; i++) {
    	layerCommuneClone.features[i].layer = layerCommuneClone;
    }
    Et là, ça fonctionne!
    En PJ un exemple simple qui illustre ce cas.
    Fichiers attachés Fichiers attachés

  13. #13
    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
    Merci infiniment, Zainab, pour ta peine.
    Mais je ne suis pas très sûr que ce bug OL soit à l'origine de ma question initiale. Qu'en penses-tu?
    Pour ta solution, c'était ma "solution de replis" mais c'est dommage que ce clonage ne soit pas nickel...

    Sinon, à ton avis, penses-tu que OL3 trainera ce problème?
    Merci.

    _____________
    - Le site de l'Observatoire de Haute-Loire (obs43.fr)
    - Voir une vidéo de présentation (2 min.) de l'Observatoire de Haute-Loire

  14. #14
    Membre averti
    Femme Profil pro
    Consultante SIG
    Inscrit en
    Mars 2011
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultante SIG

    Informations forums :
    Inscription : Mars 2011
    Messages : 233
    Points : 356
    Points
    356
    Par défaut
    J'ai plutôt répondu à cette problématique:
    layerCommuneClone (couche intitulé "Commune" dans le viewer2) doit être déselectionner pour que le Control.SelectFeature soit opérationnel sur la couche "Canton". Bizarre, non?
    Je regarde pour la question initiale...

Discussions similaires

  1. Clone()
    Par Jenaye dans le forum Langage
    Réponses: 3
    Dernier message: 02/11/2005, 22h49
  2. Réponses: 2
    Dernier message: 29/10/2005, 12h51
  3. Clone Matlab
    Par devmat dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 30/04/2005, 16h44
  4. [VB.NET] DataTable.Clone ne veut rien savoir
    Par anthony70 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 09/12/2004, 19h57

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