使用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);
相关推荐
该资源适合初级同学对geosever图层进行编辑的功能,可以下载使用,该资源能满足openlayers对geoserver图层的查询、编辑、新增,删除等操作
iClient for OpenLayers控制图层组显隐方式的实现步骤。 下载后直接运行目录下:example\示例\图层组控制.html(需要修改里面的服务地址url为自己发布的服务信息)
Openlayers虽然提供了很多方法, 一般是从图层(Layer)获取获取元素(feature),或者从元素(Feature)获取坐标(Coordinate)。获取到的一般都是集合。但是想要反着通过元素(feature)获取图层(Layer).OL选择...
openlayers 中利用矢量图层添加注记的示例。
开发时,有时候图层很多,需要有同时打开关闭多个图层的功能,但是正式版的layerSwitcher不支持group layer功能. 从网上搜到layerSwitcher的扩展,是在源代码里添加对grouplayer的操作和事件支持. 对layerSwitcher....
次程序是openlayers和geoserver的一个demo程序,可以实现在地图文件上编辑,修改,新增 区域,并保存,可以在地图区域上,标点,画多边形区域
openlayers 实现在地图上添加文字标注。为图片注记添加文本标签
主要为大家详细介绍了OpenLayers实现图层切换控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
openlayers图层开关控件,支持图层开关,增删图层控件自动联动,支持openlayers4、openlayers5版本
openlayers3 显示静态地图,从后台查询点数据(后台java代码没有提交,太简单了。。。)展示到地图并添加标注,给标注添加点击事件并展示标注信息,初次接触开源GIS,代码中有错误还请各位看官指正,感谢!
openlayers自定义规则切片浏览实例 包括openlayers.js,Config.js,img,TMS.html
OpenLayers地图加入google图层 OpenLayers google layer 自己可以用google账号登录申请特定域名的地图key.
解决openlayers跨域访问的解决方案,按照附件中说明.txt中步骤操作应该是没问题的,我已经测试过。
openlayers 鹰眼示例,包含图层选择
主要为大家详细介绍了OpenLayers3实现图层控件功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
uDig定制地图样式发布到Geoserver并使用Openlayers和Cesium验证,含文档和代码以及中国(世界)地图,SHP格式。
1.新建项目 (vue-openlayers为项目名),并选择default模版 vue create vue-openlayers 2.安装openlayers cnpm i -S ol 第三步:写业务代码 1.删除掉HelloWorld.vue 新建 olmap.vue组件 components/olmap.vue代码...
geoserver+postgis+openlayers 空间要素的增删改功能,具体还可参考https://blog.csdn.net/rrrrroy_Ha/article/details/90904465
openlayers加载静态图片作为底图,操作图片流畅,可控显示范围和等级
使用openlayers3实现动态点闪烁功能,结合canvas技术,加载到点到地图上