首页 文章

Geoserver - 使用DWITHIN过滤点

提问于
浏览
1

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

我想要完成的是返回在不同点的特定距离内的特征 . (即在学校5公里范围内)

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

我的问题如下:

  • 从我的理解,因为这个错误http://jira.codehaus.org/browse/GEOS-937我必须使用度数为我的单位 . 如何在客户端使用javascript / openlayers 3将5km转换为度数值?

  • 我可以添加多个DWITHIN过滤器来说明一个点是在一个点的5km内还是另一个点的10km内?

  • 我可以根据功能类型进行过滤吗?即距学校5公里,医院10公里的返回点

1 回答

  • 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图层中的任何要素,这些要素位于“Workspace:AssetLayer”图层中AssetID为1的要素指定的度数范围内 .

    即如果学校的AssetTypeID为1,这将返回原始图层中“Workspace:AssetLayer”图层中学校0.02度范围内的所有要素 .

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

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

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

相关问题