我有一个openlayer-3网络应用程序,我需要对其进行一些过滤。该层恰好来自WFS源。我希望选择过滤为服务器的GetFeature CQL请求,并在本地过滤数据。
我还没有让CQL请求正常工作。同时,我想根据Openlayers 2中的功能属性在本地过滤矢量数据。有没有办法轻松完成?过滤器对象是否故意未包含在ol3中?
编辑:我很想在ol3中使用这样的过滤器:答案 0 :(得分:1)
通过解析CQL过滤器并在将这些功能添加到图层之前过滤掉这些功能,我找到了解决方案。
/* Your filter ... */
var cql = "STATE_ABBR >= 'B' AND STATE_ABBR <= 'O'";
/* Gets all the features from the current extent */
var features = new ol.format.WFS().readFeatures(response);
/**
* Find a way to parse your CQL filter, for example, replace the 'AND's into '&&'s
* It would be better to build a parser. You can use this: http://pegjs.org/
*/
/* Filters the features */
features = features.filter(function (feature) {
return feature.get('STATE_ABBR') >= 'B' && feature.get('STATE_ABBR') <= 'O';
});
/* Adds the features to the layers */
layerWFS.getSource().addFeatures(features);
尝试使用PEGjs
构建解析器你的解析器应该改变这个
"STATE_ABBR >= 'B' AND STATE_ABBR <= 'O'"
进入这个
feature.get('STATE_ABBR') >= 'B' && feature.get('STATE_ABBR') <= 'O'
请参阅示例here
关键是这里的PEGjs。 :)我希望我能帮助......