Openlayers如何刷新过滤图层

使用Openlyers+Geoserver进行一个大量数据的展示,效率太低不能很好的的展示,也不适合于使用样式表按比例尺进行分层加载,于是研究一下如何通过代码刷新过滤图层,具体如下:
1、使用mergeNewParams的方式,这种方式从Geoserver的例子中学来的,数据量不大时可以使用,数据量一大,基本就不能使用了:
Java代码
  1. //先创建一个filter的数据结构 
  2. var filterParams = { 
  3.         filter: null
  4.         cql_filter: null
  5.         featureId: null 
  6.     }; 
  7. //可以使用cal, ogc, fid进行过滤,具体如下 
  8. if (OpenLayers.String.trim(filter) != "") { 
  9.         if (filterType == "cql"
  10.             filterParams["cql_filter"] = filter; 
  11.         if (filterType == "ogc"
  12.             filterParams["filter"] = filter; 
  13.         if (filterType == "fid"
  14.             filterParams["featureId"] = filter; 
  15.     } 
  16. //然后调用图层方法,传入filter的数据 
  17. layer.mergeNewParams(filterParams); 
//先创建一个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的方式,如下所示:
Java代码
  1. filter: new OpenLayers.Filter.Logical({ 
  2.                     type: OpenLayers.Filter.Logical.OR, 
  3.                     filters: [ 
  4.                         new OpenLayers.Filter.Comparison({ 
  5.                             type: OpenLayers.Filter.Comparison.EQUAL_TO, 
  6.                             property: "TYPE"
  7.                             value: "highway" 
  8.                         }), 
  9.                         new OpenLayers.Filter.Comparison({ 
  10.                             type: OpenLayers.Filter.Comparison.EQUAL_TO, 
  11.                             property: "TYPE"
  12.                             value: "road" 
  13.                         }) 
  14.                     ] 
  15.                 }) 
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"
                        })
                    ]
                })
但是这是初始化的时候,图层存在时如何刷新呢,可以调用图层的刷新方法,
Java代码
  1. layer.refresh(); 
layer.refresh();
但是这不起作用,需要强制刷新,搜索到几种方法,下面这个最简单:
Java代码
  1. layer.refresh({ force: true, active: true }); 
layer.refresh({ force: true, active: true });
另一种方法:
Java代码
  1. //创建一个Refresh的Strategy 
  2. var refresh = new OpenLayers.Strategy.Refresh({force: true, active: true}); 
  3. //然后把这个Strategy加入到图层 
  4. strategies: [new OpenLayers.Strategy.Fixed(), refresh], 
  5. //需要刷新的时候就调用他的refresh方法 
  6. refresh.refresh(); 
//创建一个Refresh的Strategy
var refresh = new OpenLayers.Strategy.Refresh({force: true, active: true});
//然后把这个Strategy加入到图层
strategies: [new OpenLayers.Strategy.Fixed(), refresh],
//需要刷新的时候就调用他的refresh方法
refresh.refresh();
3、使用不刷新,直接删除添加图层
虽然上面这几种方法都比较好,但是刷新的效率很低,于是尝试删除图层后再添加,发现显示效率更高,如下所示:
Java代码
  1. //删除图层 
  2. map.removeLayer(layder); 
  3. //更新过滤条件 
  4.     var f = new OpenLayers.Filter.Comparison({ 
  5.         type: OpenLayers.Filter.Comparison.EQUAL_TO, 
  6.         property: "PARENT"
  7.         value: id 
  8.     }); 
  9.     //创建和添加图层 
  10.     layer= createLayer("layername", "layerid", f); 
  11.     map.addLayer(layer); 

你可能感兴趣的:(Openlayers,filter,gis,地理信息系统)