交叉层过滤¶
跨层过滤提供了从A层查找与B层特征具有特定关系的特征的能力。例如,可以使用该功能查找距离指定商店给定距离内的所有公共汽车站,或者查找包含在指定城市区域内的所有咖啡店。
这个 查询层 模块添加实现跨层过滤的过滤函数。这些函数通过查询应用于主要层的筛选器中的次要层来工作。次要层的名称和要从中提取的属性作为参数提供,同时还提供了一个ECQL筛选器表达式,以确定感兴趣的功能。一个常见的用例是提取几何值属性,然后将空间谓词中的值与主要层中的几何值属性相对应。
地理服务器广泛支持过滤功能,因此跨层过滤可以用于SLD规则、WMS和WFS请求,也可以用于XML或CQL过滤器。
安装querylayer模块¶
访问 website download 页面,找到您的版本,并下载: geoserver-2.24.x-querylayer-plugin.zip
警告
扩展的版本 must 匹配GeoServer实例的版本
将扩展存档的内容解压缩到
WEB-INF/lib
Geoserver安装的目录。要检查模块是否正确安装,请从GeoServer主页请求WFS 1.1功能。这个
Filter_Capabilities
节应包含对名为queryCollection
.
1 ...
2 <ogc:Filter_Capabilities>
3 ...
4 <ogc:ArithmeticOperators>
5 ...
6 <ogc:Functions>
7 <ogc:FunctionNames>
8 ...
9 <ogc:FunctionName nArgs="-1">queryCollection</ogc:FunctionName>
10 <ogc:FunctionName nArgs="-1">querySingle</ogc:FunctionName>
11 ...
12 </ogc:FunctionNames>
13 </ogc:Functions>
14 </ogc:ArithmeticOperators>
15 </ogc:Scalar_Capabilities>
16 ...
17 </ogc:Filter_Capabilities>
18 ...
函数引用¶
该扩展提供以下过滤功能以支持跨层过滤。
Name |
Arguments |
Description |
查询单个 |
|
查询指定的 |
查询集合 |
|
查询指定的 |
集合几何 |
|
将几何图形列表转换为单个几何图形对象。的输出 |
优化性能¶
在geoserver 2.1.x系列中,为了使跨层过滤器以最佳性能执行,在启动JVM时必须指定以下系统变量:
-Dorg.geotools.filter.function.simplify=true
这样可以确保每个查询对函数进行一次计算,而不是对每个结果进行一次计算。对于geoserver 2.2.x系列,此标志不是必需的。(希望这种行为也将成为2.1.x中的默认行为。)
内存限制¶
这个 queryCollection
和 collectGeometries
函数不执行真正的数据库样式联接。相反,它们每次执行时都会对第二层执行查询,并将整个结果加载到内存中。因此,如果查询结果集非常大,或者收集的几何图形非常大,则这些函数可能会使用过多的服务器内存。为防止影响服务器稳定性,可以处理的数据量有内置限制:
最多收集1000个功能
queryCollection
最多可收集37000个坐标(相当于1MB的坐标对象)
collectGeometries
可以通过为以下参数设置备用值来覆盖这些限制(这可以使用JVM系统变量、Servlet上下文变量或环境变量来完成):
QUERY_LAYER_MAX_FEATURES
controls the maximum number of features collected byqueryCollection
GEOMETRY_COLLECT_MAX_COORDINATES
controls the maximum number of coordinates collected bycollectGeometries
WMS示例¶
以下示例使用 sf:bugsites
, sf:roads
和 sf:restricted
标准GeoServer下载中提供的演示层。
仅显示与类别为3的限制区域重叠的bug站点 :
上的CQL跨层过滤器 bugsites
层是
INTERSECTS(the_geom, querySingle('restricted', 'the_geom','cat = 3'))
.
WMS请求为:
http://localhost:8080/geoserver/wms?LAYERS=sf%3Aroads%2Csf%3Arestricted%2Csf%3Abugsites&STYLES=&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A26713&CQL_FILTER=INCLUDE%3BINCLUDE%3BINTERSECTS(the_geom%2C%20querySingle(%27restricted%27%2C%20%27the_geom%27%2C%27cat%20%3D%203%27))&BBOX=589081.6705629,4914128.1213261,609174.02430924,4928177.0717971&WIDTH=512&HEIGHT=358
结果是:
显示任何道路200米范围内的所有Bug站点 :
上的CQL跨层过滤器 bugsites
层是
DWITHIN(the_geom, collectGeometries(queryCollection('sf:roads','the_geom','INCLUDE')), 200, meters)
.
WMS请求为:
http://localhost:8080/geoserver/wms?LAYERS=sf%3Aroads%2Csf%3Arestricted%2Csf%3Abugsites&STYLES=&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&EXCEPTIONS=application%2Fvnd.ogc.se_inimage&SRS=EPSG%3A26713&CQL_FILTER=INCLUDE%3BINCLUDE%3BDWITHIN(the_geom%2C%20collectGeometries(queryCollection(%27sf%3Aroads%27%2C%27the_geom%27%2C%27INCLUDE%27))%2C%20200%2C%20meters)&BBOX=589042.42768447,4914010.3926913,609134.78143081,4928059.3431623&WIDTH=512&HEIGHT=358
结果是:
WFS示例¶
以下示例使用 sf:bugsites
, sf:roads
和 sf:restricted
标准GeoServer下载中提供的演示层。
仅检索与类别为3的限制区域重叠的bug站点 :
1 <wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs"
2 xmlns:sf="http://www.openplans.org/spearfish"
3 xmlns:ogc="http://www.opengis.net/ogc"
4 service="WFS" version="1.0.0">
5 <wfs:Query typeName="sf:bugsites">
6 <ogc:Filter>
7 <ogc:Intersects>
8 <ogc:PropertyName>the_geom</ogc:PropertyName>
9 <ogc:Function name="querySingle">
10 <ogc:Literal>sf:restricted</ogc:Literal>
11 <ogc:Literal>the_geom</ogc:Literal>
12 <ogc:Literal>cat = 3</ogc:Literal>
13 </ogc:Function>
14 </ogc:Intersects>
15 </ogc:Filter>
16 </wfs:Query>
17 </wfs:GetFeature>
取回任何道路200米范围内的所有窃听点 :
1 <wfs:GetFeature xmlns:wfs="http://www.opengis.net/wfs"
2 xmlns:sf="http://www.openplans.org/spearfish"
3 xmlns:ogc="http://www.opengis.net/ogc"
4 service="WFS" version="1.0.0">
5 <wfs:Query typeName="sf:bugsites">
6 <ogc:Filter>
7 <ogc:DWithin>
8 <ogc:PropertyName>the_geom</ogc:PropertyName>
9 <ogc:Function name="collectGeometries">
10 <ogc:Function name="queryCollection">
11 <ogc:Literal>sf:roads</ogc:Literal>
12 <ogc:Literal>the_geom</ogc:Literal>
13 <ogc:Literal>INCLUDE</ogc:Literal>
14 </ogc:Function>
15 </ogc:Function>
16 <ogc:Distance units="meter">100</ogc:Distance>
17 </ogc:DWithin>
18 </ogc:Filter>
19 </wfs:Query>
20 </wfs:GetFeature>