手把手教你Vue+ECharts+高德地图API实现天气预报数据可视化

news2024/9/21 8:02:28

前言

所谓数据可视化,我们可以理解为从宏观角度来看一眼就能看出来整个数据的占比,走向。对于数据可视化,很多互联网公司是很看重这一块的,包括大厂;就比如阿里的淘宝,双十一的时候往往就需要将消费者的一些数据通过图的形式展现出来。接下来我们就来实现一个天气的数据可视化(移动端开发),看如下效果图(iPhone6/7/8)。

 

准备工作

  1. 注册一个高德地图API账号,选择开发支持,地图 JS API

 

2、登录控制台成为开发者并创建 key

 

3、进入安全密钥使用说明,找到方式二。

 

4、创建一个vue项目,将vue的一些默认组件和样式删除,在views下新建一个Index.vue,并且在index.js下配置路由。目录结构如下所示:

 

5、通过npm install echarts --save安装一个依赖,这样就可以使用echarts了。

开始(细分11步)

  1. 将准备工作第三步找到的方式二的两个<script>引入到index.html中,将你自己申请的key值和安全密钥粘贴到里面去。这样就可以使用高德地图 JS API 开发地图应用。

  2. 设置头部样式和背景色,时间和切换城市用到了弹性布局。

 

3、设置我们需要的天气数据展示的html+css结构,这主要考查的是切页面能力。 

 

4、再放一个div 用于存放折线图。 

 

5、用watchEffectonMounted来获取天气数据。 

6、想要获取天气情况我们先要获得定位,这是需要用到高德地图API,我们来到这个位置:开发 > 地图 JS API v2.0 > 教程 > 服务 > 定位,找到IP定位获取当前城市信息。

 将这段代码复制到onMounted的回调函数中,这样我们就能获取到定位信息。

7、接下来就可以来获取天气了,我们把获取天气封装成一个函数getWeather。同样的我们来到:开发 > 地图 JS API v2.0 > 教程 > 服务 > 天气,找到实时天气查询。

把上图中的代码复制到获取天气的函数中,并将它放在获取定位成功后执行,传入定位的城市,这样就可以获得定位的城市的天气情况了。

8、同样的,我们来获取未来几天的天气情况,通过下面的代码就可以获取到。

 注意:此时输出的未来天气是一个数组。

9、我们已经获取到了天气数据了,接下来就要把这些数据存起来,把它变成响应式的,然后把它放到页面上展示出来。

把数据放到页面上我理解的是挖坑然后埋数据,就像下面这样: 

 注意:由于futureData是一个数组,我们要在它放数据的div上加一个v-if="futureData.length > 0",要不然会报错。

<div class="group" v-if="futureData.length > 0">
                明天:
<span class="tm">白天:{{ futureData[1].dayTemp }}℃ {{ futureData[1].dayWeather}} {{ futureData[1].dayWindDir }}风 {{ futureData[1].dayWindPower }} </span>
<span class="tm"> 夜间:{{ futureData[1].nightTemp }}℃ {{ futureData[1].nightWeather }} {{ futureData[1].nightWindDir }}风 {{ futureData[1].nightWindPower
}}
                </span>
            </div>

10、接下来我们就来做一个折线图了,打开ECharts官网,选一个折线图Examples - Apache ECharts

定义一个方法initEchart来完成图的绘制(这里定义了一个空数组来获取未来几天的温度)

const tempArr = ref([])
   data.forecasts.forEach(item => {
                        tempArr.value.push(item.dayTemp)
                    })
  const echartContainer = ref(null)
  const initEchart = () => {
            const myChat = echarts.init(echartContainer.value);
            let option = {
                xAxis: {
                    type: 'category',
                    data: ['今天', '明天', '后天', '大后天'],
                    lineStyle: {
                        color: '#fff'
                    },
                    axisTick: {
                        show: false
                    },

                },
                yAxis: {
                    type: 'value',
                    show: false

                },
                series: [
                    {
                        data: tempArr.value,
                        type: 'line'
                    }
                ]
            };
            myChat.setOption(option)
        }
   return {
            echartContainer
        }

别忘了在装这幅图的div上挂一个ref="echartContainer"哟。

这样就能帮我们初始化一个折线图了。

11、最后直接在获取未来天气中调用initEchart就可以了。

部分代码

<script>
import { toRefs, watchEffect, reactive, ref, onMounted } from 'vue';
import * as echarts from 'echarts';


export default {
    setup() {
        const echartContainer = ref(null)
        const state = reactive({
            today: {},
            futureData: [],
        })
        const tempArr = ref([])



        onMounted(() => {
            //1.获取定位
            AMap.plugin('AMap.CitySearch', function () {
                var citySearch = new AMap.CitySearch()
                citySearch.getLocalCity(function (status, result) {
                    // console.log(status);
                    if (status === 'complete' && result.info === 'OK') {
                        // 查询成功,result即为当前所在城市信息
                        //console.log(result.city);
                        getWeather(result.city)
                    }
                })
            })
        })
        const getWeather = (cityName) => {
            //加载天气查询插件
            AMap.plugin('AMap.Weather', function () {
                //创建天气查询实例
                var weather = new AMap.Weather();

                //执行实时天气信息查询
                weather.getLive(cityName, function (err, data) {
                    console.log(err, data);
                    state.today = data
                });
                //未来的天气
                weather.getForecast(cityName, function (err, data) {
                    console.log(err, data);
                    state.futureData = data.forecasts

                    data.forecasts.forEach(item => {
                        tempArr.value.push(item.dayTemp)
                    })
                    initEchart()
                });



            });
        }

        const initEchart = () => {
            const myChat = echarts.init(echartContainer.value);
            let option = {
                xAxis: {
                    type: 'category',
                    data: ['今天', '明天', '后天', '大后天'],
                    lineStyle: {
                        color: '#fff'
                    },
                    axisTick: {
                        show: false
                    },

                },
                yAxis: {
                    type: 'value',
                    show: false

                },
                series: [
                    {
                        data: tempArr.value,
                        type: 'line'
                    }
                ]
            };
            myChat.setOption(option)
        }
        return {
            ...toRefs(state),
            echartContainer
        }
    }
}
</script>

结语

ECharts中的一些图表是很好用的,我们可以自己动手多去尝试尝试。未来的学习之旅还很长,对于数据的可视化我们还可以做成3D的效果。本文如有错失,欢迎大家指正,最后感谢大家的观看

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

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

相关文章

论文浅尝 | 句法丰富的判别训练:一种有效的开放信息抽取方法

笔记整理&#xff1a;杜苗增&#xff0c;东南大学硕士&#xff0c;研究方向为多模态信息抽取 链接&#xff1a;https://aclanthology.org/2022.emnlp-main.401.pdf 动机 开放信息提取(OIE)是信息提取(IE)的一个分支&#xff0c;专注于从非结构化自然语言文本中提取结构化信息。…

论文笔记_2017_RS_迈向高清 3D 城市测绘:基于道路特征的移动测绘系统和航空影像配准

基本情况 出处&#xff1a;Javanmardi M, Javanmardi E, Gu Y, et al. Towards high-definition 3D urban mapping: Road feature-based registration of mobile mapping systems and aerial imagery[J]. Remote Sensing, 2017, 9(10): 975.原文地址&#xff1a;Remote Sensin…

Postman生成代码的小技巧

描述 你还在使用postman吗&#xff1f;你还是一条条复制参数吗&#xff1f;你还是手动录入数据吗&#xff1f;对于一些不经常使用postman的人来说&#xff0c;这个小技巧可以帮助你导入请求&#xff0c;以及转换成开发语言。 教程 1 抓包接口 以CSDN热榜为例&#xff0c;直…

数据可视化二、综合项目

零、文章目录 数据可视化二、综合项目 1、项目概述 &#xff08;1&#xff09;项目展示 &#xff08;2&#xff09;项目目的 市场需求&#xff1a;应对现在数据可视化的趋势&#xff0c;越来越多企业需要在很多场景(营销数据&#xff0c;生产数据&#xff0c;用户数据)下使…

Fiddler 微信小程序抓图教程(傻瓜式|汉化版|狗看了都直呼内行)

前言 本篇文章主要给大家详细讲解如何用Fiddler爬取微信小程序的图片&#xff0c;内容图文并茂&#xff0c;流程非常简单&#xff0c;我们开始吧。 目录 获取软件并打开点击工具设置相关代理如何抓图答疑总结 一、获取软件并打开 1、通过百度网盘下载获取安装包(链接是永久的…

二十三种设计模式第六篇--建造者模式(也叫生成器)

建造者模式&#xff08;Builder Pattern&#xff09;是使用多个简单的对象一步一步&#xff08;顺序构建&#xff09;构建成一个复杂的对象&#xff0c; 这种类型的设计模式属于创建型模式&#xff0c;他提供了一种创建对象的最佳方式。 一个Builder类会一步一步构建成为最终的…

Windows10 WIFI蓝牙图标消失,网卡驱动出现感叹号等无法上网的情况解决方案

Windows10出现WIFI蓝牙图标消失&#xff0c;网卡驱动出现感叹号等无法上网的情况解决方案_飞机跑不快的博客-CSDN博客 问题描述 我的电脑是戴尔游匣G15 5511&#xff0c;由于静电保护的原因&#xff0c;不得不拆开电脑后盖拔掉电池&#xff0c;释放静电&#xff0c;释放完成后…

OpenPCDet系列 | 6.PointPillars模型分类、回归、角度损失的构建

文章目录 模型损失计算1. 分类损失构建1.1 分类损失函数:SigmoidFocalClassificationLoss2. 回归损失构建2.1 回归损失函数:WeightedSmoothL1Loss3. 角度损失构建3.1 角度损失函数:WeightedCrossEntropyLoss4. 总结模型损失计算 在进行anchor的正负样本分配后,具体来说就是…

【运动规划算法项目实战】专栏介绍

文章目录 前言1. 路径规划中常用的插值方法2. 路径规划中常用的抽稀3. 如何加载csv文件的路径信息4. 如何在栅格地图中实现A*算法5. 如何在栅格地图中实现Dijkstra算法6. 如何实现简单的状态机7. 如何实现机器人多目标点导航8. Voronoi图]9. 八叉树地图10. 如何实现三次样条插值…

网安笔记05 SHA

SHA Hash函数 定义 任意长度的数据M变换为定长码h h H A S H ( M ) h H ( M ) h HASH(M)\quad h H(M) hHASH(M)hH(M) 实用性&#xff1a; 给定M&#xff0c;计算h时高效的 安全性&#xff1a; 单向性 给出h&#xff0c;反向计算原文x时不可行的&#xff0c;否则截取…

vcomp140.dll怎么安装?提示vcomp140.dll丢失怎样修复?

在用电脑玩游戏或者打开软件工作的时候&#xff0c;电脑提示vcomp140.dll丢失无法执行此代码&#xff0c;是什么回事呢&#xff1f;需要怎么修复呢&#xff1f;不用紧张&#xff0c;小编今天就把vcomp140.dll文件修复方法分享给大家。我总结了几个修复经验&#xff1b; vcomp14…

IO-概述

概述 ​ IO是Input&#xff08;输入&#xff09;和Output&#xff08;输出&#xff09;的首字母缩写。 ​ I&#xff08;输入Input&#xff09;&#xff1a;指向Java程序中输入数据&#xff0c;即Java程序从外部获取数据。 ​ O&#xff08;输出Output&#xff09;&#xff1a…

c盘游戏怎么转移到d盘?无需重新安装

概述&#xff1a;游戏占用的容量一般很大&#xff0c;如果都存在C盘中&#xff0c;可能会导致C盘空间不足&#xff0c;这时候我们可以考虑迁移游戏到其他盘。c盘游戏怎么转移到d盘&#xff1f;本指南详细讲解。 一、为什么需要将游戏移动到其他盘 现在很多游戏玩家&#xff0c…

基于结构化跨模态表示一致性的临床辅助结直肠息肉识别

文章目录 Toward Clinically Assisted Colorectal Polyp Recognition via Structured Cross-Modal Representation Consistency摘要本文方法Shared Transformer BlockCross-Modal Global AlignmentSpatial Attention Module 实验结果 Toward Clinically Assisted Colorectal Po…

Liunx下pip3换源(最详细)

在使用python时我们经常会安装各种包&#xff0c;我们一般安装的方式都是pip3 install xx模块&#xff0c;但是pip3默认源https://pypi.org/安装的过程非常慢&#xff0c;可能都是几k几k的&#xff0c;有时安装这安装着&#xff0c;直接error了&#xff0c;还有一种情况是直接飘…

BSR:Block compressed Sparse Row matrix format

BSR块压缩存储是CSR行压缩存储的升级变形&#xff1b;可以降低图数据存储空间。 有以下图的矩阵表示&#xff1a; 一、CSR表示 rowIndex [0 4 8 10 12 16 20] columns [0 1 2 3 | 0 1 2 3 | 2 3 | 2 3 | 2 3 4 5 | 2 3 4 5] values …

倒计时 1 天:Tapdata LDP V3 发布会预告,看实时数据集成平台如何赋能企业 AI 落地

更多 LDPAI 场景细节&#xff0c;敬请期待 5 月 10 日&#xff08;今天&#xff09;的 Tapdata 发布会。 最近几个月&#xff0c;AI 领域可谓经历了近十年以来最为魔幻且不可思议的时刻。 自 ChatGPT 发布以来&#xff0c;无论是底层大模型、训练框架、应用框架还是 GPT 插件等…

如何将m4v转换成mp4格式?这些方法极速无损

如何将m4v转换成mp4格式&#xff1f;众所周知&#xff0c;M4V文件格式是一个由苹果公司开发的视频文件格式&#xff0c;它通常用于iTunes Store中售卖和租赁的电影、电视节目等内容。但是&#xff0c;在某些情况下&#xff0c;我们可能无法在其他设备或软件上播放M4V文件&#…

2023年杭州助理工程师职称申报要求和申报材料是什么呢?

一、杭州助理工程师职称申报条件要求&#xff1a; 1、中专学历毕业后&#xff0c;任技术员满四年或未认定技术员参加工作满六年&#xff0c;必须参加考核&#xff0c;考试合格才能成为助理级职称资格 2、大专学历毕业后&#xff0c;三年工作经验&#xff0c;考核合格&#xf…