数据可视化大屏Echarts高级开发散点图实战案例分析(地图扩展插件bmap.min.js、散点图、百度地图控件、柱图、涟漪动图、条件判断颜色)

简介: 数据可视化大屏Echarts高级开发散点图实战案例分析(地图扩展插件bmap.min.js、散点图、百度地图控件、柱图、涟漪动图、条件判断颜色)

系列文章目录

燃,拿来即用!Echarts动态排名柱状图(自适应电脑和手机端)

漏刻有时数据可视化Echarts组件开发(27):盒须图(箱线图)前后端php交互的实战案例

漏刻有时数据可视化Echarts组件开发(26):全国地图三级热力图下钻和对接api自动调用数据开发实录

漏刻有时数据可视化Echarts组件开发(25):引导线labelLine和散点图scatter的开发

漏刻有时数据可视化Echarts组件开发(24):本地离线的地图下钻与散点图

漏刻有时数据可视化Echarts组件开发(23):世界地图动态时间轴的散点气泡图

漏刻有时数据可视化Echarts组件开发(22):echarts高端地图交互美化

漏刻有时数据可视化Echarts组件开发(18):渐变透明柱状图和地图map结合的案例

漏刻有时数据可视化Echarts组件开发(17):值域漫游图

漏刻有时数据可视化Echarts组件开发(21):基于echarts开发的自动旋转map3D下钻和柱图地图

漏刻有时数据可视化Echarts组件开发(6):象形柱图实现水塔水位的动画

Echarts实战案例代码(59):geomap实现飞线、散点、引导线以及重叠label的解决

漏刻有时数据可视化Echarts组件开发(7):geo地图map3D组件的定时高亮轮播的解决方案

Echarts实战案例代码(46):带渐变背景颜色的倾斜角度的图表的CSS样式表解决方案


文章目录

系列文章目录

前言

项目说明

一、引入外部文件

二、构建dom容器

三、核心代码开发

1.散点数据格式

2.bmap参数配置

3.series组件参数配置

4.自适应浏览器大小

5.百度地图接口对接

6.百度地图个性化配置参数

总结


前言


3827d10d48464aa8a86fe55e030242b4.gif


项目说明

百度地图和echarts的结合使用,是数据可视化大屏开发过程中最亮眼的搭配组合,而连接两者之间关系的就是bmap.js。本项目主要涉及到:


百度地图的引入;

百度地图个性化配置;

echarts组件bmap的调用和参数设置;

echarts散点图组件的调用;

echarts路径图组件的调用;

按照数据的不同条件判断柱图颜色;


一、引入外部文件

其中lock_blue.js是个性化地图配置的外部文件,以便减少主体文件的体积大小;

//api.map.baidu.com/,采用自适应http和https协议头的写法,因此在预览时必须通过web服务器方式浏览;

    <script type="text/javascript" src="js/echarts.min.js"></script>
    <script type="text/javascript"
            src="//api.map.baidu.com/api?v=3.0&ak=3HGqGo1RHf8zsLZ***"></script>
    <script type="text/javascript" src="js/bmap.min.js"></script>
    <!--百度个性化地图-->
    <script type="text/javascript" src="js/skins/lock_blue.js"></script>


二、构建dom容器

<div id="container" style="height: 100%;"></div>



三、核心代码开发

1.散点数据格式

在项目应用,可以按照该格式生成API,通过封装函数进行调用和定时刷新。

  • name,地市名称,格式:string;
  • value,经纬度坐标,格式:array;
  • data,柱图高度,格式:number;
    //散点图标准数据格式;
    var scrData = [
        {"name": "杭州市", "value": [120.203437, 30.253831], data: 40},
        {"name": "成都市", "value": [104.098202,30.595856], data: 20},
        {"name": "上海市", "value": [121.473641, 31.223825], data: 50},
        {"name": "长沙市", "value": [112.89211,28.27699], data: 40},
        {"name": "西安市", "value": [108.955088,34.429473], data: 78},
        {"name": "北京市", "value": [116.418642,39.906744], data: 18},
        {"name": "兰州市", "value": [103.857887,36.146224], data: 38}
    ]

2.bmap参数配置

具体涵义见注释

        bmap: {
            center: [121.554586, 29.813444],//默认中心点;
            zoom: 5,//国家级:5,省级:8,市级:10,街道级:12
            roam: true, //是否开启平游或缩放
            mapStyle: mapStyle// {style: 'midnight'}//grayscale,googlelite
        },

3.series组件参数配置

series: [
            {
                type: 'lines',
                coordinateSystem: 'bmap',
                zlevel: 5,
                effect: {
                    symbolSize: 2 // 图标大小
                },
                lineStyle: {
                    width: 10, // 尾迹线条宽度
                    color: function (params) {
                        //console.log(params);
                        if (params.name == "上海市" || params.name == "北京市") {
                            return '#F7AF21';
                        } else {
                            return 'rgb(22,255,255, 1)';
                        }
                    },
                    opacity: 0.7, // 尾迹线条透明度
                    curveness: 0 // 尾迹线条曲直度
                },
                label: {
                    show: false,
                    position: 'end',
                },
                silent: true,
                data: getBodyData(scrData, getMax(scrData))
            },
            // 柱状体的顶部
            {
                type: 'scatter',
                coordinateSystem: 'bmap',
                zlevel: 5,
                label: {
                    show: true,
                    formatter: function (params) {
                        //console.log(params)
                        return "产值:" + params.data.value[2];
                    },
                    position: "top"
                },
                symbol: 'circle',
                symbolSize: [10, 5],
                itemStyle: {
                    color: function (params) {
                        // console.log(params);
                        if (params.name == "上海市" || params.name == "北京市") {
                            return '#F7AF21';
                        } else {
                            return 'rgb(22,255,255, 1)';
                        }
                    },
                    opacity: 1
                },
                silent: true,
                data: getTopData(scrData, getMax(scrData))
            },
            // 柱状体的底部
            {
                type: 'scatter',
                coordinateSystem: 'bmap',
                zlevel: 4,
                label: {
                    formatter: '{b}',
                    position: 'bottom',
                    color: '#fff',
                    fontSize: 12,
                    distance: 10,
                    show: false
                },
                symbol: 'circle',
                symbolSize: [10, 5],
                itemStyle: {
                    color: function (params) {
                        if (params.name == "上海市") {
                            return '#F7AF21';
                        } else {
                            return 'rgb(22,255,255, 1)';
                        }
                    },
                    opacity: 1
                },
                silent: true,
                data: scrData
            },
            // 底部外框
            {
                type: 'effectScatter',
                coordinateSystem: 'bmap',
                zlevel: 4,
                label: {
                    show: false
                },
                rippleEffect: {
                    scale: 2,
                    brushType: "fill"
                },
                symbol: 'circle',
                symbolSize: [20, 10],
                itemStyle: {
                    color: function (params) {
                        if (params.name == "上海市" || params.name == "北京市") {
                            return '#F7AF21';
                        } else {
                            return 'rgb(22,255,255, 1)';
                        }
                    },
                    opacity: 1
                },
                silent: true,
                data: scrData
            }
        ]

通过 color: function (params){}回调函数进行判断和设置,在实际开发过程中,可以封装为一个函数,进行便捷调用。

 color: function (params) {
                        //console.log(params);
                        if (params.name == "上海市" || params.name == "北京市") {
                            return '#F7AF21';
                        } else {
                            return 'rgb(22,255,255, 1)';
                        }
                    },


be4991e5253b46cf9e7ec78dc3f58e55.png


4.自适应浏览器大小

本案例在开发过程中,散点有明显的滑动动画;且在全屏的时候,散点无法自动紧贴地图,经过多次尝试,设置了定时 myChart.resize()效果。

    myChart.setOption(option);
    window.addEventListener("resize", function () {
        setTimeout(function () {
            myChart.resize();
        }, 200)
    });

5.百度地图接口对接

    // 百度地图接口对接设置;
    var map = myChart.getModel().getComponent('bmap').getBMap();
    //map.enableScrollWheelZoom(true);
    //卫星地图
    //map.setMapType(BMAP_SATELLITE_MAP);
    //地图控件;
    map.addControl(new BMap.MapTypeControl({mapTypes: [BMAP_NORMAL_MAP, BMAP_SATELLITE_MAP, BMAP_HYBRID_MAP]}));

6.百度地图个性化配置参数

var mapStyle = {
    styleJson: [
        {
            featureType: 'water',
            elementType: 'all',
            stylers: {
                color: '#044161'
            }
        },
        {
            featureType: 'land',
            elementType: 'all',
            stylers: {
                color: '#004981'
            }
        },
        {
            featureType: 'boundary',
            elementType: 'geometry',
            stylers: {
                color: '#064f85'
            }
        },
        {
            featureType: 'railway',
            elementType: 'all',
            stylers: {
                visibility: 'off'
            }
        },
        {
            featureType: 'highway',
            elementType: 'geometry',
            stylers: {
                color: '#004981'
            }
        },
        {
            featureType: 'highway',
            elementType: 'geometry.fill',
            stylers: {
                color: '#005b96',
                lightness: 1
            }
        },
        {
            featureType: 'highway',
            elementType: 'labels',
            stylers: {
                visibility: 'off'
            }
        },
        {
            featureType: 'arterial',
            elementType: 'geometry',
            stylers: {
                color: '#004981'
            }
        },
        {
            featureType: 'arterial',
            elementType: 'geometry.fill',
            stylers: {
                color: '#00508b'
            }
        },
        {
            featureType: 'poi',
            elementType: 'all',
            stylers: {
                visibility: 'off'
            }
        },
        {
            featureType: 'green',
            elementType: 'all',
            stylers: {
                color: '#056197',
                visibility: 'off'
            }
        },
        {
            featureType: 'subway',
            elementType: 'all',
            stylers: {
                visibility: 'off'
            }
        },
        {
            featureType: 'manmade',
            elementType: 'all',
            stylers: {
                visibility: 'off'
            }
        },
        {
            featureType: 'local',
            elementType: 'all',
            stylers: {
                visibility: 'off'
            }
        },
        {
            featureType: 'arterial',
            elementType: 'labels',
            stylers: {
                visibility: 'off'
            }
        },
        {
            featureType: 'boundary',
            elementType: 'geometry.fill',
            stylers: {
                color: '#029fd4'
            }
        },
        {
            featureType: 'building',
            elementType: 'all',
            stylers: {
                color: '#1a5787'
            }
        },
        {
            featureType: 'label',
            elementType: 'all',
            stylers: {
                visibility: 'off'
            }
        }
    ]
}


总结

1.Echarts地图扩展插件bmap.min.js,将其引入后可以在echarts.series.map.coordinateSystem 中直接使用参数’bmap’ ,即: `coordinateSystem: ‘bmap’。同时在开发过程中, bmap.min.js和Echarts的版本也有关系,建议从git中下载对应的版本;

2.如果要操作百度地图,如加上百度地图的相关控件,可以通过 v`ar map = myChart.getModel().getComponent(‘bmap’).getBMap()获取地图对象,然后就可以按照百度地图相关操作方法进行配置,具体参见百度地图开放平台API。

相关文章
|
3月前
|
Web App开发 监控 JavaScript
监控和分析 JavaScript 内存使用情况
【10月更文挑战第30天】通过使用上述的浏览器开发者工具、性能分析工具和内存泄漏检测工具,可以有效地监控和分析JavaScript内存使用情况,及时发现和解决内存泄漏、过度内存消耗等问题,从而提高JavaScript应用程序的性能和稳定性。在实际开发中,可以根据具体的需求和场景选择合适的工具和方法来进行内存监控和分析。
|
3月前
|
JavaScript 前端开发 API
Vue.js与Angular的优劣分析
Vue.js和Angular都是非常流行的JavaScript框架,它们在构建现代Web应用程序方面各有优劣
122 64
|
2月前
|
机器学习/深度学习 JavaScript Cloud Native
Node.js作为一种快速、可扩展的服务器端运行时环境
Node.js作为一种快速、可扩展的服务器端运行时环境
62 8
|
3月前
|
JavaScript
如何使用内存快照分析工具来分析Node.js应用的内存问题?
需要注意的是,不同的内存快照分析工具可能具有不同的功能和操作方式,在使用时需要根据具体工具的说明和特点进行灵活运用。
75 3
|
3月前
|
JavaScript 前端开发 安全
JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择
本文深入探讨了JavaScript与TypeScript的对比,分析了两者的特性及在实际项目中的应用选择。JavaScript以其灵活性和广泛的生态支持著称,而TypeScript通过引入静态类型系统,提高了代码的可靠性和可维护性,特别适合大型项目。文章还讨论了结合使用两种语言的优势,以及如何根据项目需求和技术背景做出最佳选择。
100 4
|
2月前
|
前端开发 JavaScript 应用服务中间件
Nginx 支持 JavaScript:前所未有的扩展
Nginx 是全球领先的高性能 Web 服务器,以其高效的反向代理和负载均衡功能著称。近期,Nginx 正式支持 JavaScript(通过 NJS 模块),基于 V8 引擎,允许在配置中嵌入 JS 代码,极大提升了灵活性和扩展性。开发者可以使用 JavaScript 实现动态请求处理、自定义认证、复杂响应处理、中间件编写及流量控制等功能,显著降低开发和维护难度,同时保持高性能。NJS 模块的引入为 Nginx 带来了前所未有的扩展能力,适应快速变化的业务需求。
52 0
|
3月前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
64 2
|
3月前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
120 4
|
3月前
|
Web App开发 JavaScript 前端开发
使用 Chrome 浏览器的内存分析工具来检测 JavaScript 中的内存泄漏
【10月更文挑战第25天】利用 Chrome 浏览器的内存分析工具,可以较为准确地检测 JavaScript 中的内存泄漏问题,并帮助我们找出潜在的泄漏点,以便采取相应的解决措施。
508 9
|
3月前
|
JavaScript 前端开发 开发者
前端框架对比:Vue.js与Angular的优劣分析与选择建议
【10月更文挑战第27天】在前端开发领域,Vue.js和Angular是两个备受瞩目的框架。本文对比了两者的优劣,Vue.js以轻量级和易上手著称,适合快速开发小型到中型项目;Angular则由Google支持,功能全面,适合大型企业级应用。选择时需考虑项目需求、团队熟悉度和长期维护等因素。
98 1

热门文章

最新文章