环境
我正在尝试使用CQL过滤从GeoServer上运行的WFS层获取精选数据。我无法访问服务器。
目标
在另一个图层的另一个要素的几何图形内接收两种类型的所有要素;每层最多一个请求(因此不是每种类型)
思路
我必须:
尝试
对于单个类型名称,这很容易。首先获取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(或其他任何东西)来修复固定几何体中的两个类型名吗?
答案 0 :(得分: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)