花了一些时间之后,我能够回答我自己的问题。
首先进行一些搜索,我确定大约 1 度 = 111.325 公里。https://answers.yahoo.com/question/index?qid=20060905051639AAWGjH9
要添加多个 DWITHIN 过滤器,您只需在每个过滤器之间添加 AND 即可。如果是 WFS 格式,您可能需要添加 %20AND%20,以便包含空格。
要执行某个位置的 DWITHIN,您需要将以下内容附加到您的 wfs.txt 文件中:该点是经/纬度,0.05 是距该点的度数,公里是传入的单位。使用 geoserver 时,它将默认为度数,如原始问题中的链接所述。
&CQL_FILTER=DWITHIN(GEOM,Point(-60.2 46.1),0.05,kilometers)
这将返回 WFS 图层中指定点度数范围内的任何要素。
为了过滤掉另一层,我使用了以下 URL 中的信息http://docs.geoserver.org/2.6.x/en/user/extensions/querylayer/index.html
首先,您必须按照链接所述将正确的 querylayer 模块安装到您的 Geoserer 版本中。
为了根据功能名称进行过滤,我使用了以下 CQL_filter:
&CQL_FILTER=DWITHIN(GEOM,collectGeometries(queryCollection('Workspace:AssetLayer','GEOM','AssetTypeID=1')),
.02,kilometers%29
这将从您请求的 WFS 图层返回所有要素,这些要素位于“Workspace:AssetLayer”图层中 AssetID 为 1 的要素指定的度数范围内。
即,如果学校的 AssetTypeID 为 1,则这将返回“Workspace:AssetLayer”图层上学校 0.02 度范围内的原始图层中的所有要素。
“GEOM”值应该是 SQL 中保存几何数据的列的名称。
另外,我对 CQL_Filter“%29” 中的最后一个括号进行了编码,因为我发现当通过 openlayers 发出请求时,它会将其剥离。
正如我所说,我是 openlayers/geoserver 的新手,所以这可能并不适用于所有情况,但这就是我的想法。我认为在不同的预测中可能会有一些变化。希望这能让您走上正轨。