Suite

False DescribeFeature Request URL dans GeoExt QueryPanel

False DescribeFeature Request URL dans GeoExt QueryPanel


J'ai fait fonctionner le GeoExt QueryPanel jusqu'à présent, il reconnaît les couches disponibles sur mon Geoserver mais il n'est pas en mesure d'obtenir les colonnes d'attributs pour le jeu de données. J'ai configuré un proxy osgeo sur mon serveur Apache, j'utilise le override-ext-ajax.js et j'ai leOpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url=";classe configurée.

Une requête DescribeFeatureType est envoyée lors de la sélection de la couche que je souhaite filtrer. La même chose se produit lorsque vous essayez de choisir la colonne d'attributs dans le panneau de requête, mais aucune n'est affichée.

Les URL des requêtes envoyées ressemblent à ceci :

http://localhost/cgi-bin/proxy.cgi?url= http%3A%2F%2Flocalhost%2Fcgibin%2Fproxy.cgi%2Fwfs%3F VERSION%3D1.1.0%26REQUEST%3DDescribeFeatureType%26TYPENAME%3Dcases%26query%3D

La partie étrange ici est que la demande est envoyée via le proxy.cgi deux fois. L'URL de la requête devrait ressembler à ceci, en passant le WFS du géoserveur :

http://localhost/cgi-bin/proxy.cgi?url= http%3A%2F%2Flocalhost%3A8080%2Fgeoserver%2Fwfs%3F VERSION%3D1.1.0%26REQUEST%3DDescribeFeatureType%26TYPENAME%3Dcases%26query%3D

Quelqu'un a-t-il une idée de ce qui ne va pas ici et pourquoi l'URL de la demande est incorrecte ? La chose étrange est que même si je supprime la classe Open.Layers.ProxyHost et le override-ext-ajax.js de mon application, la demande est envoyée de cette façon. Cela conduit à la conclusion que la source de l'erreur peut être trouvée dans le fichier QueryPanel.js, mais je n'ai pas pu la repérer.

Peut-il par contre être lié à mon serveur ?

Les autres requêtes envoyées dans l'application (GET & POST) fonctionnent correctement. Le code (pertinent) ressemble à ceci, vous pouvez peut-être repérer l'erreur.

OpenLayers.ProxyHost = "/cgi-bin/proxy.cgi?url="; var owsUrl = "/geoserver/wfs" ; var symbolizer = OpenLayers.Feature.Vector.style["default"]; symbolizer.graphicName = "carré"; magasin var; Ext.onReady(function() { store = new GeoExt.data.WFSCapabilitiesStore({ url : Ext.urlAppend(owsUrl, "VERSION=1.0.0&REQUEST=GetCapabilities"), protocolOptions : {version : "1.1.0"}, autoLoad : true, écouteurs : { load: initApp } }); }); function initApp() { var vecLayer = new OpenLayers.Layer.Vector("Query", { eventListeners: { featuresadded: function() { var extend = vecLayer.getDataExtent() mapPanel.map.zoomToExtent(extent) } } }); var queryPanel = new gxp.QueryPanel({ title: "Query", region: "center", width: 350, bodyStyle: "padding: 10px", autoScroll: true, layerStore: store, bbar: ["->", { text : "Query", gestionnaire : function() { queryPanel.query(); } }], écouteurs : { query : function(panel, store) { var rule = new OpenLayers.Rule({ filter : panel.getFilter() }); rule.symbolizer[queryPanel.symbolizerType] = symbolizer; var style = new OpenLayers.Style("", {rules: [rule]}); wms.mergeNewParams({ sld_body: new OpenLayers.Format.SLD(). write({ namedLayers : [{ name : panel.selectedLayer.get("name"), userStyles : [style] }] }) }); store.bind(vecLayer, { initDir : GeoExt.data.FeatureStore.STORE_TO_LAYER }) ; } } });

En un coup d'œil, j'imagine que le problème se situe autour des lignes ci-dessous :

181 var protocol = record.get("layer").protocol; 182 this.attributeStore = new GeoExt.data.AttributeStore({ 183 url: Ext.urlAppend(protocol.url, Ext.urlEncode({ 184 "VERSION": protocol.version, 185 "REQUEST": "DescribeFeatureType", 186 "TYPENAME " : record.get("nom") 187 })),

La partie délicate sera le débogage. Pour savoir exactement ce qui se passe, je m'assurerais que vous paramétriez les éléments suivants :

  1. Utilisez le code source complet, pas une version minifiée, afin de pouvoir le déboguer plus facilement
  2. Utiliser Firebug dans FireFox
  3. Mettez une ligne de débogueur juste avant le code ci-dessus. Le code s'arrêtera à ce stade et vous pourrez vérifier les valeurs de l'URL et leur origine.

J'ai compris le problème - je pense que c'était un paramètre que j'avais défini lorsque j'avais des difficultés à configurer un WFS. Dans les paramètres de GeoServer Globale, j'ai défini l'URL de base du proxy surhttp://localhost/cgi-bin/proxy.cgi?url=