vue中使用echarts实现省市地图绘制,根据数据显示省市天气图标及温度信息

news2024/11/24 9:54:28

在这里插入图片描述

一、实现效果
  • 使用echarts实现省市地图绘制
  • 根据数据显示省下市的天气图标
  • 根据数据显示省下市的温度信息
二、实现方法
1、安装echarts插件
npm install echarts --save
2、获取省市json数据

https://datav.aliyun.com/portal/school/atlas/area_selector

通过 阿里旗下的高德地图提供的api ,可以获取到中国各个省份/区级/县级的json数据,但是区级和县级,并没有包含街道和乡镇的数据。

3、本例中data 数据

本文以吉林省地图为例,来实现吉林省下所有市的天气显示效果。
你也可以显示中国地图或其他省份地图。原理是一样的哦。

  • 定义一个容器map
<template>
    <div class="map" id="map"></div>
</template>
  • 导入插件及吉林省数据
import * as echarts from "echarts";
import jilin from "./json/jilin.json";
  • 准备天气图标图片,吉林省下所有市的天气数据

天气的图标你可以自行准备,本例仅做演示,只准备了9个图标,你可以准备更多更全的天气哦。

export default {
  data() {
      return {
          //天气图标图片
          weatherMap: {
                "qing": require('@/assets/tq__1.jpg'),
                "qingZhuanDuoyun": require('@/assets/tq__2.jpg'),
                "zhongyu": require('@/assets/tq__3.jpg'),
                "qingZhuanZhongyu": require('@/assets/tq__4.jpg'),
                "zhongxue": require('@/assets/tq__5.jpg'),
                "leidian": require('@/assets/tq__6.jpg'),
                "yin": require('@/assets/tq__7.jpg'),
                "daxue": require('@/assets/tq__8.jpg'),
                "qingZhuanYin": require('@/assets/tq__9.jpg'),
            },
            //吉林省下所有市的天气数据
            testData: [
                {
                    name: '长春市',
                    value: 'qing',
                    min: '10',
                    max: '20',
                    weather: '晴'
                },
                {
                    name: '吉林市',
                    value: 'qingZhuanDuoyun',
                    min: '11',
                    max: '15',
                    weather: '晴转多云'
                },
                {
                    name: '通化市',
                    value: 'zhongyu',
                    min: '8',
                    max: '12',
                    weather: '中雨'
                },
                {
                    name: '四平市',
                    value: 'qingZhuanZhongyu',
                    min: '9',
                    max: '19',
                    weather: '晴转中雨'
                },
                {
                    name: '白山市',
                    value: 'zhongxue',
                    min: '-15',
                    max: '-5',
                    weather: '中雪'
                },
                {
                    name: '辽源市',
                    value: 'leidian',
                    min: '13',
                    max: '17',
                    weather: '雷电'
                },
                {
                    name: '白城市',
                    value: 'yin',
                    min: '4',
                    max: '7',
                    weather: '阴'
                },
                {
                    name: '延边朝鲜族自治州',
                    value: 'daxue',
                    min: '-22',
                    max: '-12',
                    weather: '大雪'
                },
                {
                    name: '松原市',
                    value: 'qingZhuanYin',
                    min: '10',
                    max: '20',
                    weather: '晴转多云'
                }
            ]
      };
  },
}
4、自定义标签样式

主要是通过label里面的formatter和rich来自定义样式的,本例中的样式仅供参考,你可以自行定义自己想要的样式。

在 rich 里面,可以自定义富文本样式。利用富文本样式,可以在标签中做出非常丰富的效果。

label: {
    // 在文本中,可以对部分文本采用 rich 中定义样式。
    // 这里需要在文本中使用标记符号:
    // `{styleName|text content text content}` 标记样式名。
    // 注意,换行仍是使用 '\n'。
    formatter: [
        '{a|这段文本采用样式a}',
        '{b|这段文本采用样式b}这段用默认样式{x|这段用样式x}'
    ].join('\n'),

    rich: {
        a: {
            color: 'red',
            lineHeight: 10
        },
        b: {
            backgroundColor: {
                image: 'xxx/xxx.jpg'
            },
            height: 40
        },
        x: {
            fontSize: 18,
            fontFamily: 'Microsoft YaHei',
            borderColor: '#449933',
            borderRadius: 4
        },
    }
}

formatter介绍:

  • 标签内容格式器,支持字符串模板和回调函数两种形式,字符串模板与回调函数返回的字符串均支持用 \n 换行。
  • 字符串模板 模板变量有:{a}:系列名。{b}:数据名。{c}:数据值。
  • 回调函数格式:(params: Object|Array) => string。参数 params 是 formatter 需要的单个数据集。

rich属性说明:

  • color:文字的颜色。
  • backgroundColo:文字块背景色。可以使用颜色值,例如:‘#123234’, ‘red’, ‘rgba(0,23,11,0.3)’;也可以直接使用图片,当使用图片的时候,可以使用 width 或 height 指定高宽,也可以不指定自适应。
  • width:文字块的宽度。一般不用指定,不指定则自动是文字的宽度。
  • height:文字块的高度。一般不用指定,不指定则自动是文字的高度。
  • borderWidth:文字块边框宽度。
  • borderColor:文字块边框颜色。
  • borderRadius:文字块边框的圆角。
  • padding:文字块的内边距。padding: [3, 4, 5, 6]:表示 [上, 右, 下, 左] 的边距。padding: 4:表示 padding: [4, 4, 4, 4]。padding: [3, 4]:表示 padding: [3, 4, 3, 4]。
5、动态定义天气图片样式

根据接口数据,来定义不同天气的图标样式

const weatherMap = this.weatherMap
let tempData = this.testData
tempData.forEach(item => {
    item.weatherImg = weatherMap[item.value]
    rich[item.value] = {
        height: 26,
        width: 26,
        backgroundColor: {
            image: weatherMap[item.value]
        }
    }
})
6、设置标签样式

这里使用formatter回调函数的形式来定义标签的显示样式

label: {
    show: true,
    formatter: function (params) {
        return `{${params.data.value}|}  {min|${params.data.min}℃}  {max|${params.data.max}℃}\n{name|${params.name}}`
    },
    rich: rich
},
7、渲染吉林省地图

根据接口数据,显示地图

series: [
    {
        type: 'map',
        zoom: 1.2,
        map: 'jilin',
        data: tempData
    },
]
8、示例代码已上传,去顶部可下载

附全部代码

<template>
    <div class="map" id="map"></div>
</template>

<script>
import * as echarts from "echarts";
import jilin from "./json/jilin.json";
export default {
    data() {
        return {
            weatherMap: {
                "qing": require('@/assets/tq__1.jpg'),
                "qingZhuanDuoyun": require('@/assets/tq__2.jpg'),
                "zhongyu": require('@/assets/tq__3.jpg'),
                "qingZhuanZhongyu": require('@/assets/tq__4.jpg'),
                "zhongxue": require('@/assets/tq__5.jpg'),
                "leidian": require('@/assets/tq__6.jpg'),
                "yin": require('@/assets/tq__7.jpg'),
                "daxue": require('@/assets/tq__8.jpg'),
                "qingZhuanYin": require('@/assets/tq__9.jpg'),
            },
            testData: [
                {
                    name: '长春市',
                    value: 'qing',
                    min: '10',
                    max: '20',
                    weather: '晴'
                },
                {
                    name: '吉林市',
                    value: 'qingZhuanDuoyun',
                    min: '11',
                    max: '15',
                    weather: '晴转多云'
                },
                {
                    name: '通化市',
                    value: 'zhongyu',
                    min: '8',
                    max: '12',
                    weather: '中雨'
                },
                {
                    name: '四平市',
                    value: 'qingZhuanZhongyu',
                    min: '9',
                    max: '19',
                    weather: '晴转中雨'
                },
                {
                    name: '白山市',
                    value: 'zhongxue',
                    min: '-15',
                    max: '-5',
                    weather: '中雪'
                },
                {
                    name: '辽源市',
                    value: 'leidian',
                    min: '13',
                    max: '17',
                    weather: '雷电'
                },
                {
                    name: '白城市',
                    value: 'yin',
                    min: '4',
                    max: '7',
                    weather: '阴'
                },
                {
                    name: '延边朝鲜族自治州',
                    value: 'daxue',
                    min: '-22',
                    max: '-12',
                    weather: '大雪'
                },
                {
                    name: '松原市',
                    value: 'qingZhuanYin',
                    min: '10',
                    max: '20',
                    weather: '晴转多云'
                }
            ]
        };
    },
    created() {

    },
    mounted() {
        this.drawMap()
    },
    methods: {
        drawMap() {
            // 判断地图是否渲染
            let myChart = echarts.getInstanceByDom(document.getElementById("map"))
            // 如果渲染则清空地图 
            if (myChart != null) {
                myChart.dispose()
            }
            // 初始化地图
            myChart = echarts.init(document.getElementById("map"));

            echarts.registerMap("jilin", jilin)

            let rich = {
                max: {
                    color: '#fff',
                    backgroundColor: '#E6A23C',
                    width: 44,
                    height: 26,
                },
                min: {
                    color: '#fff',
                    backgroundColor: '#67C23A',
                    width: 44,
                    height: 26,
                },
                name: {
                    color: '#F56C6C',
                    height: 32
                },
            }

            const weatherMap = this.weatherMap
            let tempData = this.testData
            tempData.forEach(item => {
                item.weatherImg = weatherMap[item.value]
                rich[item.value] = {
                    height: 26,
                    width: 26,
                    backgroundColor: {
                        image: weatherMap[item.value]
                    }
                }
            })

            var option = {
                series: [
                    {
                        type: 'map',
                        zoom: 1.2,
                        map: 'jilin',
                        label: {
                            show: true,
                            formatter: function (params) {
                                return `{${params.data.value}|}  {min|${params.data.min}℃}  {max|${params.data.max}℃}\n{name|${params.name}}`
                            },
                            rich: rich
                        },
                        data: tempData
                    },
                ]
            }

            myChart.setOption(option)

        },
    },
}
</script>

<style scoped>
.map {
    width: 800px;
    height: 600px;
    position: relative;
}
</style>
9、效果图

在这里插入图片描述

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

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

相关文章

hubSpot有哪些功能?

HubSpot是一款综合性的市场营销、销售和服务软件平台&#xff0c;旨在帮助企业实现更有效的客户关系管理和增长。以下是HubSpot的一些主要功能&#xff1a; 市场营销自动化&#xff1a; 制定和执行多渠道的市场营销活动。 创建和管理电子邮件营销、社交媒体发布和广告活动。 …

WMS仓储管理系统可以处理哪些仓库异常情况

随着现代物流行业的快速发展&#xff0c;仓库管理作为其中的核心环节&#xff0c;面临着越来越大的挑战。传统的仓库管理方式已经难以满足日益复杂的需求&#xff0c;因此&#xff0c;WMS仓储管理系统解决方案应运而生。WMS仓储管理系统不仅简化了仓库的日常操作&#xff0c;更…

Redis:原理+项目实战——Redis实战1(session实现短信登录(并剖析问题))

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis的Java客户端 &#x1f4da;订阅专栏&#xff1a;Redis速成 希望文章对你们有所帮助…

拓扑排序【邻接矩阵邻接表】

拓扑排序 TuoPuSort 一、概念 我们再说拓扑排序时,我们首先了解下​DAG​ 将有向无环图G(V,E)中的所有顶点排成一个线性序列,使图中任意一对顶点u,v,之间不存在环路 DAG是一种特殊的有向图&#xff0c;它由一组顶点和一组有向边组成&#xff0c;且不存在任何环路。 每个顶点表…

华脉智联融合通讯基础引擎平台V2.0发布

华脉智联始于2012年&#xff0c;成立于2017年。历经11年在融合通讯、指挥调度领域的持续研发&#xff0c;于2024年发布华脉智联融合通讯基础引擎平台V2.0。 系统组成 1 核心平台 2 WEB调度台 3 PC调度台 4 云集群APP 5 云执法APP 系统特点 1 多网融合 可以支持多种网络接入和融…

【电商项目实战】购物车完善

&#x1f389;&#x1f389;欢迎来到我的CSDN主页&#xff01;&#x1f389;&#x1f389; &#x1f3c5;我是Java方文山&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;推荐给大家我的专栏《电商项目实战》。&#x1f3af;&#x1f3af; &am…

windows11此应用无法在你的电脑上运行怎么解决

在使用电脑运行软件的时候&#xff0c;系统弹出了“此应用无法在你的电脑上运行”提示&#xff0c;导致没办法正常使用该软件&#xff0c;不知道怎么回事&#xff0c;针对这一问题&#xff0c; 方法一&#xff1a; 1、如果是win11里的软件&#xff0c;可以右键该软件&#xff0…

电子电器架构(E/E)演化 —— 车载以太网

电子电器架构&#xff08;E/E&#xff09;演化 —— 车载以太网 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 本文13000字。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 屏蔽力是信息过载时代一…

2024年01月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年01月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…

Linux——进程初识(二)

1. 对当前目录创建文件的理解 我们知道在创建一个文件时&#xff0c;它会被默认创建到当前目录下&#xff0c;那么它是如何知道当前目录的呢&#xff1f; 对于下面这样一段代码 #include <stdio.h> #include <unistd.h>int main() {fopen("tmp.txt", …

polar CTF WEB-veryphp

1、题目 <?php error_reporting(0); highlight_file(__FILE__); include("config.php"); class qwq {function __wakeup(){die("Access Denied!");}static function oao(){show_source("config.php");} } $str file_get_contents("ph…

图神经网络——图学习

图学习 0. 前言1. 图2. 图学习3. 图神经网络小结 0. 前言 近年来&#xff0c;从社交网络到分子生物学等各个领域&#xff0c;数据的图表示越来越普遍。图神经网络 (Graph Neural Network, GNN) 是专为处理图结构数据而设计的&#xff0c;要充分挖掘图表示的潜力&#xff0c;深…

[Ray Tracing: The Rest of Your Life] 笔记

前言 开年第一篇博客~ 整理了三四个小时才整理完orz。 这一部分是光线追踪三部曲的最后一部&#xff0c;主要介绍了蒙特卡洛积分、重要性采样等内容。场景上没有什么大的改变&#xff0c;基本上就是在Cornell Box中渲染的&#xff0c;本篇主要在加速收敛&#xff0c;提升渲染效…

浅析PostgreSQL与SQL Server两者间的关键性差异

市场上有各种各样的数据库可供选择&#xff0c;用户通常可以仔细考虑PostgreSQL与SQL Server&#xff0c;以便为他们的用例找出更好的选择。使用PostgreSQL进行运营的组织可能希望切换到像Microsoft SQL Server这样的数据库&#xff0c;因为它主要迎合不同的数据仓库解决方案、…

学Python到底能干什么?看这里就知道

学Python到底能干什么&#xff1f;看这里就知道 | Python是一种代表简单主义思想的语言&#xff0c;极其容易上手&#xff0c;并且功能非常强大&#xff0c;这也是我的第二计算机语言。 个人可以使用Python去做哪些事呢&#xff1f; ✅办公自动化场景&#xff1a; 每天要处理…

磁盘管理-------磁盘分区

目录 引导语&#xff1a; 一、磁盘分区概念及作用 二、磁盘分区 &#xff08;一&#xff09;添加磁盘 &#xff08;二&#xff09;创建分区 &#xff08;三&#xff09;创建文件系统 &#xff08;四&#xff09;挂载 &#xff08;五&#xff09;永久挂载 三、扩展分区…

ROS学习笔记(7)进一步深入了解ROS第一步

0.前提 最近在学习宾夕法尼亚大学工程学院的ROS公开课&#xff0c;在尽力的去融入全英语的环境&#xff08;哪怕我的英语水准并不是很高&#xff09;。既然是在学习&#xff0c;笔记也就是必须的了&#xff0c;当然这些笔记都是课程当中提出的问题&#xff0c;我去寻找后得出的…

Neuro Contamination - Cyberpunk Gaming Music Futuristic Glitchy Sci-fi

无论是展示赛博朋克未来的电影场景&#xff0c;还是介绍高科技武器&#xff0c;你的音乐选择都至关重要。这首曲子的灵感来自科幻小说&#xff0c;旨在让你的观众想象未来的感觉。 潜在用例&#xff1a;科幻游戏、赛博朋克游戏、电影预告片、动作场景和产品广告。 非常适合充…

一呼百应API实时获取商品详情的实现

一、引言 随着电子商务的飞速发展&#xff0c;快速准确地获取商品详情变得尤为重要。一呼百应作为一家知名的B2B采购平台&#xff0c;提供了丰富的商品信息和交易数据。通过一呼百应的API接口&#xff0c;开发者可以实时获取商品详情&#xff0c;为业务决策和数据分析提供有力…