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

GEODATA DAYS 2024

#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: 9855
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