ArcGIS使用ClassBreaksRenderer(分级渲染)后恢复图层原本渲染的样式
程序员文章站
2022-06-14 08:12:48
...
不想看废话的请直接看最后面的加粗部分????
在项目中需要根据某个属性值的范围区间来展示不同的颜色,所以就使用了ArcGIS符号渲染中的ClassBreaksRenderer(分级渲染)来实现
分级之后,需要添加一个恢复原来样式的功能。最开始的时候去官网找,发现没有相关的方法和例子(可能有,只是我没找到????????????),然后百度也没有发现类似的功能代码。所以只能自己在控制台里面慢慢调。
一个小时后,找了到解决方案
首先我想的方案是添加一个恢复按钮,然后点击恢复按钮之后就重新加载图层到map中,然而试了之后发现重新加载之后的图层依然是分级渲染之后的图层效果(因为layer的对象还是原来的那个),所以此路不同
接着我想的是删除map现有的FeatureLayer,重新new一个FeatureLayer对象添加到map,但是这样就会出现点击恢复后加载很慢的问题,而且性能也是个问题(毕竟又不是只分级一次)。
最后我去控制台把FeatureLayer中的renderer属性缓存起来,最后分级之后再把缓存的那个renderer赋值给分级之后的FeatureLayer,发现图层恢复原来的效果了。所以此方法可行,并且速度够快,对性能无影响。
解决方案
所以使用ClassBreaksRenderer(分级渲染)后恢复原本样式的具体做法就是:
- 在FeatureLayer在map中初始化完成后定义一个属性将FeatureLayer的renderer属性保存起来
- 在分级渲染之后想恢复的话只需要把这个缓存的值重新赋值给FeatureLayer的renderer属性
例如:
//我自己定义了一个layersRenderer 属性来缓存renderer
FeatureLayerHandle.prototype.layersRenderer = {};
//最后我在点击分级渲染这个功能模块时(我这的逻辑这时候已经100%加载了图层)缓存renderer(有多少个图层需要用到分级渲染就可以缓存多少个)
//也可以在view.when(function(){})中缓存,不可以在new FeatureLayer的时候缓存,因为这时候图层还没有加载
//这个layerObj.shi代表的就是市的图层,改成自己的图层即可
layersHandle.layersRenderer.shi = layersHandle.layersObj.shi.renderer;
layersHandle.layersRenderer.xian = layersHandle.layersObj.xian.renderer;
//然后恢复的时候只需要把缓存的值赋值给图层的rednerer就行
layersHandle.layersObj.shi.renderer = layersHandle.layersRenderer.shi;
如发现错误请大佬在评论区指正错误
上一篇: 其他练习(持续更新ing)
下一篇: PHPExcel