`

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

相关推荐

    vue集成openlayers加载geojson并实现点击弹窗教程

    1.新建项目 (vue-openlayers为项目名),并选择default模版 vue create vue-openlayers 2.安装openlayers cnpm i -S ol 第三步:写业务代码 1.删除掉HelloWorld.vue 新建 olmap.vue组件 components/olmap.vue代码...

    openLayers完整代码示例数据

    在OpenLayers中,这些JSON文件通常用来存储地图的图层信息,如几何对象(点、线、面)、属性数据、样式规则等。例如,它们可以定义如下内容: 1. **几何对象**:每个JSON对象可能包含多个几何对象,如GeoJSON格式,...

    openlayers离线文档

    "过滤器"(Filters)在OpenLayers中用于筛选和显示地图数据。例如,你可以使用OGC标准的Filter Encoding(FE)来只显示满足特定条件的要素。 "缓冲区"(Buffers)是地图分析的一个重要概念,它允许你在地理对象周围...

    openlayers5渲染百万级别点.zip

    首先,理解OpenLayers 5中的图层概念至关重要。图层是地图上的一个可视化层次,可以包含各种地理要素,如点、线和多边形。对于大规模点数据,我们通常会创建一个矢量图层,并利用特定策略来处理数据。 1. **分块...

    geoserver wfs过滤查询

    在本例子中,我们将讨论如何在GeoServer中利用WFS的过滤查询功能来获取特定记录。 首先,WFS的GetFeature请求是用来从服务器获取地理特征的重要方法。在这个例子中,我们看到一个`<wfs:GetFeature>`元素,它包含了...

    openlayers5属性空间查询.zip

    属性查询是针对地图图层中的特定特征(如点、线、面)进行数据过滤,基于这些特征的属性值。例如,你可以查找所有人口超过100万的城市,或者查找所有植被覆盖率达到80%以上的区域。在OpenLayers中,可以使用`ol....

    geoserver与OpenLayers配置说明文档

    3. **创建图层**:使用OpenLayers的`new ol.layer.Tile`或`ol.layer.Vector`创建图层,指定图层的源为Geoserver提供的WMS或WFS服务。 4. **添加图层到地图**:将创建的图层添加到地图实例。 5. **交互功能**:可添加...

    [WebGIS之OpenLayers全面解析][郭明强,黄颖,谢忠等][程序源代码].rar

    本书首先介绍了WebGIS的基本概念和OpenLayers的架构,包括地图投影、地理坐标系、图层管理等基础知识。接着,详细讲解了如何使用OpenLayers创建地图,包括加载底图、添加图层、设置地图控件、处理地理数据等方面。...

    wfs获取图层信息并返回geoJson数据集

    2. 初始化地图:使用OpenLayers、Leaflet等地图库,根据解析后的GeoJSON创建图层并添加到地图中。 3. 展示数据:将GeoJSON中的几何对象显示在地图上,并可以结合属性信息进行标签、图例等的设置。 4. 数据操作:可能...

    openlayer在线标绘,并实现增删改查

    在这个"openlayer在线标绘,并实现增删改查"的主题中,我们将深入探讨如何利用OpenLayers加载离线地图,进行在线标绘,以及如何实现标绘要素的增删改查功能,同时还会涉及地图图层切换和定位功能。 1. **加载离线...

    ol-ext:Openlayers的很酷的扩展(ol)-动画集群,CSS弹出窗口,真棒字体渲染器,统计图图表(piebar),层切换器,维基百科层,动画,画布过滤器

    关键字:故事图,时间轴控件,CSS弹出窗口,真棒字体,统计图图表(饼图/栏),图层切换器,控制栏,维基百科图层,图例控件,搜索,动画,撤消/重做机制 入门 NPM软件包 ol-ext作为ES6模块( )和纯js( )存在。 ...

    矢量图形裁剪

    3. **执行裁剪操作**:使用OpenLayers的Geometry函数,如`intersects()`、`contains()`或自定义函数,检查每个矢量图层的几何对象是否与裁剪区域重叠或包含。 4. **更新视图**:根据裁剪结果,过滤并更新...

    ngeo一个旨在简化基于AngularJS和OpenLayers应用程序开发的JS库

    4. **易于集成**: ngeo与OpenLayers紧密集成,可以方便地使用OpenLayers的各种地图源、图层类型和交互对象。 5. **地理服务接口**: ngeo提供了与WMS、WMTS等地理信息服务交互的工具,便于从服务器获取和显示地图...

    基础WebGIS应用程式_基于openlayers,与GeoServer和PostGIS联动.zip

    - 开发者可以利用OpenLayers轻松地在网页上添加地图层,实现缩放、平移、图层切换等功能。 - 通过OpenLayers,我们可以添加标记、形状、图像覆盖物,甚至可以处理地理坐标和投影转换。 2. **GeoServer**: - ...

    MapLoom:MapLoom是基于OpenLayers 3的Web制图客户端。它为GeoServer中的数据存储(包括PostGIS和GeoGig)提供了功能齐全的编辑功能。 对于GeoGig图层,它可让您查看历史记录并与其他GeoGig存储库同步

    MapLoom MapLoom是一个Web客户端,它利用GeoGig来允许用户... 在图层的表视图中,我们添加了查看整个图层或图层的一组过滤要素的属性值的图表和统计信息的功能。 为此,我们创建了一个自定义的WPS,称为Summary_attr

    关于SLD样式配置详细教程

    它允许用户定义不同图层的显示样式,包括颜色、符号、标签、透明度等,使地图更具可读性和吸引力。在本教程中,我们将深入探讨SLD样式的配置及其在GEOSERVER中的应用。 首先,让我们理解SLD的基本结构。SLD由XML...

    Ext5OpenLayers3:Sencha Architect + ExtJS 5.0 with OpenLayers 3.1.1 示例应用程序

    开发者可以通过Sencha Architect的图形界面,轻松地将OpenLayers地图组件集成到ExtJS应用中,实现地图的加载、图层控制、标记添加等功能。这种结合使得开发者能够构建出具有地理信息系统(GIS)功能的复杂Web应用。 ...

    openlayerss实用案例地址

    OpenLayers 可以动态改变地图显示的内容,例如切换图层、隐藏/显示特定元素,或者根据过滤条件显示特定的数据子集。 七、SLD(Styled Layer Descriptor) SLD是一种XML格式,用于定义地图图层的视觉表现。通过SLD,...

    Sqlview动态发布地图图层的方法

    这意味着我们可以根据需要动态地组合和过滤数据库中的数据,而不是静态地发布每个单独的图层。这对于那些频繁变化或者需要个性化展示的地图数据尤其有用。GeoServer是一个开源的GIS服务器,用于发布和管理地理空间...

    创建一个自定义控件1

    这个控件是可扩展的,可以根据具体需求进行修改,例如添加图层的详细信息、过滤器或其他交互功能。通过学习这个过程,开发者可以更好地理解如何在OpenLayers中创建自定义控件,以满足项目中的特定需求。

Global site tag (gtag.js) - Google Analytics