Come selezionare i campi restituiti dalla richiesta GetFeatureInfo di GeoServer WMS?


9

Sto eseguendo un semplice servizio di mappatura locale basato sullo stack PostGIS / GeoServer / OpenLayers.

Seguendo il tutorial di opengeo ho legato gli eventi click in OpenLayers alla chiamata GetFeatureInfo di WMS 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"
        );
      });

Ho usato i modelli FreeMarker di GeoServer per formattare correttamente la risposta. Il problema che ho è che la risposta che ottengo restituisce tutti i campi dal livello.

C'è un modo per selezionare quelli che sono rilevanti per l'utente?

Risposte:


7

Non sembra buono ( fonte ):

... GetFeatureInfo [...] è una richiesta WMS e WFS. [...] Una differenza nel loro comportamento è che Geoserver invia sempre tutti gli attributi con GetFeatureInfo ma con WFS l'elenco di attributi può essere fornito nella richiesta.

Puoi creare una vista che contenga solo gli attributi che il tuo utente desidera / dovrebbe vedere e pubblicare tramite Geoserver.

Un'alternativa sarebbe quella di regolare il modello GetFeatureInfo .


2
visualizzare o non visualizzare è una cosa, ma radek vuole restituire solo alcuni valori dei campi. Fa una grande differenza per quanto riguarda i dati trasferiti e gli aspetti di sicurezza.
simo,

2
Ecco perché il mio primo suggerimento è stato quello di creare una vista.
underdark

Maggiori informazioni sull'uso di VISUALIZZA qui .
Radek,


5

È possibile farlo utilizzando il parametro di richiesta WMS propertyName GeoServer:

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


Per me questa è la soluzione migliore! 1. Molto semplice! 2. Ho anche la possibilità da altre applicazioni di creare una funzionalità completa. Con i modelli non è più possibile! 3. E, ultimo ma non meno importante, il traffico di rete è molto più piccolo rispetto alla richiesta di funzionalità complete! Grazie!
marzo

0

È possibile aggiungere istruzioni condizionali ai modelli di freemarker.

Ad esempio nel tuo file content.ftl puoi aggiungere qualcosa del genere per elencare solo "YOUR_FIELDNAME".

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

In alternativa puoi escludere un campo facendo questo:

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

-2

Che dire di questo?

Inoltre, per restituire gli attributi (e non solo il nome del layer e l'ID della funzione) devi aggiungere "ows_include_items" "attributo1, attributo2, ..., attributoN" o "ows_include_items" "tutto" alla sezione dei metadati del tuo WMS voce del file della mappa del layer.

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


Ma Radek utilizza Geoserver, non UMN Mapserver, quindi non esiste alcun file di mappa.
underdark

1
L'ho visto. Non ho mai usato il geoserver ma credo che ci sia un modo per impostare anche i metadati, no?
simo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.