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