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 :

API IGN v3 et OL3 - Ecouteur du marqueur au clic


Sujet :

IGN API Géoportail

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Points : 5
    Points
    5
    Par défaut API IGN v3 et OL3 - Ecouteur du marqueur au clic
    Bonjour,

    Je souhaiterai savoir s'il était possible d'attraper l'événement au click d'un marker ajouté via l'API IGN v3 pour Open Layers 3 lorsqu'aucun outil d'édition n'est sélectionné.

    J'ai testé avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ol.map.getViewport().addEventListener("click", function(e) {
                        ol.map.forEachFeatureAtPixel(AppComponent.map.getEventPixel(e), function(feature, layer) {
                            if(layer){
                                //console.log(feature);
                            }
                        });
                    });
    Mais celui-ci se déclenche que les outils d'édition soient sélectionnés ou non. En outre si deux markers se superposent, l'événement est déclenché à chaque fois.
    Savez-vous s'il y aurait une possibilité pour faire autrement ?

    D'avance merci

  2. #2
    Membre confirmé Avatar de lboulanger
    Femme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2014
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2014
    Messages : 262
    Points : 529
    Points
    529
    Par défaut
    Bonjour,

    Mais celui-ci se déclenche que les outils d'édition soient sélectionnés ou non.
    Une piste serait de vérifier si d'autres interactions de type "select" sont actives sur la couche des outils de dessin, ou encore d'associer vous-même des écouteurs d'événement au clic sur les boutons d'activation des modes d'édition, et de les capturer pour déterminer si vous êtes en mode édition ou non.

    En outre si deux markers se superposent, l'événement est déclenché à chaque fois.
    Savez-vous s'il y aurait une possibilité pour faire autrement ?
    Si vous utilisez ol.map.forEachFeatureAtPixel, le callback sera en effet appelé pour chaque feature, donc chaque marker.
    D'après la documentation d'Ol3, il est possible de spécifier une couche spécifique (option layerFilter), si les markers proviennent de couches différentes.
    Si vous souhaitez afficher seulement l'information du premier marker retourné par la fonction, vous pouvez gérer un compteur (ex. var i=0; ), à incrémenter à chaque appel du callback, et n'exécuter votre fonction que pour le premier élément retourné.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Novembre 2016
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Novembre 2016
    Messages : 3
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup !

    Si ça peut intéresser du monde, voilà le code final :

    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
    map.on('singleclick', function(evt) {
                        var noInteraction = true;
                        map.getInteractions().forEach(function(interaction) {
                            if (interaction instanceof ol.interaction.Select
                                || interaction instanceof ol.interaction.Modify
                                || interaction instanceof ol.interaction.Draw) {
                                noInteraction = false;
                            }
                        });
                        if (noInteraction) {
                            var feature = map.forEachFeatureAtPixel(evt.pixel,
                                function(feature, layer) {
                                    return [feature, layer];
                                });
                            if (feature) {
                                console.log(feature);
                            }
                        }
                    });

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. API IGN - OL3 - Réglage markers et zoom - Codage / Geocodage inverse
    Par rgodin dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 29/11/2016, 21h50
  2. API IGN et API Google sur même page
    Par laguite51 dans le forum IGN API Géoportail
    Réponses: 5
    Dernier message: 20/04/2010, 02h25
  3. API IGN et GPX
    Par lamebget dans le forum IGN API Géoportail
    Réponses: 11
    Dernier message: 07/04/2010, 18h10
  4. API IGN sur GpsGateServer
    Par kapycho dans le forum IGN API Géoportail
    Réponses: 3
    Dernier message: 30/07/2009, 18h51
  5. api ign, des codeurs ?
    Par jeroen dans le forum APIs
    Réponses: 4
    Dernier message: 27/04/2009, 10h25

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