Wie wähle ich Felder aus, die von der GeoServer WMS GetFeatureInfo-Anforderung zurückgegeben werden?


9

Ich verwende einen einfachen lokalen Zuordnungsdienst basierend auf dem PostGIS / GeoServer / OpenLayers-Stack.

Nach dem Opengeo- Tutorial habe ich Klickereignisse in OpenLayers mit dem WMS GetFeatureInfo-Aufruf verknüpft.

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

Ich habe die FreeMarker- Vorlagen von GeoServer verwendet, um die Antwort korrekt zu formatieren. Das Problem, das ich habe, ist, dass die Antwort, die ich erhalte, alle Felder von der Ebene zurückgibt.

Gibt es eine Möglichkeit, diejenigen auszuwählen, die für den Benutzer relevant sind?

Antworten:


7

Sieht nicht gut aus ( Quelle ):

... GetFeatureInfo [...] ist eine WMS-Anfrage und WFS. [...] Ein Unterschied in ihrem Verhalten besteht darin, dass Geoserver immer alle Attribute mit GetFeatureInfo sendet, aber mit WFS kann die Liste der Attribute in der Anforderung angegeben werden.

Sie können eine Ansicht erstellen, die nur die Attribute enthält, die Ihr Benutzer sehen möchte / sollte, und diese über Geoserver bereitstellen.

Eine Alternative wäre, die GetFeatureInfo-Vorlage anzupassen .


2
Anzeigen oder Nicht-Anzeigen ist eine Sache, aber Radek möchte nur einige Feldwerte zurückgeben. Dies macht einen großen Unterschied in Bezug auf übertragene Daten und Sicherheitsaspekte.
Simo

2
Deshalb war mein erster Vorschlag, eine Ansicht zu erstellen.
Underdark

Mehr zur Verwendung von VIEWs hier .
Radek

7

Fügen Sie einfach nicht die Felder ein, die Sie nicht in Ihre Freemarker-Vorlage aufnehmen möchten. Siehe http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templates


Guter Link, es gibt einige wirklich gute Dokumentationen auf der Geoserver-Site - Dieses Beispiel fand ich nützlich (natürlich mit ein wenig Herumspielen), um nur die Felder zurückzugeben, die ich wollte.
Ando


5

Sie können dies mit dem Anforderungsparameter GeoServer propertyName WMS tun:

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


Für mich ist das die beste Lösung! 1. Sehr einfach! 2. Ich habe sogar die Möglichkeit von anderen Anwendungen, eine vollständige featureInfo zu erstellen. Mit den Vorlagen ist das nicht mehr möglich! 3. Und zu guter Letzt ist der Netzwerkverkehr viel kleiner als die Anforderung einer vollständigen Funktion! Tank-du!
Marcel

0

Sie können Freemarker-Vorlagen bedingte Anweisungen hinzufügen.

Zum Beispiel können Sie in Ihrer content.ftl-Datei so etwas hinzufügen, um nur "YOUR_FIELDNAME" aufzulisten.

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

Alternativ können Sie ein Feld folgendermaßen ausschließen:

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

-2

Was ist damit?

Damit Attribute (und nicht nur der Layername und die Feature-ID) zurückgegeben werden, müssen Sie dem Metadatenabschnitt Ihres WMS "ows_include_items", "attribute1, attribute2, ..., attributeN" oder "ows_include_items" "all" hinzufügen Karteneintrag der Ebene.

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


Radek verwendet jedoch Geoserver und nicht UMN Mapserver, sodass keine Kartendatei vorhanden ist.
Underdark

1
Ich habe das gesehen. Ich habe noch nie einen Geoserver verwendet, aber ich denke, es gibt auch eine Möglichkeit, Metadaten festzulegen, oder?
Simo
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.