Vue+Echarts 实现青岛自定义样式地图

news2025/4/22 16:05:57

一、效果

二、代码

<template>
    <div class="chart-box">
        <chart ref="chartQingdao" style="width: 100%; height: 100%;" :options="options" autoresize></chart>
    </div>
</template>
<script>
import Chart from "vue-echarts"
import { qingdao_bg, marker } from '../images/index.js'

export default {
    components: {
        chart: Chart
    },
    data () {
        return {
            timer: null,
            index: -1,
            regionList: [
                {
                    value: '370202',
                    name: '市南区'
                },
                {
                    value: '370203',
                    name: '市北区'
                },
                {
                    value: '370211',
                    name: '黄岛区'
                },
                {
                    value: '370212',
                    name: '崂山区'
                },
                {
                    value: '370213',
                    name: '李沧区'
                },
                {
                    value: '370214',
                    name: '城阳区'
                },
                {
                    value: '370215',
                    name: '即墨区'
                },
                {
                    value: '370281',
                    name: '胶州市'
                },
                {
                    value: '370283',
                    name: '平度市'
                },
                {
                    value: '370285',
                    name: '莱西市'
                }
            ],
            options: {}
        }
    },
    computed: {
        mapJson() {
            return require(`./370200.json`);
        },
        maxIndex () {
            return this.regionList.length-1;
        }
    },
    watch: {
        index (val) {
            if(val>-1) {
                this.$refs.chartQingdao.dispatchAction({
                    type: 'showTip',
                    seriesIndex: 0,
                    dataIndex: this.index
                });
            }
        }
    },
    methods: {
        async draw () {
            let image = document.createElement('img'), symbol = document.createElement('img');
            image.src = qingdao_bg; //主体地图星空一样的背景(若背景未覆盖主体地图全部,一、调整背景图片大小;二、调整主体地图的aspectScale、layoutSize值)
            symbol.src = marker; //每个地图区域的icon
            Chart.registerMap('qingdao', this.mapJson);
            this.options = {
                tooltip: { //鼠标移至地图区域,区域详情的展示设置
                    axisPointer: {
                        type: 'none'
                    },
                    padding: 0,
                    position: (point) => {
                        return [point[0], point[1]];
                    },
                    backgroundColor: 'rgba(50, 50, 50, 0)',
                    className: 'custom-tooltip-box',
                    formatter: (params) => {
                        return '<div class="custom-tooltip-box">'
                                    + params.name
                                +'</div>';
                    }
                },
                geo: [
                    { //最上层我们看到的地图主体
                        map: "qingdao",
                        aspectScale: 0.75, 
                        layoutSize: '80%',
                        layoutCenter: ['52%', '50%'],
                        zoom: 1,
                        roam: false
                    },
                    { //主体地图的粗边框(实际我觉得并没有效果)
                        map: "qingdao",
                        aspectScale: 0.75, 
                        layoutSize: '80%',
                        layoutCenter: ['52%', '50%'],
                        zoom: 1,
                        roam: false,
                        silent: true,
                        itemStyle: {
                            borderColor: '#63E9F2',
                            borderWidth: 5
                        }
                    },
                    { //主体地图后的地图影子
                        map: "qingdao",
                        aspectScale: 0.75, 
                        layoutSize: '84%',
                        layoutCenter: ['52%', '51%'],
                        zoom: 1,
                        roam: false,
                        silent: true,
                        itemStyle: {
                            areaColor: '#012D57',
                            borderColor: '#areaColor',
                            borderWidth: 1
                        },
                        emphasis: {
                            itemStyle: {
                                areaColor: '#012D57',
                                borderColor: '#areaColor',
                                borderWidth: 1
                            }
                        }
                    }
                ],
                series: [
                    {
                        type: 'map',
                        mapType: 'qingdao',
                        aspectScale: 0.75,
                        layoutSize: '80%',
                        layoutCenter: ['52%', '50%'],
                        zoom: 1,
                        roam: false, 
                        label: {
                            normal: {
                                show: true,
                                formatter: (params) => {
                                    return `{marker| }\n\n{name| ${params.name}}`;
                                },
                                rich: {
                                    marker: {
                                        width: 24,
                                        height: 30,
                                        backgroundColor: {
                                            image: symbol
                                        }
                                    },
                                    name: {
                                        fontFamily: 'PingFangSC',
                                        fontSize: 18,
                                        fontWeight: 600,
                                        color: '#C6DFFF'
                                    }
                                }
                            },
                            emphasis: {
                                color: 'rgba(0, 0, 0, 0)'
                            }
                        },
                        itemStyle: {
                            areaColor: {
                                image: image,
                                repeat: 'no-repeat'
                            },
                            borderColor: '#63E9F2',
                            borderWidth: 1,
                            shadowBlur: 29,
                            shadowColor: 'rgba(73, 150, 255, 0.5)'
                        },
                        emphasis: {
                            itemStyle: {
                                areaColor: {
                                    image: image,
                                    repeat: 'no-repeat'
                                }
                            }
                        },
                        data: this.regionList
                    }
                ]
            };
            this.$nextTick(() => {
                this.switchRegion();
                this.setTimer();
                this.$refs.chartQingdao.chart.on('mouseover', (params) => {
                    this.$emit('switch-region', {
                        active: String(params.value),
                        header: `${params.name}参保征缴情况`
                    });
                    this.clearTimer();
                });
                this.$refs.chartQingdao.chart.on('mouseout', () => {
                    this.setTimer();
                });
            });
        },
        switchRegion () {
            this.index===this.maxIndex?this.index=0:this.index++;
            this.$emit('switch-region', {
                active: this.regionList[this.index].value,
                header: `${this.regionList[this.index].name}参保征缴情况`
            });
        },
        setTimer () { //轮播地图区域,展示区域详情的定时器
            let _this = this;
            this.timer = setInterval(() => {
                _this.switchRegion();
            }, 5000);
        },
        clearTimer () {
            clearInterval(this.timer);
            this.timer = null;
        }
    },
    mounted () {
        this.draw();
    },
    destroyed() {
        this.clearTimer();
    }
}
</script>
<style scoped lang="less">
.chart-box{
    width: 100%;
    height: 630px;
}
/deep/ .custom-tooltip-box {
    width: 316px;
    height: 123px;
    padding-left: 110px;
    background-image: url('../images/tooltip_bg.png');
    font-family: 'PingFangSC';
    font-size: 20px;
    font-weight: 600;
    line-height: 148px;
    text-align: center;
    color: #B5F1FF;
}
</style>

三、代码引用资源下载地址

https://download.csdn.net/download/hrcsdn13/90325739

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291545.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FIR滤波器:窗函数法

一、FIR滤波器基础 FIR&#xff08;有限脉冲响应&#xff09;滤波器的三大特点&#xff1a; 绝对稳定&#xff1a;没有反馈回路&#xff0c;不会出现失控振荡 线性相位&#xff1a;信号通过后波形不失真 直观设计&#xff1a;通过窗函数法、频率采样法等方法实现 二、窗函…

【AI】探索自然语言处理(NLP):从基础到前沿技术及代码实践

Hi &#xff01; 云边有个稻草人-CSDN博客 必须有为成功付出代价的决心&#xff0c;然后想办法付出这个代价。 目录 引言 1. 什么是自然语言处理&#xff08;NLP&#xff09;&#xff1f; 2. NLP的基础技术 2.1 词袋模型&#xff08;Bag-of-Words&#xff0c;BoW&#xff…

力扣动态规划-18【算法学习day.112】

前言 ###我做这类文章一个重要的目的还是记录自己的学习过程&#xff0c;我的解析也不会做的非常详细&#xff0c;只会提供思路和一些关键点&#xff0c;力扣上的大佬们的题解质量是非常非常高滴&#xff01;&#xff01;&#xff01; 习题 1.下降路径最小和 题目链接:931. …

DBASE DBF数据库文件解析

基于Java实现DBase DBF文件的解析和显示 JDK19编译运行&#xff0c;实现了数据库字段和数据解析显示。 首先解析数据库文件头代码 byte bytes[] Files.readAllBytes(Paths.get(file));BinaryBufferArray bis new BinaryBufferArray(bytes);DBF dbf new DBF();dbf.VersionN…

【ESP32】ESP-IDF开发 | WiFi开发 | UDP用户数据报协议 + UDP客户端和服务器例程

1. 简介 UDP协议&#xff08;User Datagram Protocol&#xff09;&#xff0c;全称用户数据报协议&#xff0c;它是一种面向非连接的协议&#xff0c;面向非连接指的是在正式通信前不必与对方先建立连接&#xff0c; 不管对方状态就直接发送。至于对方是否可以接收到这些数据内…

tiktok 国际版抖抖♬♬ X-Bogus参数算法逆向分析

加密请求参数得到乱码&#xff0c;最终得到X-Bogus

C++ Primer 命名空间的using声明

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

c语言(关键字)

前言&#xff1a; 感谢b站鹏哥c语言 内容&#xff1a; 栈区&#xff08;存放局部变量&#xff09; 堆区 静态区&#xff08;存放静态变量&#xff09; rigister关键字 寄存器&#xff0c;cpu优先从寄存器里边读取数据 #include <stdio.h>//typedef&#xff0c;类型…

ARM内核:嵌入式时代的核心引擎

引言 在当今智能设备无处不在的时代&#xff0c;ARM&#xff08;Advanced RISC Machines&#xff09;处理器凭借其高性能、低功耗的特性&#xff0c;成为智能手机、物联网设备、汽车电子等领域的核心引擎。作为精简指令集&#xff08;RISC&#xff09;的典范&#xff0c;ARM核…

Airflow:选择合适执行器扩展任务执行

Apache Airflow是面向开发人员使用的&#xff0c;以编程方式编写、调度和监控的数据流程平台。可伸缩性是其关键特性之一&#xff0c;Airflow支持使用不同的执行器来执行任务。在本文中&#xff0c;我们将深入探讨如何利用这些执行器在Airflow中有效地扩展任务执行。 理解Airfl…

CoRAG 来自微软与人大的创新RAG框架技术

微软与人大合作开发的CoRAG(Chain-of-Retrieval Augmented Generation)是一种创新的检索增强生成(RAG)框架,旨在通过模拟人类思考方式来提升大语言模型(LLM)在复杂问题上的推理和回答能力。以下是对CoRAG的深度介绍: 1. CoRAG的核心理念 CoRAG的核心思想是通过动态调…

Qt Creator 中使用 vcpkg

Qt Creator 中使用 vcpkg Qt Creator 是一个跨平台的轻量级 IDE&#xff0c;做 Qt 程序开发的同学们肯定对这个 IDE 都比较属于。这个 IDE 虽然没有 Visual Stdio 功能那么强&#xff0c;但是由于和 Qt 集成的比较深&#xff0c;用来开发 Qt 程序还是很顺手的。 早期&#xf…

mysql中in和exists的区别?

大家好&#xff0c;我是锋哥。今天分享关于【mysql中in和exists的区别&#xff1f;】面试题。希望对大家有帮助&#xff1b; mysql中in和exists的区别&#xff1f; 在 MySQL 中&#xff0c;IN 和 EXISTS 都是用于子查询的操作符&#xff0c;但它们在执行原理和适用场景上有所不…

智慧园区管理系统推动企业智能运维与资源优化的全新路径分析

内容概要 在当今快速发展的商业环境中&#xff0c;园区管理的数字化转型显得尤为重要。在这个背景下&#xff0c;快鲸智慧园区管理系统应运而生&#xff0c;成为企业实现高效管理的最佳选择。它通过整合互联网、物联网等先进技术&#xff0c;以智能化的方式解决了传统管理模式…

物联网 STM32【源代码形式-使用以太网】连接OneNet IOT从云产品开发到底层MQTT实现,APP控制 【保姆级零基础搭建】

物联网&#xff08;IoT&#xff09;‌是指通过各种信息传感器、射频识别技术、全球定位系统、红外感应器等装置与技术&#xff0c;实时采集并连接任何需要监控、连接、互动的物体或过程&#xff0c;实现对物品和过程的智能化感知、识别和管理。物联网的核心功能包括数据采集与监…

谭浩强C语言程序设计(4) 8章(下)

1、输入三个字符串按照字母顺序从小到大输出 #include <cstdio> // 包含cstdio头文件&#xff0c;用于输入输出函数 #include <cstring> // 包含cstring头文件&#xff0c;用于字符串处理函数#define N 20 // 定义字符串的最大长度为20// 函数&#xff1a;…

使用朴素贝叶斯对散点数据进行分类

本文将通过一个具体的例子&#xff0c;展示如何使用 Python 和 scikit-learn 库中的 GaussianNB 模型&#xff0c;对二维散点数据进行分类&#xff0c;并可视化分类结果。 1. 数据准备 假设我们有两个类别的二维散点数据&#xff0c;每个类别包含若干个点。我们将这些点分别存…

【Pytorch和Keras】使用transformer库进行图像分类

目录 一、环境准备二、基于Pytorch的预训练模型1、准备数据集2、加载预训练模型3、 使用pytorch进行模型构建 三、基于keras的预训练模型四、模型测试五、参考 现在大多数的模型都会上传到huggface平台进行统一的管理&#xff0c;transformer库能关联到huggface中对应的模型&am…

Python 深拷贝与浅拷贝:数据复制的奥秘及回溯算法中的应用

引言 在 Python 编程领域&#xff0c;数据复制是极为常见的操作。而深拷贝和浅拷贝这两个概念&#xff0c;如同紧密关联却又各具特色的双子星&#xff0c;在数据处理过程中扮演着重要角色。深入理解它们&#xff0c;不仅有助于编写出高效、准确的代码&#xff0c;还能避免许多…

简单易懂的倒排索引详解

文章目录 简单易懂的倒排索引详解一、引言 简单易懂的倒排索引详解二、倒排索引的基本结构三、倒排索引的构建过程四、使用示例1、Mapper函数2、Reducer函数 五、总结 简单易懂的倒排索引详解 一、引言 倒排索引是一种广泛应用于搜索引擎和大数据处理中的数据结构&#xff0c;…