Geoserver - 使用DWITHIN过滤点

时间:2015-05-19 19:12:37

标签: javascript openlayers geoserver 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公里的返回点

1 个答案:

答案 0 :(得分:2)

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

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

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

要对某个位置执行DWITHIN,您可以将以下内容附加到您的wfs。点是long / lat,0.05是点的度数,km是传入的单位。使用geoserver时,它将默认为度,因为原始问题中的链接表示。

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

这将返回WFS图层中指定点的度数范围内的任何特征。

要过滤掉其他图层,我使用了以下网址http://docs.geoserver.org/2.6.x/en/user/extensions/querylayer/index.html

中的信息

首先,您必须将正确的查询图层模块安装到您的Geoserer版本作为链接状态。

要根据功能名称进行过滤,我使用了以下CQL_filter:

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

这将返回您正在请求的WFS图层中的任何要素,这些要素位于图层'工作空间:AssetLayer'的资产ID为1的要素指定的度数范围内。

即如果学校的AssetTypeID为1,这将返回原始图层中所有功能,这些功能在学校的0.02度范围内,位于“工作空间:资产层”上。层

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

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

正如我所说,我是openlayers / geoserver的新手,所以这可能不适用于所有情况,但这就是我弄清楚的方法。我在考虑不同的预测,可能会有一些变化。希望这可以让你走上正轨。