¿Cómo seleccionar los campos devueltos por la solicitud GeoServer WMS GetFeatureInfo?

9

Estoy ejecutando un servicio de mapeo local simple basado en la pila PostGIS / GeoServer / OpenLayers.

Siguiendo el tutorial de opengeo , he vinculado los eventos de clic en OpenLayers a la llamada WMS GetFeatureInfo usando:

    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"
        );
      });

He usado las plantillas de FreeMarker de GeoServer para formatear la respuesta correctamente. El problema que tengo es que la respuesta que obtengo devuelve todos los campos de la capa.

¿Hay alguna manera de seleccionar los que son relevantes para el usuario?

radek
fuente

Respuestas:

7

No se ve bien ( fuente ):

... GetFeatureInfo [...] es una solicitud WMS y WFS. [...] Una diferencia en su comportamiento es que Geoserver envía siempre todos los atributos con GetFeatureInfo pero con WFS la lista de atributos se puede dar en la solicitud.

Puede crear una vista que contenga solo los atributos que su usuario quiere / debería ver y servir a través de Geoserver.

Una alternativa sería ajustar la plantilla GetFeatureInfo .

bajo oscuro
fuente
2
mostrar o no mostrar es una cosa, pero radek desea devolver solo algunos valores de campos. Hace una gran diferencia con respecto a los datos transferidos y los aspectos de seguridad.
simo
2
Es por eso que mi primera sugerencia fue crear una vista.
oscuro
Más sobre el uso de VIEWs aquí .
radek
5

Puede hacerlo utilizando el parámetro de solicitud WMS GeoServer propertyName:

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

dr_jts
fuente
¡Para mí esta es la mejor solución! 1. Muy simple! 2. Incluso tengo la posibilidad de otras aplicaciones para hacer una función completaInfo. ¡Con las plantillas ya no es posible! 3. Y por último, pero no menos importante, ¡el tráfico de la red es mucho menor que la solicitud de una función completa! ¡Gracias!
marcel
0

Puede agregar declaraciones condicionales a las plantillas de marcadores libres.

Por ejemplo, en su archivo content.ftl puede agregar algo como esto para enumerar solo "YOUR_FIELDNAME".

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

Alternativamente, puede excluir un campo haciendo esto:

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

¿Qué hay de esto?

Además, para que esto devuelva los atributos (y no solo el nombre de la capa y la identificación de la entidad), debe agregar "ows_include_items" "attribute1, attribute2, ..., attributeN" u "ows_include_items" "all" a la sección de metadatos de su WMS entrada del archivo de mapa de la capa.

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

simo
fuente
Pero Radek usa Geoserver, no UMN Mapserver, por lo que no hay un archivo de mapa.
oscuro
1
Lo he visto Nunca he usado geoservidor, pero supongo que también hay una forma de establecer metadatos, ¿no?
simo