首先,我是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 回答
花了一些时间后,我能够回答我自己的问题 .
首先做一些搜索,我确定1度=约111.325公里 . https://answers.yahoo.com/question/index?qid=20060905051639AAWGjH9
要添加多个DWITHIN过滤器,您只需在每个过滤器之间添加AND . 如果它是WFS格式,您可能必须添加%20AND%20,因此包含空格 .
要对某个位置执行DWITHIN,您可以将以下内容附加到您的wfs . 点是long / lat,0.05是从点开始的度数,km是传入的单位 . 使用geoserver时,它将默认为度,因为原始问题中的链接表示 .
这将返回WFS图层中指定点的度数范围内的任何要素 .
要过滤掉另一个图层,我使用了以下网址中的信息http://docs.geoserver.org/2.6.x/en/user/extensions/querylayer/index.html
您必须在链接状态下将正确的查询图层模块安装到您的Geoserer版本 .
要根据功能名称进行过滤,我使用了以下CQL_filter:
这将返回您正在请求的WFS图层中的任何要素,这些要素位于“Workspace:AssetLayer”图层中AssetID为1的要素指定的度数范围内 .
即如果学校的AssetTypeID为1,这将返回原始图层中“Workspace:AssetLayer”图层中学校0.02度范围内的所有要素 .
“GEOM”值应该是在SQL中保存几何数据的列的名称 .
另外,我编写了CQL_Filter“%29”中的最后一个括号,因为我发现在通过openlayers发出请求时它正在剥离它 .
正如我所说,我是openlayers / geoserver的新手,所以这可能不适用于所有情况,但这就是我弄清楚它的方法 . 我在考虑不同的预测,可能会有一些变化 . 希望这可以让你走上正轨 .