Echarts基于百度地图实现地图飞线

JavaScript018

Echarts基于百度地图实现地图飞线,第1张

echart社区例子都是基于geo底图实现的底图飞线,现实现基于在线地图实现地图飞线:

原例子 Make A Pie - 模拟迁徙+百度地图

(1条消息) 利用ECharts3来实现ECharts2实例中的模拟迁徙效果,即背景地图为百度地图。_GiScript的博客-CSDN博客

效果图:

申请key:[控制台 | 百度地图开放平台 (baidu.com)][_ _ _baidu.com]

可以去这里---->Make A Pie - 150种legend-----图例

飞线样式也可以改

遇到什么问题,可留言,看到会尽快回复。

2016-05-12

上一周完成了地图与飞线的实现,使用的是 d3.js + svg,后发现可能存在性能隐患。

当飞线数量多的时候,页面上则有多个 svg <path> 结点,并且每条飞线有头部、结束圆圈、蒙板等效果,则页面上的结点数是 飞线数*其他部件数。将会是一个较大的值。

画布罩在整个 HTML 上,共两层 Canvas 画布,底层绘制世界地图,表层绘制飞线。

二次贝塞尔曲线公式

(其中 起始点 p0, 控制点 p1, 终点 p2)

t 从 0 变到 1,每个 t 的变化时,就绘制一帧;

飞线的速度就取决于增量变化的大小,增量越小,动画就越细致。

如何表现 t ?

给每一个飞线对象单独一个 t 属性,每绘制完一帧,t = t + 增量(固定值);

requestAnimationFrame 动画

与 SVG 飞线 相比:

渐变消失: ctx.globalAlpha

使用 globalAlpha 和 临时 Canvas;

但有两个弊端:

模拟数据来源于B2B 外贸单日询盘量,总数共 596 条, 单次同时绘制 50 条 飞线情况下:

具体如下:

动画帧数保持在 42-60 左右,动画流畅;

动画帧数保持在 12-43 左右,视觉上仔细看略有卡顿;

CPU 占用率在 20%-30% 浮动

CPU 占用率高于 100%

皆无内存泄漏问题。 SVG 飞线的 JS heap 总大小略高于 Canvas 飞线。

测试了 Canvas 飞线,在同时绘 50 条、100 条、200 条、300 条、400 条 时的动画流畅度。