Geoserver - 使用 DWITHIN 过滤点

Geoserver - filtering points using DWITHIN

首先,我是 Geoserver 和 Openlayers 的新手。我一直在尝试使用 Layer 预览页面在 Geoserver 端进行此操作,以使用 Openlayer 查看器查看我的图层。最后我会把它实现为一个 Openlayers WFS GET 请求。

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

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

我的问题如下:

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

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

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

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

要对某个位置进行 DWITHIN,您需要将以下内容附加到您的 wfs.点是 long/lat,0.05 是距离点的度数,公里是传入的单位。使用地理服务器时,它将默认为度数,如原始问题中的 link 所述。

&CQL_FILTER=DWITHIN(GEOM,Point(-60.2 46.1),0.05,kilometers)

这将 return WFS 图层中指定点度数范围内的任何要素。

为了过滤掉另一层,我使用了以下信息 URL http://docs.geoserver.org/2.6.x/en/user/extensions/querylayer/index.html

首先,您必须将正确的查询层模块安装到您的 Geoserer 版本中,如 link 所述。

为了根据特征名称进行过滤,我使用了以下 CQL_filter:

&CQL_FILTER=DWITHIN(GEOM,collectGeometries(queryCollection('Workspace:AssetLayer','GEOM','AssetTypeID=1')),
 .02,kilometers%29

这将 return 您请求的 WFS 图层中的任何要素,这些要素在图层 'Workspace:AssetLayer'.

中 AssetID 为 1 的要素指定的度数范围内

即,如果学校的 AssetTypeID 为 1,这将 return 原始图层中与 'Workspace:AssetLayer' 图层上学校 0.02 度以内的所有要素。

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

此外,我在 CQL_Filter“%29”中编码了最后一个括号,因为我发现在通过 openlayers 发出请求时它被剥离了。

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