MS RFC 118:在WMS请求中支持特定于供应商的OGC筛选器参数

日期

2017-02-09

作者

丹尼尔·莫里塞特

联系

dmorissette@mapgears.com

状态

采用

最后更新

2017-09-20

版本

MAPServer 7.2

1。概述

JS客户机应用程序通常允许用户在客户机端进行选择或应用过滤器,这些过滤器应反映在由WMS getmap请求呈现的映射上。

目前,没有简单的方法可以将过滤器传递给WMS Getmap请求,因此JS应用程序开发人员必须使用以下方法之一/黑客:

  • 对getmap请求应用sld:overkill,特别是当只需要一个简单的过滤器并且需要应用到具有复杂符号的多个层时。

  • 使用%variable%替换:功能有限,会破坏层定义,容易出现安全问题。

  • 在服务器端创建临时映射文件:嘿,我们在2017年!

Openlayers3代码已经使JS开发人员能够以与WFS GetFeature请求相同的方式在WMS GetMap请求中构建和传递OGC筛选器,并且geoserver已经将其作为供应商特定的参数支持,因此此RFC建议在MapServer中支持同一供应商特定的筛选器参数。

2。建议的解决方案

此RFC建议在MapServer WMS服务器接口中实现特定于供应商的筛选器参数,该参数与WFS GetFeature筛选器参数类似。

2.1 WMS滤波器参数

在getmap和getfeatureinfo请求中都支持wms filter参数。语法和格式与WFS GetFeature筛选器参数当前支持的语法和格式相同。对于任何GET HTTP请求参数,该值都必须正确地进行URL编码。

如果在layers参数中指定了多个图层,则必须为每个图层指定单独的过滤器。在这种情况下,列表用括号括起来:()。

2.2例

简单属性在单个层上等于:

/cgi-bin/mapserv?map=...
&SERVICE=WMS
&REQUEST=GetMap
&LAYERS=popplace
&FILTER=<Filter><PropertyIsEqualTo><PropertyName>NAME</PropertyName><Literal>Digby</Literal></PropertyIsEqualTo></Filter>
&...

dwithin空间滤波器:

/cgi-bin/mapserv?map=...
&SERVICE=WMS
&REQUEST=GetMap
&LAYERS=popplace
&FILTER=<Filter><DWithin><PropertyName>Geometry</PropertyName><gml:Point><gml:coordinates>-60.18,46.10</gml:coordinates></gml:Point><Distance units='dd'>0.05</Distance></DWithin></Filter>
&...

在括号内的多个图层上过滤:

/cgi-bin/mapserv?map=...
&SERVICE=WMS
&REQUEST=GetMap
&LAYERS=road,popplace
&FILTER=(<Filter><DWithin><PropertyName>Geometry</PropertyName><gml:Point><gml:coordinates>46,-63</gml:coordinates></gml:Point><Distance units='dd'>0.5</Distance></DWithin></Filter>)(<Filter><DWithin><PropertyName>Geometry</PropertyName><gml:Point><gml:coordinates>46,-63</gml:coordinates></gml:Point><Distance units='dd'>0.5</Distance></DWithin></Filter>)
&...

在多个图层上获取地图,在某些图层上使用空过滤器:

/cgi-bin/mapserv?map=...
&SERVICE=WMS
&REQUEST=GetMap
&LAYERS=road,popplace
&FILTER=()(<Filter><PropertyIsEqualTo><PropertyName>NAME</PropertyName><Literal>Digby</Literal></PropertyIsEqualTo></Filter>)
&...

三。实施细节

内部WFS GetFeature筛选器处理代码与WFS接口紧密相连。它必须是通用的,以便WFS和WMS接口都能使用。

新功能的测试将添加到MSAutoTest。

第四章。限制

这将只针对GET请求实现,并受HTTP服务器的URL长度限制。get url长度的确切限制取决于服务器配置。

在WMS中使用过滤器需要先前的几何图形和属性列名称知识,这些知识通常是通过WFS描述的FeatureType获得的。虽然过滤器在getmap请求中独立工作并不严格要求这样做,但是可以通过在相应的层上启用WFS接口来提供对describeFeatureType的访问。

由于过滤层的渲染是通过querymap机制完成的,因此将忽略遮罩、不透明度和复合设置,因为它们不是为querymaps实现的。(这可能被视为一个查询映射错误,但超出了此RFC的范围)

5.向后兼容性问题

没有预料到。

6。安全隐患

没有预料到。如果有的话,这通常会提高服务器的安全性,而这些服务器将不再需要依赖于数据语句中嵌入的%variable%。

7。性能影响

预计不会对核心性能产生影响。

8。文档需求

此供应商特定参数的文档将添加到WMS服务器文档的相关部分:

9。错误ID和引用

10。投票历史

+1来自tomk、stevel、jukkar、stevew、michaels、stephann、jeff和danielm。