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 :

SelectFeature en hover (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 SelectFeature en hover (encore!)
    Encore moi!!!!

    Sur cette page de test qui a un comportement plutôt normal à mes yeux, j'aimerais arriver à :
    1/ Au survol, ma souris affiche la commune en son style "temporary" comme maintenant MAIS que le canton survolé se mette AUSSI dans son style "temporary" (c'est à dire en rouge avec une opacité de 0.7).
    Est-ce possible? Et comment?
    2/ Et secondairement (ce qui devrait se déduire d'une réponse de 1/), récupérer conjointement feature.attributes.COMM.value de la couche commune et feature.attributes.Name.value de la couche canton pour l'afficher via affich().

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut
    J'ai un comportement bizarre lorsque je promène rapidement la souris : des communes restent en vert foncé.
    Firefug indique une erreur ligne 218. Dans cette fonction affich, si feature n'est pas défini, il faudrait faire un return.
    Mais dans le cas présent, feature est défini mais pas feature.attributes.Name.value donc ou c'est une erreur du kml commune ou ce n'est pas un feature du kml commune !

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut
    J'ai remplacé Name par CANT et cela fonctionne mieux : http://atlasnw.free.fr/geoportail/exemples/cmail3.html

    Le canton ne passe pas en rouge mais comme les communes recouvrent intégralement les cantons, il ne doit pas y avoir de propagation de l'évènement à la couche inférieure.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut
    Une question : comment peut-on déduire de la valeur de "CANT" le canton ?

  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
    'ai un comportement bizarre lorsque je promène rapidement la souris : des communes restent en vert foncé.
    Firefug indique une erreur ligne 218. Dans cette fonction affich, si feature n'est pas défini, il faudrait faire un return.
    Mais dans le cas présent, feature est défini mais pas feature.attributes.Name.value donc ou c'est une erreur du kml commune ou ce n'est pas un feature du kml commune !
    Tes remarques sont justifiées.
    Mais comme je voulais récupérer des données sur les deux couches, j'ai mis dans affich() un feature.attributes.Name qui va chercher Name dans le kml des cantons, et un feature.attributes.COMM qui va chercher COMM dans le kml des communes.
    Comme pour l'instant, je n'arrive pas jongler correctement sur les 2 kml, il y a obligatoirement une erreur suivant les couches actives. Ce qui doit influer sur le comportement erratique de la souris....

    J'ai remplacé Name par CANT
    Effectivement si tu remplaces Name par CANT (qui se trouve sur le kml des communes... C'est ok. Mais je souhaite pouvoir communiqué avec les 2 kml et donc à terme, je dois récupérer COMM (donc aussi CANT) sur le kml des communes et Name sur le kml des cantons.

    de propagation de l'évènement à la couche inférieure.
    C'est mon problème. Mais est-ce possible?

    omment peut-on déduire de la valeur de "CANT" le canton ?
    Ce n'est pas mon problème, car CANT se réfère à un tableau et c'est les indices pour trouver l'intitulé du canton... Là, je me débrouille...

    En fait je souhaite pouvoir afficher la commune (en vert soutenu) sur son canton (en rouge soutenu) (A ce moment là, je devrais avoir accès aux différents feature.attributes. des deux couches...

  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
    Je me suis repenché un peu sur ton exemple, et je crois comprendre ce que tu envisages de faire, faute de pouvoir propager l'évènement à travers les couches... Même si je ne saisis peut-être pas tous les cheminements de ta pensée....

    Dans ce cas, sauf incompréhension de ma part, et comme tu me le demandes, tu as bien besoin d'avoir la correspondance entre CANT (de commune.kml) et Name (de canton.kml). Ce que je ne comprenais pas à ma précédente réponse.

    Alors voilà:
    idCan = feature.attributes.CANT.value; donne l'indice des noms de cantons se trouvant dans var Cant = ["Allègre", "Auzon", "Bas-en-Basset", "Blesle", "Brioude Nord", "Cayres", "La Chaise-Dieu", "Craponne-sur-Arzon", "Fay-sur-Lignon", "Langeac", "Lavoûte-Chilhac", "Loudes", "Le Monastier-sur-Gazeille", "Monistrol-sur-Loire", "Montfaucon", "Paulhaguet", "Pinols", "Pradelles", "Le Puy Ouest", "Le Puy Sud-Est", "Retournac", "Saint-Didier-en-Velay", "Saint-Julien-Chapteuil", "Saint-Paulien", "Saugues", "Solignac-sur-Loire", "Tence", "Vorey", "Yssingeaux", "Aurec-sur-Loire", "Le Puy Est", "Le Puy Nord", "Le Puy Sud-Ouest", "Brioude-Sud", "Sainte-Sigolène"];
    via nomCan = Cant[parseInt(idCan, 10) - 1];

    Ces noms de canton sont repris dans Name de la couche des cantons.
    Ce qui n'est peut-être pas top (comparaison de chaines de caractères avec erreur possible d'orthographe...) alors qu'il faudrait peut-être mieux que je remplace Name par un autre champ numérique correspondant directement à CANT.... A voir.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    2 124
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 2 124
    Points : 1 764
    Points
    1 764
    Par défaut
    Mais cela fonctionne, cf toujours ma page d'essai.

  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
    Ecoute, je ne sais pas ce qui s'est passé.... A l'heure de mon précédent message, il n'y avait pas de synchronisme parfait.
    Mais en ce moment, cela semble effectivement ok.
    Je teste encore et j'étudie ta proposition.
    Merci.

  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
    Sur cette page 0 de référence le code de mga_geo un poil peaufiné.

    A partir de là, j'ai remplacé les deux ajouts Layer de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    layerXXX = viewer.getMap().addLayer(
        "KML",
        "Canton",
    "kml/Obs43canton.kml"....
    par leur mise dans le chargement des overlays de l'interfaceviewer d'une manière encore classique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     ...}
    				},
    				 overlays:{
    					 'KML' : [ {
    						name : "Canton",
    						url : "kml/Obs43canton.kml",
    						options .....
    Puis en leur donnant les noms requis de cette manière tout aussi classique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    layerXXX = viewer.getMap().getLayersByName('Canton')[0];
    Ce qui donne cette page
    identique à la page 0 de référence ci-dessus (sauf erreur de ma part) à part les deux modifs expliquées ci-dessus.
    Je pensais que cette transformation d'écriture était strictement équivalente, mais le résultat montre que non. La deuxième page ne "prend pas en compte les modifs de mga_geo"???? Pourquoi???

  10. #10
    Membre confirmé Avatar de acarme
    Femme Profil pro
    Ingénieur d'études en Géomatique
    Inscrit en
    Avril 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études en Géomatique
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 237
    Points : 522
    Points
    522
    Par défaut
    Bonjour,

    essaye de modifier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clickCtrl = new OpenLayers.Control.SelectFeature(layerCommune, clickCtrlOpts);
    en mettant ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    clickCtrl = new OpenLayers.Control.SelectFeature([layerCommune], clickCtrlOpts);
    J'ai testé chez moi et ça fonctionne...

  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
    En effet!
    Même si je ne comprends pas bien pourquoi... Merci.

  12. #12
    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
    Reprenons...
    Si je reprends les corrections de mga_geo, j'ai cette page qui répond à ma première demande... Parce que la couche Commune est en opacity=0.2

    Si maintenant je souhaite une opacity=1 pour la couche Commune, la couche Canton est naturellement cachée puisque "en-dessous".
    Je permute alors le niveau de chargement des 2 couches (voir cette nouvelle configuration) :
    1/ La couche Commune est bien opaque,
    2/ La couche Canton est bien chargé en dernier (voir l'ordre dans le LayersPanel). Mais ce qui ne se traduit pas dans la représentation graphique. Et pas moyen de mettre la couche Canton au-dessus de la couche Commune!
    Cela me semble contraire à ce que j'avais cru comprendre dans la gestion des couches dans le geoportail...

    Quelques explications? Merci.

  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
    Pas de réponse à mon précédent message???
    Après quelques essais, il s'avère que le moyen pour retrouver une gestion correcte des couches est d'ajouter cette couche dans le controleur de clic!!!!!
    Ce qui casse la logique initiale! Et complique (pour le bidouilleur que je suis) la gestion des couches avec des objets réagissant simplement au survol (et non au clic!)...

    Ne serait-ce pas un défaut (je n'ose évoquer un bug!)?
    L'avis de Zainab m'intéresserait!

  14. #14
    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
    Bonjour,

    je ne suis pas Zainab, mais je constate qu'il se passe effectivement quelque chose d'étrange sur lequel on va investiguer.

    Il semble qu'indépendamment de la gestion du hover et du click (en désactivant le code qui crée les deux contrôles), il y a effectivement un problème de gestion de l'ordre des couches avec le layerSwitcher car, que la couche canton soit au-dessus ou en dessous de la couche commune, cette dernière apparaît systématiquement en dessous. sauf quand la couche canton est sous la couche cartes : dans ce cas là, on ne la voit logiquement plus...

    on va déjà essayer de regarder ce qui se passe à ce niveau. Peut-être Zainab pourra-t-elle y jeter un oeil...

  15. #15
    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 pour ta réponse, gcebelieu qui me conforte dans mes positions.
    1/ J'en appelais à Zainab, car à ce que j'ai pu déduire de mes lectures sur ce forum (voire de sa présentation publique du configurateur de l'API en novembre dernier), il me semblait qu'elle était la plus concernée pour répondre...
    2/ Il se peut que le problème se porte sur le layerSwitcher. Mes essais n'ont pas portés sur ce point... Mais dans mon cas, je souhaite vraiment :
    - 1/ Retrouver la logique d'autrefois, à savoir que l'empilement des couches soit toujours fonction de l'ordre d'appel indépendamment des autres controles appelés.
    - 2/ Et par conséquent, que la gestion des clics et celle du survol soient indépendante l'une de l'autre et surtout qu'elles n'influent pas sur l'empilement des couches...

  16. #16
    Membre confirmé Avatar de acarme
    Femme Profil pro
    Ingénieur d'études en Géomatique
    Inscrit en
    Avril 2013
    Messages
    237
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études en Géomatique
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 237
    Points : 522
    Points
    522
    Par défaut
    Après plusieurs tests, il semblerait que le "clickCtrl" force les communes au premier plan..

    Par contre, en jouant sur le Style, on peut tricher :

    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
    39
    40
    41
    42
      var styleCommune = new OpenLayers.StyleMap({
    			"default" : new OpenLayers.Style({
    				fillColor : '#0f0',////'#00ff00',//vert
    				fillOpacity :0,
    				strokeOpacity : 0.5,
    				strokeColor: '#333333'
    			}, {
    				context : {
    				}
    			}),
    			"temporary" : new OpenLayers.Style({
    				fillOpacity :0.7,
    				fillColor : '#0f0',
    				strokeOpacity : 1,
    				strokeWidth:2,
    				strokeColor: '#000'}, {
    				context : {
    				}
    								})
    			});
    		 var styleCanton = new OpenLayers.StyleMap({
    			"default" : new OpenLayers.Style({
    				fillColor : '#0f0',////'#00ff00',//vert
    				fillOpacity : 1,
    				strokeWidth:5,
    				strokeOpacity : 1,
    				strokeColor: '#f00'
    			}, {
    				context : {
    				}
    			}),
    			"temporary" : new OpenLayers.Style({
    				fillColor : '#f00',
    				fillOpacity : 1,
    				 strokeWidth:5,
    				strokeOpacity : 1,
    				strokeColor: '#f00'}, {
    				context : {
    				}
    								})
    			})	;

  17. #17
    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 Acarme (pourquoi le logo de l'IGN n'apparait pas sous ton pseudo comme cela semble être le cas pour tes collègues?) pour ta réponse qui confirme aussi mes constats de dysfonctionnement... Et qui complique la gestion de la souris (clic et hover) ou l'empilement des couches quand on sort d'un schéma classique...
    Jouer sur le style est un pis aller mais qui ne peut satisfaire ma demande qui dépasse ma simple page de test...

    Mais je vois qu'on se penche sur le problème... Et c'est tant mieux!
    Merci.

  18. #18
    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 Acarme (pourquoi le logo de l'IGN n'apparait pas sous ton pseudo comme cela semble être le cas pour tes collègues?) pour ta réponse qui confirme aussi mes constats de dysfonctionnement... Et qui complique la gestion de la souris (clic et hover) ou l'empilement des couches quand on sort d'un schéma classique...
    il semblerait que le "clickCtrl" force les communes au premier plan
    Oui. Mais la remarque de gcebelieu sur le layerSwitcher est aussi pertinente et pourrait être l'origine du problème...

    Jouer sur le style est un pis aller mais qui ne peut satisfaire ma demande qui dépasse ma simple page de test...

    Mais je vois qu'on se penche sur le problème... Et c'est tant mieux!
    Merci.

  19. #19
    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
    Merci Acarme (pourquoi le logo de l'IGN n'apparait pas sous ton pseudo comme cela semble être le cas pour tes collègues?)
    apparemment, pour avoir droit à un avatar, on doit avoir un minimum de 200 points sur developpez.net... du coup, il faut voter pour elle pour voir apparaître le logo

    Oui. Mais la remarque de gcebelieu sur le layerSwitcher est aussi pertinente et pourrait être l'origine du problème...
    Alors :
    1. pour le layer switcher, j'ai débusqué (et corrigé) un bug de l'api : on n'arrivait pas à faire remonter l'avant dernière couche sur la dernière (celle du haut), ce qui provoquait une erreur javascript dans la console. On pourra le faire avec la version 2.1 de l'API. En attendant, tu peux utiliser celle qui sera déployée sur depot demain et qui contiendra le correctif :

    http://depot.ign.fr/geoportail/api/d...T/Geoportal.js

    2. pour l'ordre des couches canton et commune, je converge vers acarme : il y a un soucis au niveau du Handler de selection de Feature qui est appliqué par défaut sur les couches vecteurs et qui leur met le même zindex => du coup, les deux couches canton et commune sont au même niveau d'empilement quelle que soit leur place dans le layer switcher...

    Ça se passe au niveau de OpenLayers. Je n'ai pas encore bien compris pourquoi ça se produisait, mais en attendant, tu peux désactiver ce fonctionnement intégrant le code suivant en début de ton code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    OpenLayers.Handler.Feature= OpenLayers.overload(OpenLayers.Handler.Feature, {
        moveLayerToTop: function() {
        },
        moveLayerBack: function() {
        }
    }) ;
    Ça devrait rétablir le comportement que l'on attend logiquement dans l'agencement des couches.

  20. #20
    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
    apparemment, pour avoir droit à un avatar, on doit avoir un minimum de 200 points sur developpez.net... du coup, il faut voter pour elle pour voir apparaître le logo
    Je n'y comprends pas grand chose à ces questions futiles de points sur développez.net! Mais je vais voter pour cette pauvre acarme qui n'a pas son avatar comme les grands! Mais elle n'est qu'à 7 points, la pauvre! Cela va demander du temps, car il me semble qu'on a droit qu'à un vote par message!

    Sinon merci pour ta réponse très positive que je vais tester ces jours-ci. Je te tiendrai au courant alors....

Discussions similaires

  1. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  2. choix sgbdr (encore!)
    Par _Gabriel_ dans le forum Décisions SGBD
    Réponses: 9
    Dernier message: 23/03/2004, 10h39
  3. TEdit (encore)
    Par dj.motte dans le forum C++Builder
    Réponses: 5
    Dernier message: 23/12/2002, 19h02
  4. TPalette (encore)
    Par Flipper dans le forum Langage
    Réponses: 3
    Dernier message: 28/11/2002, 23h45

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