Geoserver - 使用 DWITHIN 过滤点

Ste*_*eve 2 javascript geoserver openlayers openlayers-3

首先,我是 Geoserver 和 Openlayers 的新手。我一直在尝试使用图层预览页面在 Geoserver 端使用 Openlayer 查看器查看我的图层。我最终会将它作为 Openlayers WFS GET 请求来实现。

我想要完成的是返回不同点一定距离内的特征。(即距离学校 5 公里以内)

我正在使用 Geoserver 上的图层预览页面。我添加了“DWITHIN(GEOM, POINT(-60.2 46.1), 0.05, km)”的CQL过滤器。它限制了返回的点数,但我不确定它是否正确过滤。

我的问题如下:

  1. 根据我的理解,由于这个错误http://jira.codehaus.org/browse/GEOS-937我必须为我的单位使用度数。如何在客户端使用 javascript/openlayers 3 将 5km 转换为度数值?
  2. 我可以添加多个 DWITHIN 过滤器来判断一个点是否在一个点的 5 公里内和另一个点的 10 公里内?
  3. 我可以根据特征类型进行过滤吗?即返回点距离学校 5 公里和医院 10 公里以内

Ste*_*eve 5

在花了一些时间之后,我能够回答我自己的问题。

首先进行一些搜索,我确定大约 1 度 = 111.325 公里。https://answers.yahoo.com/question/index?qid=20060905051639AAWGjH9

要添加多个 DWITHIN 过滤器,您只需在每个过滤器之间添加一个 AND。如果是 WFS 格式,您可能需要添加 %20AND%20 以便包含空格。

要对某个位置进行 DWITHIN,您需要将以下内容附加到您的 wfs 中。点是经度/纬度,0.05 是距离点的度数,公里是传入的单位。使用 geoserver 时,它将默认为度数,如原始问题中的链接所述。

&CQL_FILTER=DWITHIN(GEOM,Point(-60.2 46.1),0.05,kilometers)
Run Code Online (Sandbox Code Playgroud)

这将返回 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
Run Code Online (Sandbox Code Playgroud)

这将返回您请求的 WFS 图层中的所有要素,这些要素在图层“Workspace:AssetLayer”中 AssetID 为 1 的要素指定的度数内。

即,如果学校的 AssetTypeID 为 1,这将返回原始图层中位于 'Workspace:AssetLayer' 图层上一所学校 0.02 度范围内的所有要素。

“GEOM”值应该是在 SQL 中保存几何数据的列的名称。

另外,我对 CQL_Filter "%29" 中的最后一个括号进行了编码,因为我发现在通过 openlayers 发出请求时它正在剥离它。

正如我所说,我是 openlayers/geoserver 的新手,所以这可能不适用于所有情况,但这就是我想出来的。我认为在不同的预测中可能会有一些变化。希望这能让你走上正轨。