如何选择GeoServer WMS GetFeatureInfo请求返回的字段?


9

我正在运行基于PostGIS / GeoServer / OpenLayers堆栈的简单本地地图服务。

在opengeo 教程之后,我使用以下方法将OpenLayers中的click事件绑定到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 模板来正确设置响应的格式。我的问题是我得到的响应返回了该层的所有字段。

有没有办法选择与用户相关的内容?

Answers:


7

看起来不太好(来源):

... GetFeatureInfo [...]是WMS请求和WFS。[...]他们的行为的一个区别是,Geoserver始终使用GetFeatureInfo发送所有属性,而使用WFS,可以在请求中给出属性列表。

您可以创建一个视图,该视图仅包含用户希望/应该通过Geoserver看到并提供的属性。

另一种方法是调整GetFeatureInfo模板


2
显示或不显示是一回事,但是radek只想返回一些字段值。在传输数据和安全性方面,这有很大的不同。
simo

2
这就是为什么我的第一个建议是创建视图。
昏暗

有关在此处使用VIEW的更多信息
radek 2011年



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

那这个呢?

另外,要返回属性(而不仅仅是图层名称和要素ID),您还必须在WMS的元数据部分添加“ ows_include_items”,“ attribute1,attribute2,...,attributeN”或“ ows_include_items”“全部”图层的地图文件条目。

来自:http : //trac.osgeo.org/openlayers/wiki/GetFeatureInfo


但是Radek使用的是Geoserver,而不是UMN Mapserver,因此没有地图文件。
昏暗

1
我看到了 我从未使用过geoserver,但我想也有一种设置元数据的方法,不是吗?
simo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.