eCharts可以实现大量数据迅速渲染,笔者在项目中,测试包含25w余拐点的总计7w余条线渲染总共用时1秒左右,性能表现相当优秀,显示效果也相当不错。

eCharts天生支持mapbox,就像其天生支持百度地图一样,而选择前者的原因是其地图相当漂亮,而且支持相当程度的用户自定义地图。

效果图:

1,添加相关JS引用

包含mapbox底图引用以及eCharts引用

    <script src='https://api.mapbox.com/mapbox-gl-js/v0.49.0/mapbox-gl.js'></script>
    <link href='https://api.mapbox.com/mapbox-gl-js/v0.49.0/mapbox-gl.css' rel='stylesheet'/>
    <script src='https://api.mapbox.com/mapbox-gl-js/plugins/mapbox-gl-language/v0.10.0/mapbox-gl-language.js'></script>

    <script src="http://www.echartsjs.com/dist/echarts-gl.min.js"></script>
    <script src="http://www.echartsjs.com/dist/echarts-gl.min.js"></script>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>

以上引用为在线引用,可以直接添加到项目而不必下载相关文件

2,在HTML中添加相关容器

<div id="main"><div>

之后新建的JS文件或标签书写JS

3,在JS中引入mapbox

mapboxgl.accessToken = 'pk.eyJ1Ijoibmlld3poIiwiYSI6ImNqbjRvM2F4ODA5ZDEzd2xkd2oxZnB4Y2UifQ.phMvmLw9t9lDxobKyYVbPw';

4,初始化底图及图表

var chart = echarts.init(document.getElementById('MapDiv'));
chart.setOption({
    mapbox: {
        center: [117, 39],
        zoom: 10,
        altitudeScale: 10000000,
        style: 'mapbox://styles/mapbox/dark-v9',
        postEffect: {
            enable: true,
            FXAA: {
                enable: true
            }
        },
        light: {
            main: {
                intensity: 1,
                shadow: true,
                shadowQuality: 'high'
            },
            ambient: {
                intensity: 0.
            }
        }
    },
    series: [{
        type: 'lines3D',

        coordinateSystem: 'mapbox',

        blendMode: 'lighter',

        polyline: true,

        data: []
    }]
})

数据的数据在此可以先填为空,之后可以动态追加

5,追加数据并渲染

            chart.setOption({
                series: [{
                    type: 'lines3D',

                    coordinateSystem: 'mapbox',

                    blendMode: 'lighter',

                    polyline: true,

                    lineStyle: {
                        width: 1,
                        color: 'red',
                        opacity: 1
                    },

                    data: callback[0]
                },
                    {
                        type: 'lines3D',

                        coordinateSystem: 'mapbox',

                        blendMode: 'lighter',

                        polyline: true,

                        lineStyle: {
                            width: 1,
                            color: 'green',
                            opacity: 1
                        },

                        data: callback[1]
                    },
                    {
                        type: 'lines3D',

                        coordinateSystem: 'mapbox',

                        blendMode: 'lighter',

                        polyline: true,

                        lineStyle: {
                            width: 1,
                            color: 'blue',
                            opacity: 1
                        },

                        data: callback[2]
                    },
                    {
                        type: 'lines3D',

                        coordinateSystem: 'mapbox',

                        blendMode: 'lighter',

                        polyline: true,

                        lineStyle: {
                            width: 1,
                            color: 'yellow',
                            opacity: 1
                        },

                        data: callback[3]
                    },
                    {
                        type: 'lines3D',

                        coordinateSystem: 'mapbox',

                        blendMode: 'lighter',

                        polyline: true,

                        lineStyle: {
                            width: 1,
                            color: 'orange',
                            opacity: 1
                        },

                        data: callback[4]
                    }
                ]
            })

PS、数据格式

三维数组

数据整体为一个数组,数组中,每条线又为一个数组,其中,线上每个点又构成[X,Y]数组,即;

[[[0,0],[1,1],[1,2]],[[10,10],[100,100]]]

数据数组中,有两个子数组,表示两条线,其中每个最低级数组表示线上点的坐标。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐