一键掌握天气动态 - 基于Vue和高德API的实时天气查询

前言

本文将学习如何使用Vue.js快速搭建天气预报界面,了解如何调用高德地图API获取所需的天气数据,并掌握如何将两者有机结合,实现一个功能丰富、体验出色的天气预报应用

无论您是前端新手还是有一定经验,相信这篇教程都能为您带来收获。让我们一起开始这段精彩的Vue.js + 高德API之旅吧!

效果展示

实时效果展示

动画.gif

可以查看最近几天的天气

高德API

要实现实时天气的获取,我们需要用到高德地图的API服务

首先来到高德开放平台

image.png

来到JS API服务

image.png

首先需要获取JS API 安全密钥,将它引入项目中

image.png

<div id="container"></div>
<script type="text/javascript">
  window._AMapSecurityConfig = {
    serviceHost: "你的代理服务器域名或地址/_AMapService",
    //例如 :serviceHost:'http://1.1.1.1:80/_AMapService',
  };
</script>
<script
  type="text/javascript"
  src="https://webapi.amap.com/maps?v=2.0&key=你申请的key值"
></script>
<script type="text/javascript">
  //地图初始化应该在地图容器div已经添加到DOM树之后
  var map = new AMap.Map("container", {
    zoom: 12,
  });
</script>

接下来我们可以看到这里的天气服务

image.png

这里的服务是通过城市名称、区域编码(如杭州市、330100),查询目标城市、区域的实时天气状况。

也就是说我们需要获取到天气数据之前的获取到当前的位置

image.png

//加载天气查询插件
AMap.plugin("AMap.Weather", function () {
  //创建天气查询实例
  var weather = new AMap.Weather();
  //执行实时天气信息查询
  weather.getLive("杭州市", function (err, data) {
    console.log(err, data);
    //err 正确时返回 null
    //data 返回实时天气数据,返回数据见下表
  });
});

不难发现这里还有一个位置的服务

image.png

有三种定位方式可选择

image.png

我们使用IP定位获取当前城市信息

image.png

接下来我们就要开始在我们的项目中使用了

在index.js中全局引入高德的服务

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" href="/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite App</title>
    <script type="text/javascript">
      window._AMapSecurityConfig = {
        securityJsCode: "你的代理服务器域名或地址/_AMapService",
      };
    </script>
    <script
      type="text/javascript"
      src="https://webapi.amap.com/maps?v=2.0&key=你申请的key值"
    ></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.js"></script>
  </body>
</html>

创建一个Home.vue

image.png

构建获取天气的方法

这个方法可以获取到今天的天气

const getWeather = (city) => {
  //加载天气查询插件
  AMap.plugin("AMap.Weather", function () {
    //创建天气查询实例
    var weather = new AMap.Weather();
    //执行实时天气信息查询
    weather.getLive(city, function (err, data) {
      console.log(err, data);
      state.value = data;
      console.log(state.value);
      //err 正确时返回 null
      //data 返回实时天气数据,返回数据见下表
    });
  });
};

这个方法可以获取到明天、后天的天气

const getWeather2 = (city) => {
  AMap.plugin("AMap.Weather", function () {
    //创建天气查询实例
    var weather = new AMap.Weather();
    //执行实时天气信息查询
    weather.getForecast(city, function (err, data) {
      console.log(err, data);
      //err 正确时返回 null
      //data 返回天气预报数据,返回数据见下表
      forecasts.value = data.forecasts;
      console.log(forecasts.value);
    });
  });
};

在获取到位置后调用获取天气的方法

() => {
  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);
        getWeather(result.city);
        getWeather2(result.city);
      }
    });
  });
});

之后便是将数据渲染到页面即可

<div class="container">
    <div class="nav">
      <div class="time">{{ now }}</div>
      <div class="city">切换城市</div>
    </div>

    <div class="city-info">
      <p class="city">{{ state.city }}</p>
      <p class="weather">{{ state.weather }}</p>
      <h2 class="temp">
        <em>{{ state.temperature }}</em
        ></h2>

      <div class="detail">
        <span> 风力:四级 </span> | <span> 风向:西北风 </span> |
        <span> 空气湿度:98% </span>
      </div>
    </div>

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

      <div class="group">
        后天:<span class="tm"
          >白天:{{ forecasts[2].dayTemp }}{{ forecasts[2].dayWeather }}
          {{ forecasts[2].dayWindDir }} {{ forecasts[2].dayWindPower }}</span
        >
        后天:<span class="tm"
          >夜间:{{ forecasts[2].nightTemp }}{{ forecasts[2].nightWeather }}
          {{ forecasts[2].nightWindDir }}
          {{ forecasts[2].nightWindPower }}</span
        >
      </div>
    </div>
  </div>

最终我们就能实现一个天气预报的效果了

我们使用IP定位获取当前城市信息的原因是因为天气预报不需要那么精准的位置

官方也介绍了

如果不需要获取精确的位置,只需要城市级别的定位信息,推荐使用AMap.CitySearch插件,AMap.CitySearch插件获取所在城市相比通过浏览器定位的方式也更快捷。

所以我们采取了这种方式

总结

通过本文的学习,我们成功利用Vue.js和高德地图API开发了一个实时天气预报应用

通过这个案例,我们不仅掌握了如何在Vue.js中集成高德地图API,还学会了如何使用Vue.js提供的各种功能和特性来增强应用的交互性和用户体验

希望读者在学习的过程中有所收获!!!

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值