首页 > 其他分享 >记录--用Echarts打造自己的天气预报!

记录--用Echarts打造自己的天气预报!

时间:2023-07-13 18:23:45浏览次数:58  
标签:-- 我们 获取 可视化 AMap 组件 天气预报 data Echarts

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

前言

最近刚刚学习了Echarts的使用,于是想做一个小案例来巩固一下。项目效果如下图所示:

话不多说,开始进入实战。

创建项目

这里我们使用vue-cli来创建脚手架: vue create app

这里的app是你要创建的项目的名称,进入界面我们选择安装VueRouter,然后就可以开始进行开发啦。

页面自适应实现

我们这个项目实现了一个页面自适应的处理,实现方式很简单,我利用了一个第三方的库,可以将项目中的px动态的转化为rem,首先我们要安装一个第三方的库 npm i lib-flexible 安装完成后,我们需要在 main.js中引入 import 'lib-flexible/flexible' 还要在项目中添加一个配置文件postcss.config.js,文件内容如下:

module.exports = {
  plugins: {
    autoprefixer: {},
    "postcss-pxtorem": {
      "rootValue": 37.5,
      "propList": ["*"]
    }
  }
}

上述代码是一个 PostCSS 的配置示例,用于自动添加 CSS 属性的前缀和将像素单位转换为 rem 单位。

其中

  • autoprefixer 是一个 PostCSS 插件,用于根据配置的浏览器兼容性自动添加 CSS 属性的前缀,以确保在不同浏览器中的兼容性。
  • postcss-pxtorem 是另一个 PostCSS 插件,用于将像素单位转换为 rem 单位,以实现页面在不同设备上的自适应效果。在上述配置中,rootValue 设置为 37.5,这意味着 1rem 会被转换为 37.5px。propList 设置为 ["*"] 表示所有属性都要进行转换。

这样,我们在项目中任何一个地方写px,都会动态的转化成为rem,由于rem是一个中相对于根元素字体大小的CSS单位,可以根据根元素的字体大小进行动态的调整,达到我们一个也买你自适应的目的。

实时时间效果实现

在项目的左上角有一个实时显示的时间,我们是如何做到的呢?首先我们在数据源中定义一个loalTime字段,用来装我们的时间,然后可以通过 new Date() 函数返回当前的时间对象,但这个对象我们是无法直接使用的,需要通过toLocaleTimeString() 函数处理,将 Date 对象转换为本地时间的格式化字符串。

methods{
    getLocalTime() {
      return new Date().toLocaleTimeString();
    },
}
仅仅是这样的话,我们获取的时间是不会动的,怎么让他动起来呢,答案是使用定时器:
created() {
    setInterval(() => {
      this.localTime = this.getLocalTime();
    }, 1000);
  },

我们使用了一个setInterval定时器函数,让他每秒钟触发一次,然后将返回的时间赋值给我们的数据源中的localTime,同时将他放在created这个生命周期中,确保一开始就能运行,这样,我们就得到了一个可以随当前时间变化的时间。

省市选择组件实现

这个功能自己实现较为麻烦,我们选择使用第三方的组件库,这里我们选择的是Vant,这是一个轻量级,可靠的移动端组件库,我们首先需要安装他

npm i vant@latest-v2 -S

由于我们使用Vue2进行开发,所以需要指定其版本,然后就是导入所以有组件:

import Vant from 'vant'; 
import 'vant/lib/index.css'; 
Vue.use(Vant);

由于我们只是在本地开发,所以我们选择导入所有组件,在正式开发中可以选择按需引入来达到性能优化的目的。

准备工作完毕,导入我们需要的组件:

<van-popup v-model="show" position="bottom" :style="{ height: '30%' }">
  <van-area
    title="标题"
    :area-list="areaList"
    visible-item-count="4"
    @cancel="show = false"
    columns-num="2"
    @confirm="selectCity"
  />
</van-popup>

这里我们通过show的值来控制的组件的显示与否,点击确认按钮后,会执行selectVCity方法,该方法会将我们选择的省市返回,格式为一个包含地区编码和地区名称的一个对象数组。

天气信息的获取

我们获取天气的信息主要依靠高德地图提供的api来实现,高德地图为我们提供了很多丰富的地图功能,包括了实时天气和天气预报功能,首先我们要注册一下,成为开发者,并获取自己的密钥和key。

最后在index.html中引入:

<script type="text/javascript">
    window._AMapSecurityConfig = {
      securityJsCode: '你的密钥',
    }
</script>
<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=你的key"></script>
就可以进行开发了。我们首先需要在项目开始加载的时候显示我们当地的信息,所以需要获取我们的当前所处环境的IP地址,所以高德也为我们提供了方法:
initMap() {
  let that = this;
  AMap.plugin("AMap.CitySearch", function () {
    var citySearch = new AMap.CitySearch();
    citySearch.getLocalCity(function (status, result) {
      if (status === "complete" && result.info === "OK") {
        // 查询成功,result即为当前所在城市信息
        // console.log(result.city);
        that.getWeatherData(result.city);
      }
    });
  });
},
通过AMap.CitySearch插件我们可以很容易的获取到我们当前的IP地址,然后将我们获取到的IP地址传入到getWeatherData() 方法中去获取天气信息,需要注意的是,因为要求项目一启动就获取信息,所以这个方法也是需要放在created这个生命周期中的。然后就是获取天气信息的方法:
getWeatherData(cityName) {
  let that = this;
  AMap.plugin("AMap.Weather", function () {
    //创建天气查询实例
    var weather = new AMap.Weather();

    //执行实时天气信息查询
    weather.getLive(cityName, function (err, data) {
      console.log(err, data);
      that.mapData = data;
    });

    //执行实时天气信息查询
    weather.getForecast(cityName, function (err, data) {
      that.futureMapData = data.forecasts;
      console.log(that.futureMapData);

      // 每天的温度
      that.seriesData = [];
      that.seriesNightData = [];
      data.forecasts.forEach((item) => {
        that.seriesData.push(item.dayTemp);
        that.seriesNightData.push(item.nightTemp);
      });

      that.$nextTick(() => {
        that.initEchart();
      });
    });
  });
},

通过这个方法,我们只需要传入城市名就可以很轻松的获取到我们需要的天气信息,并同步到我们的数据源中,然后将其渲染到页面中去。

数据可视化的实现

面对一堆枯燥的数据,我们很难提起兴趣,这时候,数据可视化的重要性就体现出来了,数据可视化是指使用图表、图形、地图、仪表盘等可视化工具将大量的数据转化为具有可读性和易于理解的图像形式的过程。通过数据可视化,可以直观地呈现数据之间的关系、趋势、模式和异常,从而帮助人们更好地理解和分析数据。

而Echarts就是这样一个基于 JavaScript 的开源可视化图表库,里面有非常多的图表类型可供我们使用,这里我们使用比较简单的折线统计图来展示数据。

首先也是安装依赖

npm i echarts

然后就是在项目中引入

import * as echarts from "echarts";

然后就可以进行开发啦,现在页面中准备好一个容器,方便承载我们的图表

<div class="echart-container" ref="echartContainer"></div>

然后就是根据我们获取到的数据进行绘制:

initEchart() {
  // 基于准备好的dom,初始化echarts实例
  let myChart = echarts.init(this.$refs.echartContainer);

  // 绘制图表
  let option = {
    title: {
      text: "ECharts 入门示例",
    },
    tooltip: {},
    xAxis: {
      data: ["今天", "明天", "后天", "三天后"],
      axisTick: {
        show: false,
      },
      axisLine: {
        lineStyle: {
          color: "#fff",
        },
      },
    },
    yAxis: {
      min: "-10",
      max: "50",
      interval: 10,
      axisLine: {
        show: true,
        lineStyle: {
          color: "#fff",
        },
      },
      splitLine: {
        show: true,
        lineStyle: {
          type: "dashed",
          color: ["red", "green", "yellow"],
        },
      },
    },
    series: [
      {
        name: "白天温度",
        type: "line",
        data: this.seriesData,
      },
      {
        name: "夜间温度",
        type: "line",
        data: this.seriesNightData,
        lineStyle: {
          color: "red",
        },
      },
    ],
  };
  myChart.setOption(option);
},

一个图表中有非常多的属性可以控制它的不同形态,具体的不过多阐述,可以查看Echarts的参考文档,然后我们就得到一个非常美观的折线统计图。同时不能忘记和省市区选择器进行联动,当我们切换省市的时候,手动触发一次绘制,并且将我们选择的城市传入,这样,我们就得到了一个可以实时获取全国各地天气的小demo。

以上就是主要功能的具体实现方法:代码地址

本文转载于:

https://juejin.cn/post/7255161684526940220

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 

标签:--,我们,获取,可视化,AMap,组件,天气预报,data,Echarts
From: https://www.cnblogs.com/smileZAZ/p/17551753.html

相关文章

  • 关闭ubuntu的unattended upgrade
    ubuntu居然弄了个类似win10自动更新的unattendedupgrade,不过可以关闭它sudodpkg-reconfigureunattended-upgrades弹出一个确认窗口,回车就行了如果担心会偷偷打开,也可以直接卸载sudoaptremove unattended-upgrades这样就不会自动更新了......
  • 在集合中加入随机的数字(1-20)
    publicvoidnums(){ArrayListlist=newArrayList();Randomr=newRandom();list.Add(r.Next(20));while(true){if(list.Count==20)break;intnum=r.N......
  • csapp二进制炸弹实验个人总结
    2023/7/13完成了这个实验,算是我的第一次逆向实战,对我来说很有挑战性。总结如下:1.对于汇编的熟练度,尤其是“层次”问题,mov0x8(%rsp),%rax和lea0x8(%rsp),%rax并不同;要注意某一个值本身是“地址”还是“数值”2.理解机器码工作原理后,拓宽思路,经验+寻找新的方法3.看待问题的视角......
  • ckeditor粘贴word图片且图片自动上传功能
    ​ ueditor粘贴不能粘贴word中的图片是一个很头疼的问题,在我们的业务场景中客户要求必须使用ueditor并且支持word的图片粘贴,因为这个需求头疼了半个月,因为前端方面因为安全的原因是不允许访问本地文件的。首先说一下,ueditor粘贴word图片的问题已经解决,但是不是纯web方法解决的,......
  • [GIT]解决:failed to push some refs to ...(过程重现)
    本问题有很多种情况,解决方法也很多,本文只针对笔者本人的自身诉求和情况,选择了一种适合我的解决方法。仅供参考。1问题描述johnnyzen@XXDSSSMINGW64/e/source_code/BigData/bdp_common_data_service(develop)$gitpushTogitlab-bigdata.johnnyzen.cn:platform-software/b......
  • shell自动拉取远程仓库和部署代码
    #!/bin/bash#定义一个函数functioncheck_and_update_code(){#获取本地提交标识LOCAL=$(gitrev-parseHEAD)#获取远程提交标识REMOTE=$(gitrev-parseorigin/$1)#如果本地和远程不一致。则代表有更新了if[$LOCAL!=$REMOTE];the......
  • 前端 手动全屏
    手动点击设置全屏/退出全屏html<divstyle="height:100%"v-if="isReloadData"><div@click="fullScreen()">{{isFullScreen?'退出全屏':'全屏展示'}}</div></div>jsexportdefault{data(......
  • @Configration
      OpenDeclarationorg.springframework.context.annotation.Configuration@Target(value={TYPE})@Retention(value=RUNTIME)@Documented@ComponentIndicatesthataclassdeclaresoneormore@BeanmethodsandmaybeprocessedbytheSpringcontainer......
  • 设计模式-建造者模式在Java中使用示例
    场景建造者模式复杂对象的组装与创建没有人买车会只买一个轮胎或者方向盘,大家买的都是一辆包含轮胎、方向盘和发动机等多个部件的完整汽车。如何将这些部件组装成一辆完整的汽车并返回给用户,这是建造者模式需要解决的问题。建造者模式又称为生成器模式,它是一种较为复杂、使用......
  • Spring 方法命名为啥好多用post ?
    参考:JLSPreIncrementExpressionPostIncrementExpressioninta=0;a++;//post++a;//pre示例:@Testpublicvoidtest(){inti=0;System.out.println(i++);System.out.println(++i);} 意思是执行了方法之后,入参会发生改......