Jak wybrać pola zwrócone przez żądanie GetFeatureInfo GeoServer WMS?

9

Korzystam z prostej lokalnej usługi mapowania opartej na stosie PostGIS / GeoServer / OpenLayers.

Po samouczku opengeo powiązałem zdarzenia kliknięcia w OpenLayers z wywołaniem WMS GetFeatureInfo przy użyciu:

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

Użyłem szablonów FreeMarker GeoServera, aby poprawnie sformatować odpowiedź. Problem, który mam, polega na tym, że odpowiedź, którą otrzymuję, zwraca wszystkie pola z warstwy.

Czy istnieje sposób na wybranie tych, które są odpowiednie dla użytkownika?

radek
źródło

Odpowiedzi:

7

Nie wygląda dobrze ( źródło ):

... GetFeatureInfo [...] to żądanie WMS i WFS. [...] Jedną różnicą w ich zachowaniu jest to, że Geoserver wysyła zawsze wszystkie atrybuty za pomocą GetFeatureInfo, ale w WFS listę atrybutów można podać w żądaniu.

Możesz stworzyć widok, który zawiera tylko atrybuty, które użytkownik chce / powinien widzieć i udostępniać za pośrednictwem Geoservera.

Alternatywą byłoby dostosowanie szablonu GetFeatureInfo .

podmrok
źródło
2
wyświetlanie lub brak wyświetlania to jedno, ale radek chce zwrócić tylko niektóre wartości pól. To robi dużą różnicę w odniesieniu do przesyłanych danych i aspektów bezpieczeństwa.
simo
2
Właśnie dlatego moją pierwszą sugestią było stworzenie widoku.
podmroku
Więcej informacji na temat korzystania z WIDOKÓW tutaj .
radek
7

Po prostu nie uwzględniaj pól, których nie chcesz w szablonie Freemarker. Zobacz http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templates

Ian Turton
źródło
Dobry link, na stronie Geoserver znajduje się naprawdę dobra dokumentacja - ten przykład uważam za przydatny (z odrobiną majstrowania, oczywiście) do zwracania tylko tych pól, które chciałem.
Ando
5

Możesz to zrobić za pomocą parametru żądania WMS GeoServer:

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

dr_jts
źródło
Dla mnie to najlepsze rozwiązanie! 1. Bardzo proste! 2. Mam nawet możliwość z innych aplikacji, aby zrobić pełną funkcję Info. Dzięki szablonom nie jest to już możliwe! 3. I wreszcie ruch sieciowy jest znacznie mniejszy niż żądanie pełnej funkcji! Tank-you!
marcel
0

Możesz dodać instrukcje warunkowe do szablonów Freemarker.

Na przykład w pliku content.ftl możesz dodać coś takiego do listy „YOUR_FIELDNAME”.

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

Alternatywnie możesz wykluczyć pole, wykonując następujące czynności:

<#if !attribute.name == "YOUR_FIELDNAME">
     <li>${attribute.name}: ${attribute.value}</li>
</#if>
Owen J Lamb
źródło
-2

A co z tym?

Ponadto, aby zwrócić atrybuty (a nie tylko nazwę warstwy i identyfikator funkcji), musisz dodać „ows_include_items” ”atrybut1, atrybut2, ..., atrybutN” lub „ows_include_items” „wszystko” do sekcji metadanych WMS pozycja pliku mapy warstwy.

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

simo
źródło
Ale Radek używa Geoservera, a nie UMN Mapserver, więc nie ma pliku mapy.
podmroku
1
Widziałem to. Nigdy nie korzystałem z geoservera, ale sądzę, że jest też jeden sposób na ustawienie metadanych, nie?
simo