vue3 echarts散点图省份地图标注-四川省地图城市动态标注散点图

echarts集成省份地图(散点图)通过echarts geoJson方式,以四川省地图标注城市散点为例

先看效果

2023-07-19 15.16.30.gif

cd-jietu1.png

概述

使用echarts vue3+ts封装地图组件,根据城市地理绘制绘制散点图
echarts绘制地图需要使用geoJson数据DataV.GeoAtlas地理小工具系列
具体截图如下:

ditu-02.png

vue3代码实现如下

代码例子使用vue3 + ts + setup语法

  1. 安装echarts依赖包;
    npm install echarts --save
  2. 引入echarts并获取四川省geoJson数据
import * as echarts from 'echarts'; //引入echarts
import sichuanJson from "./sichuan.json"; //引入四川省geoJson数据(也可通过服务器接口获取)
echarts.registerMap('sichuan', sichuanJson as any); //注册绘制四川省地图
  1. 实例化echarts对象
const chartRef = ref<echarts.ECharts>() //定义ref
onMounted(() => {
    chartRef.value = echarts.init(document.getElementById(props.id) as HTMLElement);//实力化对象
    chartRef.value?.setOption(option);
})
  1. 配置option
let option = {
    width: '833px',
    height: '523px',
    tooltip: {
        tooltip: {
            trigger: 'item',
            showDelay: 0,
            hideDelay: 0,
            enterable: true, //鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true
            transitionDuration: 0, //提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动
            extraCssText: "z-index:100;", //修改标签大小样式等
        },
    }, 
    geo:
    {
        map: 'sichuan',
        type: 'map',
        roam: false,
        label: {
            show: true,
            textStyle: {
                color: '#fff',
                fontSize: 12,
            }
        },
        tooltip: { //设置鼠标移至城市板块选中视图配置选项
            backgroundColor: ' rgba(3,21,42,0.80)', //设置地图高亮时城市视图背景色框
            borderRadius: 0,
            trigger: 'item',
            formatter: (params: any) => {
                return `<div class="map-charts-bar">
                              <span class="text">${params.name}</span>
                        </div>`
            }
        },
        itemStyle: { //设置地图板块配置选项
            areaColor: '#083D7E',
            normal: {
                // 图形的描边颜色
                borderColor: '#55aaff',
                // 描边线宽。
                borderWidth: 1,
                // 柱条的描边类型。
                borderType: 'solid',
                areaColor: '#083D7E',
                label: {
                    // 显示省份下面市、州的名称
                    show: true,
                    textStyle: {
                        color: '#fff',
                        fontSize: 12,
                        fontWeight: 400
                    }
                }
            },
            // 鼠标放上去后,样式改变
            emphasis: {
                // 图形的描边颜色
                borderColor: '#1DF9FC',
                borderWidth: '2',
                // 阴影色
                areaColor: '#3099E2',
                label: {
                    show: true,
                    textStyle: {
                        color: '#fff',
                        fontSize: 10,
                    },
                }
            },
        },
    },
    series:series
} as echarts.EChartsOption;
  1. 配置series
    这里的series项根据散点需要多少个颜色标注样式配置数据源,我的例子中使用了三个散点标注颜色所以写了三个配置对象
const series = [
        {
            tooltip: {
                backgroundColor: '',//这里设置鼠标移至城市板块后提示视图透明 
                borderWidth: 0,
                tooltip: {
                    trigger: 'item',
                    showDelay: 0,
                    hideDelay: 0,
                    enterable: true, //鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true
                    transitionDuration: 0, //提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动
                    extraCssText: "z-index:999;", //修改标签大小样式等

                },
                formatter: (params: { data: CityInfo }) => {
                    return mapFormatter(params)
                }
            },
            type: "effectScatter", //effectScatter 特效散点图
            coordinateSystem: "geo",
            rippleEffect: {
                period: 4, //动画时间,值越小速度越快
                brushType: "stroke", //波纹绘制方式 stroke, fill
                scale: 4, //波纹圆环最大限制,值越大波纹越大 4
            },
            itemStyle: {
                color: '#1DF9FC'
            },
            data: []
        },
        {
            tooltip: {
                backgroundColor: '',
                borderWidth: 0,
                tooltip: {
                    trigger: 'item',
                    showDelay: 0,
                    hideDelay: 0,
                    enterable: true, //鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true
                    transitionDuration: 0, //提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动
                    extraCssText: "z-index:999;", //修改标签大小样式等

                },
                formatter: (params: { data: CityInfo }) => { 
                    return mapFormatter(params)
                }
            },
            type: "effectScatter", //effectScatter 特效散点图
            coordinateSystem: "geo",
            rippleEffect: {
                period: 4, //动画时间,值越小速度越快
                brushType: "stroke", //波纹绘制方式 stroke, fill
                scale: 4, //波纹圆环最大限制,值越大波纹越大 4
            },
            itemStyle: {
                color: '#F8D44F'
            },
            data: []
        },
        {
            tooltip: {
                backgroundColor: '',
                borderWidth: 0,
                tooltip: {
                    trigger: 'item',
                    showDelay: 0,
                    hideDelay: 0,
                    enterable: true, //鼠标是否可进入提示框浮层中,默认为false,如需详情内交互,如添加链接,按钮,可设置为 true
                    transitionDuration: 0, //提示框浮层的移动动画过渡时间,单位是 s,设置为 0 的时候会紧跟着鼠标移动
                    extraCssText: "z-index:999;", //将散点等级提高也可修改样式等

                },
                formatter: (params: { data: CityInfo }) => {
                    return mapFormatter(params)
                }
            },
            type: "effectScatter", //effectScatter 特效散点图
            coordinateSystem: "geo",
            rippleEffect: {
                period: 4, //动画时间,值越小速度越快
                brushType: "stroke", //波纹绘制方式 stroke, fill
                scale: 4, //波纹圆环最大限制,值越大波纹越大 4
            },
            itemStyle: {
                color: '#FF4138'
            },
            data: []
        }
    ]
  1. 通过props传入城市散点标注信息绘制对应ui
const props = defineProps<{
    id: string, //组件地图id
    list: CityInfo[][] //城市散点图列表数据
}>()

watch(() => props.list, () => {
    (option.series as echarts.SeriesOption[])[0].data = props.list[1];
    (option.series as echarts.SeriesOption[])[1].data = props.list[2];
    (option.series as echarts.SeriesOption[])[2].data = props.list[3];
    chartRef.value?.setOption(option);
})

//最后需要的地方组件中引入并传入城市散点数据源使用
 <ExamMap id="sichuan" :list="cityList"></ExamMap>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,451评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,172评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,782评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,709评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,733评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,578评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,320评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,241评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,686评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,878评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,992评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,715评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,336评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,912评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,040评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,173评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,947评论 2 355

推荐阅读更多精彩内容