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 11 February 2014 14:50

eamon250d
Juste Inscrit !
Date d'inscription: 11 Feb 2014
Messages: 2

Info-bulle onMouseOver

Bonjour ,
Je travail sur une petite application et je voulais ajouter info-bulle au

moment de passage de la souris

Quelques choses proches de ce site :
http://www.geotests.net/test/olsymb/index2.html

J'ai essayé de télécharger tout les fichiers en local pour executer l'example

mais ca ne marche pas
Je demande si vous avez des pistes
Merci

Hors ligne

 

#2 Tue 11 February 2014 16:23

Laurent Jégou
Participant assidu
Lieu: Toulouse
Date d'inscription: 5 Sep 2005
Messages: 447
Site web

Re: Info-bulle onMouseOver

Bonjour, cet exemple, dont je suis l'auteur, est décrit dans cet article du PortailSIG :

http://www.portailsig.org/content/carte … et-postgis

(mais il s'agit ici de symboles plutôt que de polygones).

Les info-bulles sont des objets popups proposés dans l'API OpenLayers.


Enseignant-Chercheur en Géomatique
UT2J - Dept Géo / CNRS UMR LISST-Cieu / Master Sigma - Revue Mappemonde

Hors ligne

 

#3 Tue 11 February 2014 16:57

eamon250d
Juste Inscrit !
Date d'inscription: 11 Feb 2014
Messages: 2

Re: Info-bulle onMouseOver

Re-Bonjour ,
Je vous remercie pour votre réponse rapide et votre exemple
J'ai essayé d’intégrer votre code avec le mien , mais il me semble qu'il y'a un conflit
Voici mes deux fichiers JS principal , si vous pouvez me dire vos remarques
Merci
Map.js

Code:

Ext.define('CF.controller.Map', {
    extend: 'Ext.app.Controller',

    models: ['Donnee','Symbologie'],
    stores: ['Donnees'],
    views: ['Bouton'],
    
    requires: [
               'CF.controller.ChangeEchelleAction',
               'CF.controller.ChangePeriodeAction',
           ],
           
    mapPanel: null,
    menuHaut: null,
    menuBas: null,

    refs: [
        {ref: 'chart', selector: 'chart'},
        {ref: 'grid', selector: 'grid'}
    ],

    init: function() {
        var me = this;
        
        
        
        function addTooltip(value, metadata, record, rowIndex, colIndex, store){
            metadata.attr = 'ext:qtip="' + value + '"';
            return value;
        }
        
        ctrl = this;

        this.control({
            'cf_mappanel': {
                'beforerender': this.onMapPanelBeforeRender
            },
            'cf_menu': {
                'beforerender': this.onMenuBeforeRender
            }
        }, this);
        
        gcSymbologie = Ext.create('CF.model.Symbologie');
    },

    onMapPanelBeforeRender: function(mapPanel, options) {
        this.mapPanel = mapPanel;
        
        var me = this;

        var layers = [];
        
        if(gEchelle==1) {
            mapPanel.map.projection = 'EPSG:4326';
            mapPanel.map.maxExtent = new OpenLayers.Bounds(-135,15,-55,83);
        } else {
            mapPanel.map.projection = 'EPSG:32188';
            mapPanel.map.maxExtent = new OpenLayers.Bounds(238991, 5009000, 339009, 5094000);
        }
        
        // La carte est générée par Mapserver via Mapscript. 
        
        
         var wmsMunicipalites = new OpenLayers.Layer.WMS(
                  "fondcarte",
                  //"http://127.0.0.1/test_marieeve.map&",
                  "http://127.0.0.1/carte/"+gIndicateur+"/"+gEchelle+"/"+gPeriode,
                  {layers: 'carte_observatoire', format: 'image/png'},
                  {singleTile: true, ratio: 1.2} 
              );
          layers.push(wmsMunicipalites);
          

        var style = new OpenLayers.Style({
            strokeWidth: 0,
            fillColor: "#999999",
            fillOpacity: 0,
            cursor: "pointer",
           
            pointRadius: 8,
            graphicName: "circle"
        });
        var styleMap = new OpenLayers.StyleMap({
            'default': style 
        });
        styleMap.styles.select.defaultStyle.pointRadius = 8;
        
        var vecLayer = new OpenLayers.Layer.Vector("vector", {
            styleMap: styleMap,
            protocol: new OpenLayers.Protocol.HTTP({
                url: "../web/app_dev.php/json/indicateur/"+gIndicateur+"/"+gEchelle+"/"+gPeriode,
                format: new OpenLayers.Format.GeoJSON()
            }),
            
            strategies: [new OpenLayers.Strategy.Fixed()]
        });
        
        gcSymbologie.getSymbologie();
        layers.push(vecLayer);
        me.getDonneesStore().bind(vecLayer);
        mapPanel.map.addLayers(layers);
        map = mapPanel.map;
        this.chargeEchellesEtPeriodes();
    },

    onMenuBeforeRender: function(menu, options) {
        if(menu.nom=='haut') {
            this.menuHaut = menu;
        } else if(menu.nom=='bas') {
            this.menuBas = menu;
        }
    },
    
    onLaunch: function() {
        var me = this;
    },

    chargeEchellesEtPeriodes: function() {
        var protocol = new OpenLayers.Protocol.HTTP(
                {
                    url: "../web/app_dev.php/json/periodesEchelles/"+gEchelle+"/"+gIndicateur,
                    format: new OpenLayers.Format.JSON()
                }
            );
        protocol.read({callback: this.retourChargeEchellesEtPeriodes, scope: this});
    },
    
    retourChargeEchellesEtPeriodes: function(response) {
        gAIndInfos = response.features['indinfos'];
        gADescEchelles = response.features['descech'];
        
        Ext.getCmp('btnAnalyse').setAnalyse(response.features['analyse']);
        
        this.menuBas.removeItemsGroupe();
        this.menuHaut.removeItemsGroupe();
        
        var echellesDisponibles = null;
        var btnsPeriodes = [];
        for(var i=0; i<gAIndInfos.length; i++) {
            var paramsAction = {
                annee: gAIndInfos[i].periode,
                toggleGroup: "periodes"
            };
            
            if(gAIndInfos[i].periode == gPeriode) {
                paramsAction.pressed = true;
                paramsAction.checked = true;
                
                echellesDisponibles = gAIndInfos[i].echelles;
            }
            
            if(Ext.Array.indexOf(gAIndInfos[i].echelles, gEchelle) == -1) {
                paramsAction.disabled = true;
            } else {
                paramsAction.disabled = false;
            }
            
            btnsPeriodes.push(Ext.create('CF.view.Bouton', Ext.create('CF.controller.ChangePeriodeAction', paramsAction)));
        }
        this.menuBas.addItemsGroupe(btnsPeriodes);

        var btnsEchelles = [];
        for(var idEch in gADescEchelles){
            var paramsAction = {
                idEchelle: idEch,
                txtEchelle: gADescEchelles[idEch]['desc'],
                toggleGroup: "echelles"
            };

            if(idEch == gEchelle) {
                paramsAction.pressed = true;
                paramsAction.checked = true;
            }
            
            if(Ext.Array.indexOf(echellesDisponibles, parseInt(idEch)) == -1) {
                paramsAction.disabled = true;
            } else {
                paramsAction.disabled = false;
            }
            
            btnsEchelles.push(Ext.create('CF.view.Bouton', Ext.create('CF.controller.ChangeEchelleAction', paramsAction)));
        }
        this.menuHaut.addItemsGroupe(btnsEchelles);
    }
});

Symbologie.js

Code:

Ext.define('CF.model.Symbologie', {
    
    getSymbologie: function() {
        ctrl.getDonneesStore().removeAll();
        gcSymbologie.infosClasses = null; 
        var protocolSymbo = new OpenLayers.Protocol.HTTP(
                {
                    url: "../web/app_dev.php/json/symbologie/"+gIndicateur+"/"+gEchelle+"/"+gPeriode,
                    format: new OpenLayers.Format.JSON()
                }
            );
        protocolSymbo.read({callback: gcSymbologie.assigneSymbologie });
    },

    assigneSymbologie: function(response) {
        var vecLayer = map.getLayersByName('vector')[0];
        vecLayer.styleMap.styles["default"].rules = Array();        
        infosClasses = response.features;

        for(var i=0; i<infosClasses.length; i++) {
            var regle = new OpenLayers.Rule({
                filter: new OpenLayers.Filter.Comparison({
                    type: OpenLayers.Filter.Comparison.BETWEEN,
                    property: "valeur",
                    lowerBoundary: infosClasses[i].min, 
                    upperBoundary: infosClasses[i].max
                }),
                symbolizer: {
                    fillColor: infosClasses[i].couleurhex
                }
              });
            vecLayer.styleMap.styles["default"].addRules([regle]);
        }

        var regle = new OpenLayers.Rule({
            filter: new OpenLayers.Filter.Comparison({
                type: OpenLayers.Filter.Comparison.IS_NULL,
                property: "valeur"
            }),
            symbolizer: {fillColor: '#D2D2D2'}
          });
        vecLayer.styleMap.styles["default"].addRules([regle]);
        vecLayer.protocol = new OpenLayers.Protocol.HTTP({
            url: "../web/app_dev.php/json/indicateur/"+gIndicateur+"/"+gEchelle+"/"+gPeriode,
            format: new OpenLayers.Format.GeoJSON()
        });    
        vecLayer.protocol.read({callback: gcSymbologie.reafficherLayers });
        window.location.hash = '#/'+ gIndicateur+"/"+gEchelle+"/"+gPeriode;
    },
    
    reafficherLayers: function(response) {
        var vecLayer = map.getLayersByName('vector')[0];
        map.removeLayer(vecLayer);
        map.addLayer(vecLayer); 
        var fondcarte = map.getLayersByName('fondcarte')[0];
    
        map.projection = new OpenLayers.Projection('EPSG:'+gADescEchelles[gEchelle]['srid']);
        console.log('map.projection :   33');
        console.log('map.projection');
        map.displayProjection = new OpenLayers.Projection('EPSG:'+gADescEchelles[gEchelle]['srid']);
        fondcarte.projection = new OpenLayers.Projection('EPSG:'+gADescEchelles[gEchelle]['srid']);
        fondcarte.params.SRS = 'EPSG:'+gADescEchelles[gEchelle]['srid'];
        var bounds =  new OpenLayers.Bounds(gADescEchelles[gEchelle]['extent'][0], gADescEchelles[gEchelle]['extent'][1], gADescEchelles[gEchelle]['extent'][2], gADescEchelles[gEchelle]['extent'][3]);
        map.maxExtent = bounds;
        fondcarte.maxExtent = bounds;
        console.log('bounds');
        console.log(bounds);
        // on réaffiche le fond de carte avec les données choisies
        fondcarte.url = "127.0.0.1/carte/"+gIndicateur+"/"+gEchelle+"/"+gPeriode+"?SRS=EPSG:"+gADescEchelles[gEchelle]['srid'];
        map.removeLayer(fondcarte);
        map.addLayer(fondcarte);
        map.zoomToMaxExtent();        
        var imageLegende = gPanneauLegende.items.items[0];
        imageLegende.setSrc('127.0.0.1/carte/'+gIndicateur+'/'+gEchelle+'/'+gPeriode+'?LAYER=donnees&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.0.0&REQUEST=GetLegendGraphic');
    }, 
    
    changeIndicateur: function(id, periode, echelle) {
        gIndicateur = id;
        gPeriode = periode;
        gEchelle = echelle;    
        this.getSymbologie();
        ctrl.chargeEchellesEtPeriodes();
    }
});

Hors ligne

 

#4 Wed 12 February 2014 16:31

Laurent Jégou
Participant assidu
Lieu: Toulouse
Date d'inscription: 5 Sep 2005
Messages: 447
Site web

Re: Info-bulle onMouseOver

C'est franchement difficile d'essayer de comprendre du code brut quand on n'a pas le contexte ni aucune info précise sur ce qui cloche. Mettez vos essais en ligne quelque part, ce sera plus simple pour à la fois pouvoir comprendre et éventuellement repérer les problèmes.


Enseignant-Chercheur en Géomatique
UT2J - Dept Géo / CNRS UMR LISST-Cieu / Master Sigma - Revue Mappemonde

Hors ligne

 

Pied de page des forums

Powered by FluxBB