Як вибрати поля, повернені за запитом GeoServer WMS GetFeatureInfo?


9

Я запускаю просту послугу локального картографування на основі стека PostGIS / GeoServer / OpenLayers.

Після навчального посібника я прив’язав події клацань у 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"
        );
      });

Я використовував шаблони FreeMarker GeoServer для правильного форматування відповіді. Проблема у мене полягає в тому, що я отримую відповідь повертає всі поля з шару.

Чи є спосіб вибрати ті, які стосуються користувача?

Відповіді:


7

Не виглядає добре ( джерело ):

... GetFeatureInfo [...] - це WMS-запит та WFS. [...] Однією з різниць у їхній поведінці є те, що Geoserver надсилає завжди всі атрибути за допомогою GetFeatureInfo, але з WFS список атрибутів може бути наданий у запиті.

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

Альтернативою може бути коригування шаблону dieFeatureInfo die .


2
відображення або не відображення - це одне, але Radek хоче повернути лише деякі значення полів. Це має велику різницю щодо переданих даних та аспектів безпеки.
simo

2
Тому моєю першою пропозицією було створити перегляд.
underdark

Більше про використання VIEW тут .
radek

7

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


Хороше посилання, на сайті Geoserver є якась справжня хороша документація - Цей приклад мені здався корисним (з невеликим перекосом, звичайно) для повернення лише бажаних полів.
Андо


5

Це можна зробити за допомогою параметра запиту WMS GeoServer властивості:

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


Для мене це найкраще рішення! 1. Дуже просто! 2. У мене навіть є можливість з інших додатків зробити повну функціюInfo. З шаблонами це вже неможливо! 3. І останнє, але не в останню чергу мережевий трафік набагато менший, ніж запит на повну функцію! Танк-ти!
marcel

0

Ви можете додавати умовні висловлювання до шаблонів вільних маркерів.

Наприклад, у файлі 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, тому файл карти не існує.
underdark

1
Я це бачив. Я ніколи не використовував геосервер, але, мабуть, є один із способів встановлення метаданих також, ні?
simo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.