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

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


数据格式转化

    //数据格式转化
    var convertData = function (data) {
        var res = [];
        for (var i = 0; i < data.length; i++) {
            var dataItem = data[i];
            var fromCoord = geoCoordMap[dataItem[0].name];
            var toCoord = geoCoordMap[dataItem[1].name];
            if (fromCoord && toCoord) {
                res.push([{
                    coord: fromCoord
                }, {
                    coord: toCoord
                }]);
            }
        }
        return res;
    };


构建地图数据序列组件series

//图表数据
    var series = [];
    /*飞线图属性设置*/
    var color = ['#3ed4ff', '#FF8888', '#a6c84c'];
    [['襄阳公安处', dictDatas1]].forEach(function (item, i) {
        series.push({
            type: 'map',
            name: '区域统计',
            map: '湖北省',
            roam: false,//禁止缩放
            zoom: 1.25,//默认显示比例
            itemStyle: {
                areaColor: '#1e2b57',
                borderColor: '#195BB9',
                borderWidth: 1
            },
            emphasis: {
                areaColor: '#2B91B7'
            }
        }, {
            name: '襄阳公安处',
            type: 'lines',
            zlevel: 1,
            effect: {
                show: true,
                color: color[i],
                period: 4, //箭头指向速度,值越小速度越快
                trailLength: 0.02, //特效尾迹长度[0,1]值越大,尾迹越长重
                symbol: 'arrow', //箭头图标
                symbolSize: 5, //图标大小
            },
            lineStyle: {
                color: color[i],
                width: 1, //尾迹线条宽度
                opacity: 0, //尾迹线条透明度
                curveness: 0.3, //尾迹线条曲直度
            },
            data: convertData(item[1])
        }, {//引导线
            type: 'lines',
            z: 3,
            coordinateSystem: 'geo',
            symbol: 'image://data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7',
            symbolSize: [10, 0],//只保留地图端标记
            opacity: 1,
            label: {
                show: true,
                position: 'end',
                formatter: function (params) {//文本提示框
                    return params.name;
                },
                color: "#000",
                fontSize: 14,
                padding: 5,
                backgroundColor: '#eee',
                borderColor: '#FF0033',
                borderWidth: 1,
                borderRadius: 5,
            },
            lineStyle: { //视觉引导线属性
                type: 'solid',
                opacity: 1,
                color: '#EEE', //引导线颜色
                curveness: 0.1
            },
            data: COORDS_LINE
        }, {//散点图
            name: '',
            type: 'effectScatter',
            coordinateSystem: 'geo',
            zlevel: 2,
            rippleEffect: {
                brushType: 'stroke'
            },
            label: {
                show: true,
                color: '#FFF',//字体颜色
                position: 'right',
                fontSize: 8,
                formatter: function (params) {
                    //console.log(params.name);
                    if (params.name == "刑警一大队" || params.name == "襄阳东所" || params.name == "襄阳北所" || params.name == "襄阳所" || params.name == "襄州所") {
                        return "";
                    } else {
                        return params.name;
                    }
                }
            },
            symbolSize: 10,
            itemStyle: {
                color: '#c53534',//散点颜色
            },
            data: pois
        }, {//发射中心散点图
            name: '',
            type: 'effectScatter',
            coordinateSystem: 'geo',
            zlevel: 2,
            rippleEffect: {
                brushType: 'stroke'
            },
            label: {
                show: true,
                color: '#FFF',//字体颜色
                position: 'right',
                fontSize: 8,
                formatter: function (params) {
                    //console.log(params.name);
                    if (params.name == "刑警一大队" || params.name == "襄阳东所" || params.name == "襄阳北所" || params.name == "襄阳所" || params.name == "襄州所") {
                        return "";
                    } else {
                        return params.name;
                    }
                }
            },
            symbolSize: 10,
            itemStyle: {
                color: '#3ed4ff',//散点颜色
            },
            data: poisCenter
        });
    });


配置选项参数

 //地图初始化
    var myChart = echarts.init(document.getElementById('map'));
    var option = {
        backgroundColor: '#1e2b57',//背景颜色
        title: {
            text: '湖北省地图',//主标题
            subtext: '迁徙图 2021-12-28',//副标题
            x: 'center',
            y: '5%',
            textStyle: {
                color: '#fff'
            }
        },
        tooltip: {
            show: true,
            formatter: "{b}"
        },
        geo: {
            map: '湖北省',//注册地图
            roam: false,//禁止缩放
            zoom: 1.25,//默认显示比例
            zlevel: -10,
            itemStyle: {opacity: 0}
        },
        series: series
    };
    //防止重复触发点击事件
    if (myChart._$handlers.click) {
        myChart._$handlers.click.length = 0;
    }
    //地图点击事件:弹出窗;
    myChart.on('click', function (params) {
        console.log(params);
        if (params.componentIndex == 3) {
            window.open(params.data.links);
        }
    });
    //自适应;
    myChart.setOption(option);
    window.addEventListener("resize", function () {
        myChart.resize();
    });


案例分析

  1. 1.重叠label的解决方案: 先对重叠的label进行隐藏,然后单独做引导线效果。
            label: {
                show: true,
                color: '#FFF',//字体颜色
                position: 'right',
                fontSize: 8,
                formatter: function (params) {
                    //console.log(params.name);
                    if (params.name == "刑警一大队" || params.name == "襄阳东所" || params.name == "襄阳北所" || params.name == "襄阳所" || params.name == "襄州所") {
                        return "";
                    } else {
                        return params.name;
                    }
                }
            },
  1. 2.引导线
{
            type: 'lines',
            z: 3,
            coordinateSystem: 'geo',
            symbol: 'image://data:image/gif;base64,R0lGODlhEAAQAMQAAORHHOVSKudfOulrSOp3WOyDZu6QdvCchPGolfO0o/XBs/fNwfjZ0frl3/zy7wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAkAABAALAAAAAAQABAAAAVVICSOZGlCQAosJ6mu7fiyZeKqNKToQGDsM8hBADgUXoGAiqhSvp5QAnQKGIgUhwFUYLCVDFCrKUE1lBavAViFIDlTImbKC5Gm2hB0SlBCBMQiB0UjIQA7',
            symbolSize: [10, 0],//只保留地图端标记
            opacity: 1,
            label: {
                show: true,
                position: 'end',
                formatter: function (params) {//文本提示框
                    return params.name;
                },
                color: "#000",
                fontSize: 14,
                padding: 5,
                backgroundColor: '#eee',
                borderColor: '#FF0033',
                borderWidth: 1,
                borderRadius: 5,
            },
            lineStyle: { //视觉引导线属性
                type: 'solid',
                opacity: 1,
                color: '#EEE', //引导线颜色
                curveness: 0.1
            },
            data: COORDS_LINE
        }
  1. 3.发射中心散点图:发射中心单独颜色的散点图,或在itemStyle按照名称判断显示;
 {
            name: '',
            type: 'effectScatter',
            coordinateSystem: 'geo',
            zlevel: 2,
            rippleEffect: {
                brushType: 'stroke'
            },
            label: {
                show: true,
                color: '#FFF',//字体颜色
                position: 'right',
                fontSize: 8,
                formatter: function (params) {
                    //console.log(params.name);
                    if (params.name == "刑警一大队" || params.name == "襄阳东所" || params.name == "襄阳北所" || params.name == "襄阳所" || params.name == "襄州所") {
                        return "";
                    } else {
                        return params.name;
                    }
                }
            },
            symbolSize: 10,
            itemStyle: {
                color: '#3ed4ff',//散点颜色
            },
            data: poisCenter
        });


@lockdata.cn

相关文章
|
2天前
|
数据可视化 数据挖掘
ECharts综合案例一:近七天跑步数据
使用ECharts进行一周跑步数据分析,通过雷达图展示多维度指标(如距离、速度、时间),颜色对比体现个人与平均表现。折线图则清晰显示每日里程趋势,代码示例展示了自定义的`radar`和`line`图表配置。图表交互性强,支持点击高亮,动画流畅,提供完整代码资源。#ECharts #跑步数据 #数据可视化
40 3
ECharts综合案例一:近七天跑步数据
|
3天前
|
数据可视化 数据挖掘
ECharts综合案例一:近七天跑步数据
使用ECharts展示近七天跑步数据,结合雷达图和折线图揭示运动表现。雷达图多维度呈现全程距离、速度和时间,对比平均指标;折线图清晰展示里程趋势。图表具有交互性和动画效果,通过[代码地址](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454698)可获取详情。#ECharts #跑步数据 #数据可视化 #雷达图 #折线图
23 3
ECharts综合案例一:近七天跑步数据
|
3天前
|
JavaScript 前端开发 数据可视化
ECharts 雷达图案例001-自定义节点动画
使用ECharts创建自定义雷达图,通过JavaScript动态更新高亮和交互反馈,增强用户体验。关键步骤包括:开启动画效果,数据更新时保持图表状态,鼠标悬浮时动态高亮指标,优化动画性能。案例展示了ECharts在数据可视化中的灵活性和表现力。[查看完整案例](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454380)。
22 0
 ECharts 雷达图案例001-自定义节点动画
|
3天前
|
数据可视化 黑灰产治理
📊 ECharts 雷达图案例002 - 诈骗性质分析
**ECharts 案例展示了诈骗性质的雷达图分析,以创新可视化揭示诈骗模式。定制化雷达图配色鲜明,多维度剖析不同诈骗手段,如网络刷单、冒充公检法。交互式设计允许用户深入探究细节。[点击这里](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454384)查看完整案例。#ECharts #数据可视化 #雷达图 #诈骗分析**
12 0
📊 ECharts 雷达图案例002 - 诈骗性质分析
|
4天前
|
数据可视化 前端开发 搜索推荐
ECharts 词云案例三:2024年阅读关键词
探索ECharts词云图进阶,使用蒙版创造个性化2024年阅读关键词云。预览图展示渐变色背景与随机色词汇。蒙版概念引入,通过HTML结构和JavaScript配置实现词云与图像蒙版结合。代码及依赖下载链接提供,展示五种创意蒙版效果,激发数据可视化的创新思维。
8 0
ECharts 词云案例三:2024年阅读关键词
|
1月前
|
前端开发 JavaScript BI
Django教程第5章 | Web开发实战-数据统计图表(echarts、highchart)
使用echarts和highcharts图表库实现折线图、柱状图、饼图和数据集图
93 2
|
1月前
|
数据可视化
echarts图表坐标轴数据标签添加下划线
echarts图表坐标轴数据标签添加下划线
100 0
|
1月前
|
容器
echarts图表怎样实现刷新功能?
echarts图表怎样实现刷新功能?
|
1月前
|
数据可视化 JavaScript 前端开发
Echarts是一个开源的JavaScript可视化库,用于创建各种类型的图表
Echarts是JavaScript的开源可视化库,Python通过Pyecharts库可调用它来绘制图表。示例展示了如何用Pyecharts创建柱状图:定义图表对象,设置标题和坐标轴,添加X轴、Y轴数据,最后渲染展示。Pyecharts还支持折线图、散点图、饼图等多种图表类型,更多详情可查阅官方文档。
53 0
|
1月前
|
前端开发 JavaScript 定位技术
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
Docusaurus框架——react+antd+echarts自定义mdx生成图表代码解释文档
45 0