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 Sun 08 August 2010 22:47

lermit
Juste Inscrit !
Date d'inscription: 8 Aug 2010
Messages: 2

[OpenLayers] fermeture popup apres zoo, drag-drop,...

bonjour à tous,

c'est la premier fois que j'utilise de la cartographie dans un site  et principalement OpenLayers.
je met en place un menu flottant (popup Anchored) après un clic droit.
le menu s'affiche correctement. Je souhaite avoir de crois de fermeture mais il disparait après clic, dlclic, drag-drop, zoom curseur sortent la carte,...

je met si joint le code que j'ai déjà fait.
j'admets qu'il peut êtres perfectible et les suggestions sont les bien venue.

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.onclick
            }, this.handlerOptions
        );
    }, 

    onclick: function(e) {
        popup1 = new OpenLayers.Popup.FramedCloud(
            "popupInfo",
            map.getLonLatFromViewPortPx(e.xy),
            new OpenLayers.Size(200,200),
            "test popupinfo",
            null,
            true,
            null);
        map.addPopup(popup1,true);
    }
});

var map, controls; //complex object of type OpenLayers.Map

function createMap() {
    
    var myNavControl = new OpenLayers.Control.Navigation({
            handleRightClicks: true
        });

    map = new OpenLayers.Map ("map", {
        controls:[
            myNavControl,
            //new OpenLayers.Control.Navigation(),
            new OpenLayers.Control.PanZoomBar(),
            new OpenLayers.Control.LayerSwitcher(),
            new OpenLayers.Control.Attribution()],
        maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
        maxResolution: 156543.0399,
        numZoomLevels: 40,
        units: 'm',
        projection: new OpenLayers.Projection("EPSG:900913"),
        displayProjection: new OpenLayers.Projection("EPSG:4326")
    } );

    myNavControl.handlers.click.callbacks.rightclick = function(e) {
        popup = new OpenLayers.Popup.Anchored(
            "floatingmenu",
            map.getLonLatFromViewPortPx(e.xy),
            new OpenLayers.Size(200,100),
            "<div id='floatingmenuitem'>Itinéraire à partir de ce lieu</div><div id='floatingmenuitem'>Itinéraire vers ce lieu</div><div id='floatingmenuitem'>Centrer la carte ici</div><div id='floatingmenuitem'>Prevision météo d'ici</div>",
            null,
            false,
            null);
        map.addPopup(popup,true); 
    }

    click =  new OpenLayers.Control.Click({
                        handlerOptions: {
                            "single": true
                        }
                    });
    var click = new OpenLayers.Control.Click();
        map.addControl(click);
        click.activate();
    
    // Define the map layer
    // Here we use a predefined layer that will be kept up to date with URL changes
    layerMapnik = new OpenLayers.Layer.OSM.Mapnik("Mapnik");
    map.addLayer(layerMapnik);
    layerTilesAtHome = new OpenLayers.Layer.OSM.Osmarender("Osmarender");
    map.addLayer(layerTilesAtHome);
    layerCycleMap = new OpenLayers.Layer.OSM.CycleMap("CycleMap");
    map.addLayer(layerCycleMap);
    layerMarkers = new OpenLayers.Layer.Markers("Markers");
    map.addLayer(layerMarkers);
    

    var proj = new OpenLayers.Projection("EPSG:4326");
    if (typeof(poseList)!="undefined" && poseList.length > 0) {
        var vectorLayer = new OpenLayers.Layer.Vector("Simple Geometry");

        var points = [];
        for (var i = 0; i < poseList.length; i++) {
            var point = new OpenLayers.Geometry.Point(poseList[i][1],poseList[i][0]).transform(proj, map.getProjectionObject());
            points.push(point);
        }
        var geometry = new OpenLayers.Geometry.LineString(points);
        var feature = new OpenLayers.Feature.Vector(geometry, null, {strokeColor: "red", strokeOpacity: 1, strokeWidth: 5 });
        vectorLayer.addFeatures(feature);
        map.addLayer(vectorLayer);
    }

    var lonLat = new OpenLayers.LonLat(lon, lat).transform(new OpenLayers.Projection("EPSG:4326"), map.getProjectionObject());
    map.setCenter(lonLat, zoom);
}

j'ai pensé que je pourrai fermer le menu à la parte de sont focus mais je ne sais pas s'il est possible.

quelle aurai une idée pour m'aider?
toutes les idée sont les bien venue

merci d'avance de votre aide,

lermit

Hors ligne

 

Pied de page des forums

Powered by FluxBB