Openlayers如何刷新过滤图层

 

使用Openlyers+Geoserver进行一个大量数据的展示,效率太低不能很好的的展示,也不适合于使用样式表按比例尺进行分层加载,于是研究一下如何通过代码刷新过滤图层,具体如下:

1、使用mergeNewParams的方式,这种方式从Geoserver的例子中学来的,数据量不大时可以使用,数据量一大,基本就不能使用了:
//先创建一个filter的数据结构
var filterParams = {
        filter: null,
        cql_filter: null,
        featureId: null
    };
//可以使用cal, ogc, fid进行过滤,具体如下
if (OpenLayers.String.trim(filter) != "") {
        if (filterType == "cql")
            filterParams["cql_filter"] = filter;
        if (filterType == "ogc")
            filterParams["filter"] = filter;
        if (filterType == "fid")
            filterParams["featureId"] = filter;
    }
//然后调用图层方法,传入filter的数据
layer.mergeNewParams(filterParams);

 

2、使用Filter的方式,如下所示:
filter: new OpenLayers.Filter.Logical({
                    type: OpenLayers.Filter.Logical.OR,
                    filters: [
                        new OpenLayers.Filter.Comparison({
                            type: OpenLayers.Filter.Comparison.EQUAL_TO,
                            property: "TYPE",
                            value: "highway"
                        }),
                        new OpenLayers.Filter.Comparison({
                            type: OpenLayers.Filter.Comparison.EQUAL_TO,
                            property: "TYPE",
                            value: "road"
                        })
                    ]
                })

 

但是这是初始化的时候,图层存在时如何刷新呢,可以调用图层的刷新方法,
layer.refresh();
但是这不起作用,需要强制刷新,搜索到几种方法,下面这个最简单:
layer.refresh({ force: true, active: true });
另一种方法:
//创建一个Refresh的Strategy
var refresh = new OpenLayers.Strategy.Refresh({force: true, active: true});
//然后把这个Strategy加入到图层
strategies: [new OpenLayers.Strategy.Fixed(), refresh],
//需要刷新的时候就调用他的refresh方法
refresh.refresh();

 

3、使用不刷新,直接删除添加图层
虽然上面这几种方法都比较好,但是刷新的效率很低,于是尝试删除图层后再添加,发现显示效率更高,如下所示:
//删除图层
map.removeLayer(layder);
//更新过滤条件
    var f = new OpenLayers.Filter.Comparison({
        type: OpenLayers.Filter.Comparison.EQUAL_TO,
        property: "PARENT",
        value: id
    });
    //创建和添加图层
    layer= createLayer("layername", "layerid", f);
    map.addLayer(layer);

 

 

转载自:https://blog.csdn.net/sunsides/article/details/84474813

You may also like...