Pages: 1
- Sujet précédent - Geoext: LegendPanel et WMS (paramètre LAYER au lieu de LAYERS) - Sujet suivant
#1 Fri 26 April 2013 16:25
- pargass31
- Participant occasionnel
- Date d'inscription: 26 Apr 2013
- Messages: 12
Geoext: LegendPanel et WMS (paramètre LAYER au lieu de LAYERS)
Bonjour,
Les forums de georezo m’ont souvent permis d’avancer sans avoir besoin de poser une question donc merci à tous les contributeurs.
J’ai réalisé une interface GeoExt (1.1)+Extjs (3.4.0)+Openlayers (2.12) et je rencontre des difficultés avec les légendes des flux wms.
Pour afficher le panneau de légendes j’utilise :
var legendPanel = new GeoExt.LegendPanel({
title : "Légende",
defaults: {
labelCls: 'mylabel',
style: 'padding:5px',
baseParams: {
FORMAT: 'image/png',
LEGEND_OPTIONS: 'forceLabels:on'
}
},
bodyStyle: 'padding:5px',
width: 350,
autoScroll: true,
region: 'west'
});
Le panneau s’affiche bien correctement, et la légende est bien chargée pour mes layers qui contiennent les données vecteurs (issues de ma base Postgis).
Par contre pour flux wms, je vois juste le nom du layer mais la légende ne s’affiche pas. Firebug m’indique que la requête envoyée est :
http://monserveur/cgi-bin/qgis_mapserv.fcgi?map=monprojet.qgs&TRANSPARENT=FALSE&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&EXCEPTIONS=application%2Fvnd.ogc.se_xml&LAYER=monlayer&FORMAT=image/gif&SCALE=600000000000&FORMAT=image%2Fpng&LEGEND_OPTIONS=forceLabels%3Aon
Après quelque recherche je me suis rendu compte que pour les GetMap, le paramètre LAYERS était utilisé et non le paramètre LAYER (qui concernaient à priori les anciennes versions).
Si j’enlève le S à LAYERS dans mon url, cela fonctionne et le problème vient donc bien de là.
Comment se fait-il que par défaut le LegendPanel envoi le paramètre LAYER ? Comment le forcer à utiliser LAYERS ? J’imagine que je devrais juste rajouter une ligne LAYERS : ** dans mes paramètres mais je ne vois pas quelle variable mettre pour récupérer tous les layers issus des flux wms.
Y’a surement une solution simple mais je sèche…
Merci d’avance,
Romain
Hors ligne
#2 Sat 27 April 2013 16:36
- Tony VINCENT
- Participant actif
- Lieu: Poitiers
- Date d'inscription: 13 Jan 2010
- Messages: 86
Re: Geoext: LegendPanel et WMS (paramètre LAYER au lieu de LAYERS)
Bonjour,
J'utilise aussi GeoExt.LegendPanel pour générer la légende mais associé à Mapserver.
Et cela fonctionne correctement avec les flux WMS.
Voici, la requête envoyé :
Code:
http://monserveur?TRANSPARENT=true&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetLegendGraphic&EXCEPTIONS=application%2Fvnd.ogc.se_xml&LAYER=l_????_pc&FORMAT=image%2Fgif&SCALE=1733371.6628663363
C'est bien le paramètre LAYER qui est utilisé.
- Pour mapserver
http://mapserver.org/ogc/wms_server.html
- Pour Geoserver
http://docs.geoserver.org/latest/en/use … aphic.html
Et le paramètre LAYERS
- Pour QGis server
http://linfiniti.com/2010/08/qgis-mapse … he-masses/
Maintenant reste à trouver comment le modifier.
Je ne t'apport pas beaucoup de solution, mais je viens d'apprendre que la requête n'est pas la même entre Mapserver, Geoserver et QGIS Server.
Tony
Hors ligne
#3 Sat 27 April 2013 16:46
- Tony VINCENT
- Participant actif
- Lieu: Poitiers
- Date d'inscription: 13 Jan 2010
- Messages: 86
Re: Geoext: LegendPanel et WMS (paramètre LAYER au lieu de LAYERS)
Ah, peut être que la réponse à ton problème se trouve dans le code de la librairie de GeoExt.
Regarde dans ce fichier : WMSLegend.js (je n'ai pas le chemin)
Et dans cette partie :
Code:
... /** private: method[getLegendUrl] 99 * :param layerName: ``String`` A sublayer. 100 * :param layerNames: ``Array(String)`` The array of sublayers, 101 * read from this.layerRecord if not provided. 102 * :return: ``String`` The legend URL. 103 * 104 * Get the legend URL of a sublayer. 105 */ 106 getLegendUrl: function(layerName, layerNames) { 107 var rec = this.layerRecord; 108 var url; 109 var styles = rec && rec.get("styles"); 110 var layer = rec.getLayer(); 111 layerNames = layerNames || [layer.params.LAYERS].join(",").split(","); 112 113 var styleNames = layer.params.STYLES && 114 [layer.params.STYLES].join(",").split(","); 115 var idx = layerNames.indexOf(layerName); 116 var styleName = styleNames && styleNames[idx]; 117 // check if we have a legend URL in the record's 118 // "styles" data field 119 if(styles && styles.length > 0) { 120 if(styleName) { 121 Ext.each(styles, function(s) { 122 url = (s.name == styleName && s.legend) && s.legend.href; 123 return !url; 124 }); 125 } else if(this.defaultStyleIsFirst === true && !styleNames && 126 !layer.params.SLD && !layer.params.SLD_BODY) { 127 url = styles[0].legend && styles[0].legend.href; 128 } 129 } 130 if(!url) { 131 url = layer.getFullRequestString({ 132 REQUEST: "GetLegendGraphic", 133 WIDTH: null, 134 HEIGHT: null, 135 EXCEPTIONS: "application/vnd.ogc.se_xml", 136 LAYER: layerName, 137 LAYERS: null, 138 STYLE: (styleName !== '') ? styleName: null, 139 STYLES: null, 140 SRS: null, 141 FORMAT: null 142 }); 143 } ...
Tu as :
Code:
... 136 LAYER: layerName, 137 LAYERS: null, ...
essai de modifier comme ceci :
Code:
LAYER: null, LAYERS: layerName,
Tony
Hors ligne
#4 Mon 29 April 2013 14:50
- pargass31
- Participant occasionnel
- Date d'inscription: 26 Apr 2013
- Messages: 12
Re: Geoext: LegendPanel et WMS (paramètre LAYER au lieu de LAYERS)
Bonjour Tony,
merci pour tes réponses, je n'avais pas pensé à modifier le code de la librairie!
J'ai fais la modification dans le fichier WMSLegend.js comme indiqué mais cela n'avait aucun effet.
Par contre dans le fichier GeoExt.js (présent dans le dossier GeoExt/script) j'ai modifié la ligne 140:
Code:
if(!url){url=layer.getFullRequestString({REQUEST:"GetLegendGraphic",WIDTH:null,HEIGHT:null,EXCEPTIONS:"application/vnd.ogc.se_xml",LAYERS:null,LAYER:layerName,STYLE:(styleName!=='')?styleName:null,STYLES:null,SRS:null,FORMAT:null,TIME:null});}
par
Code:
if(!url){url=layer.getFullRequestString({REQUEST:"GetLegendGraphic",WIDTH:null,HEIGHT:null,EXCEPTIONS:"application/vnd.ogc.se_xml",LAYERS:layerName,LAYER:null,STYLE:(styleName!=='')?styleName:null,STYLES:null,SRS:null,FORMAT:null,TIME:null});}
et cela fonctionne!
merci beaucoup.
Romain
Hors ligne
Pages: 1
- Sujet précédent - Geoext: LegendPanel et WMS (paramètre LAYER au lieu de LAYERS) - Sujet suivant