Как выбрать поля, возвращаемые запросом GeoServer WMS GetFeatureInfo?

9

Я использую простой локальный картографический сервис на основе стека PostGIS / GeoServer / OpenLayers.

В следующем руководстве по opengeo я связал события кликов в OpenLayers с вызовом WMS GetFeatureInfo, используя:

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

Я использовал Geoserver в Freemarker шаблоны для правильного форматирования ответа. У меня проблема в том, что полученный ответ возвращает все поля слоя.

Есть ли способ выбрать те, которые имеют отношение к пользователю?

Радек
источник

Ответы:

7

Не выглядит хорошо ( источник ):

... GetFeatureInfo [...] - это запрос WMS и WFS. [...] Одним из отличий в их поведении является то, что Geoserver всегда отправляет все атрибуты с GetFeatureInfo, но с WFS список атрибутов может быть задан в запросе.

Вы можете создать представление, содержащее только те атрибуты, которые ваш пользователь хочет / должен видеть и обслуживать через Geoserver.

Альтернативой может быть настройка шаблона GetFeatureInfo .

Подземье
источник
2
Отображать или не отображать - это одно, но radek хочет возвращать только значения некоторых полей. Это имеет большое значение в отношении передаваемых данных и аспектов безопасности.
Симо
2
Вот почему мое первое предложение было создать представление.
Подземье
Подробнее об использовании ПРОСМОТРОВ здесь .
Радек
7

Просто не включайте поля, которые вы не хотите, в свой шаблон freemarker. См. Http://docs.geoserver.org/trunk/en/user/tutorials/GetFeatureInfo/index.html#custom-templates

Ян Тертон
источник
Хорошая ссылка, на сайте Geoserver есть действительно хорошая документация - этот пример мне показался полезным (конечно, с небольшим возня) для возврата только тех полей, которые я хотел.
Андо
Правильная ссылка docs.geoserver.org/latest/en/user/tutorials/GetFeatureInfo/…
Даниэль
5

Вы можете сделать это, используя параметр запроса GeoServer propertyName WMS:

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

dr_jts
источник
Для меня это лучшее решение! 1. Очень просто! 2. У меня даже есть возможность из других приложений сделать полную функцию Info. С шаблонами это невозможно больше! 3. И последнее, но не менее важное: сетевой трафик намного меньше, чем запрос полной функции! Спасибо!
Marcel
0

Вы можете добавить условные операторы в шаблоны freemarker.

Например, в своем файле content.ftl вы можете добавить что-то вроде этого, чтобы только перечислить "YOUR_FIELDNAME".

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

В качестве альтернативы вы можете исключить поле, выполнив это:

<#if !attribute.name == "YOUR_FIELDNAME">
     <li>${attribute.name}: ${attribute.value}</li>
</#if>
Оуэн Дж Лэмб
источник
-2

Что насчет этого?

Кроме того, для этого для возврата атрибутов (а не только имени слоя и идентификатора объекта) необходимо добавить «ows_include_items» «attribute1, attribute2, ..., attributeN" или «ows_include_items» «all» в раздел метаданных вашей WMS запись файла карты слоя.

От: http://trac.osgeo.org/openlayers/wiki/GetFeatureInfo

Симо
источник
Но Radek использует Geoserver, а не UMN Mapserver, поэтому файл карты отсутствует.
Подземье
1
Я видел это. Я никогда не использовал геосервер, но я думаю, что есть и один способ установки метаданных, нет?
Симо