前一阵子在使用antVL7进行地图可视化开发时遇到一些问题,这里总结记录一下
经典热力图展示问题
首先是基本用法
1
2
3
4
5
6
7
8 const myHeatmapLayer = new HeatmapLayer()
.source(data)
.shape('heatmap')
.size('demonum', [0, 1.0])
.style({
// 具体色带,热力图最小半径等配置,可以自行去官网查看
......
})上述代码 data 是一个由多个 feature 点构成的 geojson 格式数据;
其中 demonum 是上述数据中 feature 属性即feature.properties.demonum字段大小(必须为数字类型,可以遍历使用Number()操作)
由于有多个 feature, 所以热力图 将根据每个 feature 中的 demonum 字段大小作为热力值进行绘制这里有个坑,如果每个 feature 中的 demonum 都为 0,这时每个点热力值都会按照最大值进行处理,即 明明每个点的热力值都为 0 ,热力图却按最大值进行绘制了,这应该算是一个 bug,不知道后续官网会不会处理。
避免方法:可以自行遍历判断每个点数据的 demonum 属性,如果全部为 0 则不进行热力图的绘制,此时前端展示较为合理。
layer的鼠标移入移出事件频繁异常触发
假设现在有一个图层 myLayer ,需求为鼠标移入展示一个 popup 弹窗,鼠标移出销毁此 popup
添加取消事件代码:
1
2
3
4
5
6 myLayer.on('mouseenter',ev => {
console.log('mouseenter......')
})
myLayer.on('mouseout',ev => {
console.log('mouseout......')
})代码看起来没有问题,我也去官网找到了鼠标事件的用法,这里贴上:
1
2
3 layer.on('mouseenter', (ev) => {}); // 鼠标进入图层要素
layer.on('mousemove', (ev) => {}); // 鼠标在图层上移动时触发
layer.on('mouseout', (ev) => {}); // 鼠标移出图层要素时触发我运行了我的代码,发现鼠标移入 myLayer 图层时,控制台打印了多次
mouseenter......和mouseout......,我明明只移入了一次,不知道为何会触发这么多次事件。。。。。。
这就造成了我页面中 popup 弹窗频繁闪动。。。最后,我使用了
layer.on('mousemove')方式处理 popup
这种做法的好处是:弹窗不会频繁闪动,因为它在不间断地销毁和生成;
坏处是:性能损失较大,而且没有鼠标移出事件,需要点击地图弹窗才能消失。
我目前的感觉是 这也是此可视化框架的一个 bug,还在继续研究。。。