¿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?

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 .


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


¡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>

-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


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.