Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#1 Tue 23 November 2010 09:50

nico-29
Participant assidu
Lieu: Brest
Date d'inscription: 2 Jun 2006
Messages: 185

[OpenLayers] controle click et barre d'outils

Bonjour,

J'ai un objet panel dans lequel je met des contrôles pour interagir avec ma carte. j'ai un contrôle Pan et un contrôle ZoomBox.

Code:

toolbar = new OpenLayers.Control.Panel({div: document.getElementById("toolbuttons")});
    nav = new OpenLayers.Control.NavigationHistory({id: 'navCtrl', 'displayClass': 'olControlNavigationHistory', title:'Historique'});
    nav.previousOptions = {title:'Précédent'};
    controls = {
            move : new OpenLayers.Control.Navigation({id: 'moveCtrl', 'displayClass': 'olControlNavigation', title:'Pan'}),
            zbox : new OpenLayers.Control.ZoomBox({id: 'zboxCtrl', 'displayClass': 'olControlZoomBox', title:'Zoom Box'}),
            fullExtent : new OpenLayers.Control.ZoomToMaxExtent({id: 'fExtentCtrl', 'displayClass': 'olControlFullExtent', title:'Full extent'})
        }
    for (var key in controls) {
        toolbar.addControls([controls[key]]);
    }    

    map.addControl(toolbar);
    toolbar.activateControl(controls.move);

Je défini un contrôle Click sur ma carte qui doit afficher un popup à l'endroit où on a cliqué:

Code:

OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, {                
        defaultHandlerOptions: {
                    'single': true,
                    'double': false,
                    'pixelTolerance': 0,
                    'stopSingle': false,
                    'stopDouble': false
                    },

        initialize: function(options) {
                    this.handlerOptions = OpenLayers.Util.extend({}, this.defaultHandlerOptions);
                    OpenLayers.Control.prototype.initialize.apply(this, arguments); 
                    this.handler = new OpenLayers.Handler.Click(
                                        this, 
                                        {'click': this.trigger}, 
                                        this.handlerOptions
                                        );
        }, 

        trigger: function(e) {
            var lonlat = map.getLonLatFromViewPortPx(e.xy);
            try {
                map.removePopup(popup);
                popup.destroy();
                popup = null;
            }
            catch(error){}
            if (toolbar.controls[0].active==true) {showPopup(lonlat);}
        }
    });    // fin OpenLayers.Control.Click


var click = new OpenLayers.Control.Click();
    map.addControl(click);
    click.activate();

par défaut, le contrôle Pan est activé, quand je clique sur la carte, j'ai bien le popup qui s'affiche.
mais si j'utilise le contrôle ZoomBox, et que je clique ensuite sur le bouton Pan pour utiliser ce contrôle, quand je clique sur la carte, rien ne se passe.

Pourquoi?

Merci,

Nico

Hors ligne

 

#2 Tue 23 November 2010 09:56

Yves
Membre du bureau
Lieu: Aix-les-Bains
Date d'inscription: 22 Mar 2006
Messages: 9869
Site web

Re: [OpenLayers] controle click et barre d'outils

Bonjour,

Je pense que quand tu cliques sur le bouton zoombox, celui-ci désactive les autres contrôle. Quand tu cliques sur le bouton pan après, celui-ci n'active pas le contrôle "click". Le contrôle "click" est seulement activé au chargement de la page.

Y.


Yves Jacolin, bénévole de l'association GeoRezo.net, agit au nom et pour le compte de l'association - Partageons ce qui nous départage !!  - GeoRezo vous aide ? Aidez GeoRezo !

Hors ligne

 

#3 Tue 23 November 2010 16:02

nico-29
Participant assidu
Lieu: Brest
Date d'inscription: 2 Jun 2006
Messages: 185

Re: [OpenLayers] controle click et barre d'outils

j'ai rajouté un événement sur le contrôle zoomBox pour réactiver le controle click :

Code:

controls.zbox.events.on({
                  'deactivate': function(evt) {
                            var click = new OpenLayers.Control.Click();
                            map.addControl(click);
                            click.activate();
                            }
    });

du coup, quand je reprend le controle pan, j'ai bien un popup qui s'affiche, mais quand je veux le fermer, il y en a un autre qui s'ouvre à l'endroit où j'ai cliqué sur la croix 'close' du premier popup, et ainsi de suite ...

une idée de solution?

Nico

Hors ligne

 

Pied de page des forums

Powered by FluxBB