Comment sélectionner les champs renvoyés par la requête GeoServer WMS GetFeatureInfo?

9

J'exécute un service de cartographie local simple basé sur la pile PostGIS / GeoServer / OpenLayers.

Après le tutoriel opengeo, j'ai lié les événements de clic dans OpenLayers à l'appel WMS GetFeatureInfo en utilisant:

    map.events.register('click', map, function (e) {
        var url = "http://localhost:1979/geoserver/wms" 
          + "?REQUEST=GetFeatureInfo"
          + "&EXCEPTIONS=application/vnd.ogc.se_xml"
          + "&BBOX=" + map.getExtent().toBBOX()
          + "&X=" + e.xy.x
          + "&Y=" + e.xy.y
          + "&INFO_FORMAT=text/html"
          + "&QUERY_LAYERS=MYDATA:MYLAYER"
          + "&LAYERS=MYDATA:MYLAYER"
          + "&FEATURE_COUNT=5"
          + "&SRS=EPSG:3857"
          + "&STYLES="
          + "&WIDTH=" + map.size.w
          + "&HEIGHT=" + map.size.h;
        window.open(url,
          "getfeatureinfo",
          "location=0,status=0,scrollbars=1,width=800,height=125"
        );
      });

J'ai utilisé les modèles FreeMarker de GeoServer pour formater correctement la réponse. Le problème que j'ai, c'est que la réponse que j'obtiens renvoie tous les champs de la couche.

Existe-t-il un moyen de sélectionner ceux qui sont pertinents pour l'utilisateur?

radek
la source

Réponses:

7

Ne semble pas bon ( source ):

... GetFeatureInfo [...] est une demande WMS et WFS. [...] Une différence dans leur comportement est que Geoserver envoie toujours tous les attributs avec GetFeatureInfo mais avec WFS la liste des attributs peut être donnée dans la requête.

Vous pouvez créer une vue qui contient uniquement les attributs que votre utilisateur veut / devrait voir et servir via Geoserver.

Une alternative serait d' ajuster le modèle GetFeatureInfo .

obscur
la source
2
afficher ou ne pas afficher est une chose mais radek ne souhaite renvoyer que certaines valeurs de champs. Cela fait une grande différence en ce qui concerne les données transférées et les aspects de sécurité.
simo
2
C'est pourquoi ma première suggestion a été de créer une vue.
underdark
Plus d'informations sur l'utilisation des VIEWs ici .
radek
7

N'incluez tout simplement pas les champs dont vous ne voulez pas dans votre modèle de marque déposée. Voir http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templates

Ian Turton
la source
Bon lien, il y a une très bonne documentation sur le site Geoserver - Cet exemple m'a trouvé utile (avec un peu de tripotage bien sûr) pour ne renvoyer que les champs que je voulais.
Ando
5

Pour ce faire, utilisez le paramètre de requête WMS GeoServer propertyName:

http://docs.geoserver.org/stable/en/user/services/wms/vendor.html#propertyname

dr_jts
la source
Pour moi, c'est la meilleure solution! 1. Très simple! 2. J'ai même la possibilité, à partir d'autres applications, de créer une fonctionnalité complète. Avec les modèles, ce n'est plus possible! 3. Et enfin et surtout, le trafic réseau est beaucoup plus petit que celui de demander une fonctionnalité complète! Merci!
marcel
0

Vous pouvez ajouter des instructions conditionnelles aux modèles de marque libre.

Par exemple, dans votre fichier content.ftl, vous pouvez ajouter quelque chose comme ceci pour ne répertorier que "YOUR_FIELDNAME".

<#if attribute.name == "YOUR_FIELDNAME">
     <li>${attribute.name}: ${attribute.value}</li>
</#if>

Vous pouvez également exclure un champ en procédant comme suit:

<#if !attribute.name == "YOUR_FIELDNAME">
     <li>${attribute.name}: ${attribute.value}</li>
</#if>
Owen J Lamb
la source
-2

Et ça?

De plus, pour que cela renvoie des attributs (et pas seulement le nom de la couche et l'ID de la fonction), vous devez ajouter "ows_include_items" "attribut1, attribut2, ..., attributN" ou "ows_include_items" "tous" à la section des métadonnées de votre WMS entrée du fichier de carte de la couche.

De: http://trac.osgeo.org/openlayers/wiki/GetFeatureInfo

simo
la source
Mais Radek utilise Geoserver, pas UMN Mapserver, donc il n'y a pas de fichier de carte.
underdark
1
J'ai vu ça. Je n'ai jamais utilisé de géoserveur mais je suppose qu'il existe également un moyen de définir des métadonnées, non?
simo