CQL 过滤多个类型名以检索指定几何中的特征
Posted
技术标签:
【中文标题】CQL 过滤多个类型名以检索指定几何中的特征【英文标题】:CQL filter multiple typenames to retrieve features within specified geometry 【发布时间】:2018-11-21 12:36:12 【问题描述】:环境
我正在尝试使用 CQL 过滤从运行在 GeoServer 上的 WFS 层获取要素数据。我无权访问服务器。
目标
接收另一层的另一特征的几何内的两种类型的所有特征;每层最多有一个请求(因此不是每种类型)
思路
我必须:
从 wfs 层接收几何图形 (geometryA) 使用此几何从另一个图层接收两个类型名称,其中几何在“geometryA”中。尝试
对于单个类型名,这很容易。首先获取geometryA,然后:
https://src/wfs?request=getFeature&version=2.0.0&typenames=namespace:typename&srsName=EPSG:28992&outputFormat=application/json&cql_filter=WITHIN(geometry, geometryA)
但我无法弄清楚多个类型名称......我试过了:
https://src/wfs?request=getFeature&version=2.0.0&typenames=namespace:typename;namespace:typename2&srsName=EPSG:28992&outputFormat=application/json&cql_filter=WITHIN(geometry, geometryA)
这导致:
Extracted invalid join sub-filter [ geometrie within POLYGON ((154884 463434, 154884 463455,
154905 463455, 154905 463434, 154884 463434)) ], it users more than one feature type + []
所以我试过了,在谷歌搜索之后,
https://src/wfs?request=getFeature&version=2.0.0&typenames=namespace:typename;namespace:typename2&srsName=EPSG:28992&outputFormat=application/json&cql_filter=WITHIN(geometry, geometryA);WITHIN(geometry, geometryA)
这导致:
Join query must specify a filter
现在我很迷茫……
问题
谁能告诉我如何使用 CQL(或其他任何东西)来检索固定几何中的两个类型名?
【问题讨论】:
【参考方案1】:在 WFS 2.0 中,指定 2 个(或更多)typeNames
引入了一个 join in the query。这将返回根据您提供的过滤器连接的类型的元组。
在你的情况下,我不完全清楚这是否是你想要的,如果不是,那么你可以对单一类型发出 2 个请求(为了速度而并行?)。
如果这是您想要的,您可以通过向类型添加别名来避免 geometrie
作为两种类型的属性的歧义,因此您的查询将变为:
<wfs:Query typeNames="namespace:typename;namespace:typename2" aliases="a b" >
<fes:Filter>
<fes:Or>
<fes:Within>
<fes:ValueReference>a.geometrie</fes:PropertyName>
<fes:Literal>POLYGON ((154884 463434, 154884 463455,
154905 463455, 154905 463434, 154884 463434))</fes:Literal>
</fes:Within>
<fes:Within>
<fes:ValueReference>b.geometrie</fes:PropertyName>
<fes:Literal>POLYGON ((154884 463434, 154884 463455,
154905 463455, 154905 463434, 154884 463434))</fes:Literal>
</fes:Within>
</fes:Or>
</fes:Filter>
</wfs:Query>
我不确定您是否可以使用 CQL 创建这种连接,但您可以尝试如下:
cql_filter=WITHIN(a.geometry, geometryA) OR WITHIN(b.geometry, geometryA)
【讨论】:
以上是关于CQL 过滤多个类型名以检索指定几何中的特征的主要内容,如果未能解决你的问题,请参考以下文章