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

相关文章
|
3月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
153 1
|
1月前
|
XML 前端开发 数据格式
echarts柱图前后端代码SpringCloud+Vue3
echarts柱图前后端代码SpringCloud+Vue3
52 1
|
2月前
echarts中使用散点scatter更改颜色却不生效的问题
本文讨论了在ECharts中使用散点图(scatter)时更改颜色不生效的问题。原因是项目中使用了`visualMap`组件,它具有最高的优先级,导致自定义的颜色设置被覆盖。解决方法是在`visualMap`组件中增加`seriesIndex`属性,指定它只对特定的系列(series)生效,从而避免影响散点图的颜色设置。文章提供了详细的代码示例和解决办法。
62 2
|
3月前
|
前端开发 数据可视化 JavaScript
【揭秘神器】如何用Pyecharts轻松召唤出Echarts?只需几行Python代码,让你的数据瞬间生动起来!
【8月更文挑战第21天】Pyecharts是一款基于Python的图表生成库,利用Echarts强大的JavaScript可视化能力,让开发者无需编写前端代码即可在Python环境中创建美观图表。本文通过实例演示如何安装Pyecharts并生成一个展示城市气温分布的柱状图,包括基本图表生成及自定义样式设置,如颜色调整、图例显示等,最终将图表嵌入HTML文件展示,适合各水平开发者快速掌握数据可视化技能。
50 0
|
5月前
|
数据可视化 数据挖掘
ECharts综合案例一:近七天跑步数据
使用ECharts进行一周跑步数据分析,通过雷达图展示多维度指标(如距离、速度、时间),颜色对比体现个人与平均表现。折线图则清晰显示每日里程趋势,代码示例展示了自定义的`radar`和`line`图表配置。图表交互性强,支持点击高亮,动画流畅,提供完整代码资源。#ECharts #跑步数据 #数据可视化
148 3
ECharts综合案例一:近七天跑步数据
|
5月前
|
数据可视化 数据挖掘
ECharts综合案例一:近七天跑步数据
使用ECharts展示近七天跑步数据,结合雷达图和折线图揭示运动表现。雷达图多维度呈现全程距离、速度和时间,对比平均指标;折线图清晰展示里程趋势。图表具有交互性和动画效果,通过[代码地址](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454698)可获取详情。#ECharts #跑步数据 #数据可视化 #雷达图 #折线图
83 3
ECharts综合案例一:近七天跑步数据
|
5月前
|
数据采集 自然语言处理 数据可视化
ECharts 词云案例四—电影《千与千寻》部分短评
**使用ECharts和电影《千与千寻》短评创建的词云案例展示了数据可视化的力量。通过Python处理评论,提取关键词并计算频率,利用jieba和WordCloud生成词云,ECharts进一步增强了视觉效果。词云突出了角色如“千寻”、“无脸男”及关键词“勇气”、“成长”,揭示了观众的情感共鸣。示例代码和资源可在链接中获取。**
50 0
 ECharts 词云案例四—电影《千与千寻》部分短评
|
5月前
|
JavaScript 前端开发 数据可视化
ECharts 雷达图案例001-自定义节点动画
使用ECharts创建自定义雷达图,通过JavaScript动态更新高亮和交互反馈,增强用户体验。关键步骤包括:开启动画效果,数据更新时保持图表状态,鼠标悬浮时动态高亮指标,优化动画性能。案例展示了ECharts在数据可视化中的灵活性和表现力。[查看完整案例](https://download.csdn.net/download/No_Name_Cao_Ni_Mei/89454380)。
209 0
 ECharts 雷达图案例001-自定义节点动画
|
1月前
|
小程序 前端开发 JavaScript
微信小程序图表制作利器:ECharts组件的使用与技巧
微信小程序图表制作利器:ECharts组件的使用与技巧
55 1
|
1月前
|
JavaScript
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
vue中使用echarts绘制双Y轴图表时,刻度没有对齐的两种解决方法
219 0