通过要素属性在本地过滤ol.layer.Vector

时间:2015-03-12 14:06:38

标签: openlayers openlayers-3

我有一个openlayer-3网络应用程序,我需要对其进行一些过滤。该层恰好来自WFS源。我希望选择过滤为服务器的GetFeature CQL请求,并在本地过滤数据。

我还没有让CQL请求正常工作。同时,我想根据Openlayers 2中的功能属性在本地过滤矢量数据。有没有办法轻松完成?过滤器对象是否故意未包含在ol3中?

编辑:我很想在ol3中使用这样的过滤器:
http://dev.openlayers.org/examples/cql-format.html

1 个答案:

答案 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。 :)我希望我能帮助......