关于arcgis:使用ArcGIS-API生命周期钩子实现某个图层保持置顶
前言ArcGIS API如同国内用的不多,除了设计院以外,大多数还是用的百度和高德API。ArcGIS API的文档是全英文,因而分享一些小性能的实现思路。 需要ArcGIS中,新增加的图层永远在最下面,就像这样: 而在业务逻辑上,有时咱们须要某个图层置顶。比方用来统计面积大小的图层,如果它被其余图层笼罩掉,就不能失常的统计面积和显示被选中的地块了: 本文就来解决这个问题 先说原理,非常简单,应用到生命周期钩子函数。 尝试的其余办法首先尝试了add图层是能不能手动设置order,也就是给它设置的地位很高,比方100: 为了便于交换,咱们临时把这个图层叫做areaSumLayer。 // 业务上须要置顶的图层let areaSumLayer: GraphicsLayer// 增加图层时设置的很高map.add(areaSumLayer,100);事实上这样不行,因为后面提到它的逻辑是:“新增加的图层永远在最下面”即便以前的图层设置的很高,新图层还会更高,比方地位在101。 因而咱们的思路是:无奈在创立areaSumLayer时保障它当前是置顶的而是在创立其余图层时保护一下areaSumLayer的地位 生命周期钩子什么是生命周期?所有的前端组件都应用了这个思维。生命周期指的是从一个组件从创立到沦亡的过程。 拿前端框架Angular举例,最常见的包含: ngOnInit(): 组件创立ngOnChanges(): 绑定的数据发生变化时ngOnDestoryed(): 组件销毁https://angular.cn/guide/lifecycle-hooks 或者VUE中: created(): 组件创立mounted(): 组件渲染结束beforeUpdate():产生变更前updated(): 产生变更unmounted(): 组件登记https://cn.vuejs.org/guide/essentials/lifecycle.html这些生命周期钩子是在框架开发者编写时就写好的,要应用这些周期函数,只须要用回调的形式,传入一个咱们本人写好的办法,这个办法会在适当的机会(生命周期产生时)被主动调用,用到的就是订阅者-观察者模式。 ArcGIS API接下来看看ArcGIS的图层有什么生命周期(官网称之为事件event): https://developers.arcgis.com/javascript/latest/api-reference...before-add:增加前after-add:增加后before-changes:变更前change:变更after-changes:变更后before-remove:销毁前after-remove:销毁后有这么多生命周期,而咱们的业务上用到的是增加后,也就是“当新图层增加后,咱们手动的更新一下须要置顶的areaSumLayer图层。 after-add是这样用的: https://developers.arcgis.com/javascript/latest/api-reference...map.layers.on("after-add", function(event){ console.log(event.item.id);});map.layers.on是开启监听,map就是Map类创立的对象"after-add"是监听的事件类型,咱们须要监听增加图层之后的事件event是本人写的回调函数中的变量办法体是咱们要在回调时执行的操作失常状况下,当有新的图层被增加进来时,控制台就会输入它的ID。 接下来是寻找:areaSumLayer有没有曾经被增加须要用到collection汇合的find办法: https://developers.arcgis.com/javascript/latest/api-reference... find办法是寻找某个图层在不在图层汇合中,应用的还是回调函数: // 如果此时图层汇合中有面积的图层 if (map.layers.find(function (layer) { return layer.id === areaSumLayer.id })){ console.log("true"); }逐条解释: 咱们定义了一个办法: function (layer) { return layer.id === areaSumLayer.id}layer是回调时的变量,能够轻易写,但要和办法体中对应办法的内容就是:判断回调变量的图层id和咱们的id是否相等,如果相等,阐明咱们要查问的图层在这个汇合中,返回true接下来解决“调整图层程序”的步骤: // 从新增加面积图层map.remove(areaSumLayer);map.add(areaSumLayer);就是先暗藏再从新增加因而合起来就变成了这样: /** * 地图生命周期 * 当图层创立后,把预览图片的图层从新增加一下,使其永远置顶 */ map.layers.on('after-add', (event) => { // 如果此时图层汇合中有areaSumLayer图层 if (map.layers.find(function (layer) { return layer.id === areaSumLayer.id })) { // 从新增加areaSumLayer图层 map.remove(areaSumLayer); map.add(areaSumLayer); } })此时,只有有别的图层增加结束,钩子函数就会从新把areaSumLayer置顶。 ...