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

目录
打赏
0
0
0
0
184
分享
相关文章
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
468 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
10月前
echarts中使用散点scatter更改颜色却不生效的问题
本文讨论了在ECharts中使用散点图(scatter)时更改颜色不生效的问题。原因是项目中使用了`visualMap`组件,它具有最高的优先级,导致自定义的颜色设置被覆盖。解决方法是在`visualMap`组件中增加`seriesIndex`属性,指定它只对特定的系列(series)生效,从而避免影响散点图的颜色设置。文章提供了详细的代码示例和解决办法。
234 3
ECharts 词云案例四—电影《千与千寻》部分短评
**使用ECharts和电影《千与千寻》短评创建的词云案例展示了数据可视化的力量。通过Python处理评论,提取关键词并计算频率,利用jieba和WordCloud生成词云,ECharts进一步增强了视觉效果。词云突出了角色如“千寻”、“无脸男”及关键词“勇气”、“成长”,揭示了观众的情感共鸣。示例代码和资源可在链接中获取。**
152 0
 ECharts 词云案例四—电影《千与千寻》部分短评
ECharts综合案例一:近七天跑步数据
使用ECharts进行一周跑步数据分析,通过雷达图展示多维度指标(如距离、速度、时间),颜色对比体现个人与平均表现。折线图则清晰显示每日里程趋势,代码示例展示了自定义的`radar`和`line`图表配置。图表交互性强,支持点击高亮,动画流畅,提供完整代码资源。#ECharts #跑步数据 #数据可视化
320 3
ECharts综合案例一:近七天跑步数据
|
9月前
|
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
1893 0
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
473 1
Echart的使用初体验,Echarts的基本使用及语法格式,简单图表绘制和使用及图例添加【学习笔记】
本文介绍了ECharts的基本使用和语法格式,包括如何引入ECharts、创建容器、初始化echarts实例对象、配置option参数和一些基础图表的绘制方法。文章还提供了简单图表绘制和使用图例添加的示例代码,以及对ECharts特性和优势的概述。
Echart的使用初体验,Echarts的基本使用及语法格式,简单图表绘制和使用及图例添加【学习笔记】
微信小程序使用echarts图表(ec-canvas)
这篇文章介绍了在微信小程序中使用`ec-canvas`集成echarts图表的方法,包括解决加载时报错的问题、配置图表组件、以及在小程序页面中引入和使用这些图表组件的步骤。
1149 1
微信小程序使用echarts图表(ec-canvas)
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
这篇文章介绍了如何在Vue页面中结合SpringBoot、MyBatis、ElementUI和ECharts,实现从数据库获取数据并展示为图表的过程,包括前端和后端的代码实现以及遇到的问题和解决方法。
在vue页面引入echarts,图表的数据来自数据库 springboot+mybatis+vue+elementui+echarts实现图表的制作
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问