`

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);
 

 

2
1
分享到:
评论
2 楼 tedeum 2013-12-06  
萧瑟的夏天 写道
可以给一份完整的代码吗,非常感谢,867532660@qq.com

需要哪方面的,例子发你QQ邮箱了。
1 楼 萧瑟的夏天 2013-12-06  
可以给一份完整的代码吗,非常感谢,867532660@qq.com

相关推荐

Global site tag (gtag.js) - Google Analytics