背景分析:采用Layer绘制方案中存在很多情况下需求在一张地图绘制n个属性显示的问题,例如行政区划面,边界等等。例如如下场合
未知多个元素汇集在同一张地图实例上去做显示,编辑等效果。
处理方案:
1.第一反应是N个layer叠加显示
优点:数据处理简单,执行编辑方案简单
缺点:需要使用存储全局变量多,绘制性能占用大,内存占用大,后续清理图层,清理数据麻烦
2.单图N元素的显示
核心利用 数据组装时 组装 features=[];
优点:需要使用存储变量少,绘制性能占用低,图层唯一,数据,图层清理简单。整体占用内存小
缺点:图层编辑麻烦,局部编辑引起整图变化
综合之下方案二仍是强于方案1的。
基于方案2下我们实现了对单一图层下N元素的属性变化,当点击红色面时变更颜色。使用场景。边界中局部区域的选中高亮,行政区划,网格点击或进入某一区域高亮显示
改变元素我们仍然利用我们最核心的思想数据驱动
有了这个理念后我们要做的就是拆解整个流程
1.点击获取图层属性
this.map.queryRenderedFeatures(e.point, {
layers: ['ls-center']});
该方法返回的是当前点击位置所在图层对应的features
数组,含有该位置所有layer
数据
2.找到点击位置在元数据中的唯一标识properties
提供数据组装时加入自定义标识
3.利用绘制面试提供的识别字段,及响应stops
驱动变更
"property": "value",