Como selecionar campos retornados pela solicitação GeoServer WMS GetFeatureInfo?


9

Estou executando um serviço de mapeamento local simples baseado na pilha PostGIS / GeoServer / OpenLayers.

Após o tutorial do opengeo, vinculei os eventos de clique no OpenLayers à chamada 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"
        );
      });

Eu usei os modelos FreeMarker do GeoServer para formatar a resposta corretamente. O problema que tenho é que a resposta que recebo retorna todos os campos da camada.

Existe uma maneira de selecionar os que são relevantes para o usuário?

Respostas:


7

Não parece bom ( fonte ):

... GetFeatureInfo [...] é uma solicitação WMS e WFS. [...] Uma diferença em seu comportamento é que o Geoserver envia sempre todos os atributos com GetFeatureInfo, mas com o WFS a lista de atributos pode ser fornecida na solicitação.

Você pode criar uma exibição que contenha apenas os atributos que seu usuário deseja / deve ver e exibir através do Geoserver.

Uma alternativa seria ajustar o modelo GetFeatureInfo .


2
exibir ou não exibir é uma coisa, mas o radek deseja retornar apenas alguns valores de campos. Faz uma grande diferença em relação aos dados transferidos e aos aspectos de segurança.
simo

2
Por isso, minha primeira sugestão foi criar uma visualização.
Underdark

Mais sobre como usar VIEWs aqui .
Radek #

7

Apenas não inclua os campos que você não deseja no seu modelo de marcador gratuito. Consulte http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templates


Bom link, existe uma documentação realmente boa no site do Geoserver - este exemplo eu achei útil (com um pouco de brincadeira, é claro) para retornar apenas os campos que eu queria.
Ando



0

Você pode adicionar instruções condicionais aos modelos de marcadores gratuitos.

Por exemplo, no seu arquivo content.ftl, você pode adicionar algo assim para listar apenas "YOUR_FIELDNAME".

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

Como alternativa, você pode excluir um campo fazendo o seguinte:

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

-2

Que tal isso?

Além disso, para que isso retorne atributos (e não apenas o nome da camada e o ID do recurso), você deve adicionar "ows_include_items" "attribute1, attribute2, ..., attributeN" ou "ows_include_items" "all" à seção de metadados do seu WMS entrada do arquivo de mapa da camada.

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


Mas o Radek usa o Geoserver, não o UMN Mapserver, portanto, não há arquivo de mapa.
Underdark

11
Eu já vi isso. Eu nunca usei o geoserver, mas acho que também há uma maneira de definir metadados, não?
10242
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.