Vue实现大屏获取当前所处城市及当地天气的具体方案

 更新时间:2026年02月10日 08:42:37   作者:李剑一  
文章介绍了如何在大屏项目中展示城市名称和实时天气信息,通过浏览器的GeolocationAPI获取经纬度,然后使用逆地理编码服务获取城市名称,文章还提到了使用Open-Meteo获取天气信息,该服务免费且支持全球经纬度的实时天气和未来7天预报,需要的朋友可以参考下

之前做过的大屏项目一般是在内网环境中使用,所以一般顶部不牵扯展示城市和天气。但是这次做的是放在外网的,所以简单实现一下展示城市名称和当前实时天气信息。

获取当前所处位置

获取当前定位可以通过浏览器原生的Geolocation API获取经纬度信息。

function getLocation() {
	return new Promise((resolve, reject) => {
		if (navigator.geolocation) {
			navigator.geolocation.getCurrentPosition(
				(position) => {
					const lat = position.coords.latitude;
					const lon = position.coords.longitude;
					resolve({lat, lon});
					console.log('当前位置:', lat, lon);
				},
				(error) => {
					console.error('无法获取位置:', error.message);
					reject(error);
				}
			);
		}
	})
}

需要注意,Geolocation API是异步的,所以这里用 Promise 进行了简单的封装。另外这里只能获取到经纬度,无法获取到所在城市名称,需要通过逆地理编码的方式实现。

逆地理编码

目前国内主要是御三家提供逆地理编码的服务,但是都需要进行付费,不过唯一可以庆幸的是各家都有免费额度

如果你的大屏部署在外网,国外的Nominatim是完全免费的,咱们这边目前是无法访问的。官网地址也放一个nominatim.openstreetmap.org

这里我以腾讯的逆地理编码服务为例子简单写一下:

async function getCityName(lat, lon) {
	const sig = CryptoJs.MD5(`/ws/geocoder/v1/?key=${你的key}&location=${lat},${lon}${你的签名}`).toString();
	const {result} = await request.get(`/tencent/ws/geocoder/v1/?key=${你的key}&location=${lat},${lon}&sig=${sig}`);
	return `${result.address_component.city}-${result.address_component.district}`
}

这里需要代理一下,我这里的代理如下:

'/tencent': {
    target: 'https://apis.map.qq.com',
    changeOrigin: true,
    rewrite: (path) => path.replace(/^\/tencent/, '')
},

获取天气

天气信息目前咱们这边有和风天气,提供了一定的免费额度。

但是我在网上找到一个外面的,但是咱们这边能访问到的Open-Meteo,官方地址也放一下open-meteo.com

特点如下:

  • 无需注册、无 API Key、无调用限制
  • 支持全球经纬度实时天气 + 未来7天预报
  • 数据来源:欧洲中期天气预报中心(ECMWF)等权威机构

唯一不好的一点在于返回的都是英文数据,需要认为的转成中文。

// 部分天气中英文映射
const WEATHER_CODE_MAP = {
	0: { en: 'Clear sky', zh: '晴' },
	1: { en: 'Mainly clear', zh: '晴转多云' },
	2: { en: 'Partly cloudy', zh: '多云' },
	3: { en: 'Overcast', zh: '阴' },
	45: { en: 'Fog', zh: '雾' },
	48: { en: 'Depositing rime fog', zh: '冻雾' },
	51: { en: 'Drizzle: Light', zh: '小雨' },
	53: { en: 'Drizzle: Moderate', zh: '中雨' },
	55: { en: 'Drizzle: Dense', zh: '大雨' },
	61: { en: 'Rain: Slight', zh: '小雨' },
	63: { en: 'Rain: Moderate', zh: '中雨' },
	65: { en: 'Rain: Heavy', zh: '大雨' },
	71: { en: 'Snow fall: Slight', zh: '小雪' },
	73: { en: 'Snow fall: Moderate', zh: '中雪' },
	75: { en: 'Snow fall: Heavy', zh: '大雪' },
	95: { en: 'Thunderstorm', zh: '雷阵雨' },
	96: { en: 'Thunderstorm with slight hail', zh: '雷阵雨伴小冰雹' },
	99: { en: 'Thunderstorm with heavy hail', zh: '雷阵雨伴大冰雹' }
};
// 获取天气
async function getWeather(lat, lon) {
	const result = await request.get(`https://api.open-meteo.com/v1/forecast?latitude=${lat}&longitude=${lon}&current_weather=true`);
	const code = result.current_weather.weathercode;
	return WEATHER_CODE_MAP[code] || {en: 'Unknown', zh: '未知'};
}

这个是不需要代理的,因为Open-Meteo本身支持CORS

总结

获取经纬度和城市信息,以及天气信息在技术上没什么难度。

主要的问题点在于很多东西都是付费的,自己玩玩还好,但要是真的上线正式环境一定要防备被别人恶意刷爆。

以上就是Vue实现大屏获取当前所处城市及当地天气的具体方案的详细内容,更多关于Vue大屏获取当前所处城市及天气的资料请关注脚本之家其它相关文章!

相关文章

  • webpack4+Vue搭建自己的Vue-cli项目过程分享

    webpack4+Vue搭建自己的Vue-cli项目过程分享

    这篇文章主要介绍了webpack4+Vue搭建自己的Vue-cli,对于vue-cli的强大,使用过的人都知道,极大的帮助我们降低了vue的入门门槛,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-08-08
  • vue3+uniapp 上传附件的操作代码

    vue3+uniapp 上传附件的操作代码

    uni-file-picker搭配uni.uploadFile在使用问题上踩了不少坑,我至今还是没办法在不改uniapp源码基础上实现限制重复文件的上传,这篇文章介绍vue3+uniapp 上传附件的操作代码,感兴趣的朋友一起看看吧
    2024-01-01
  • vue窗口内容滚动到底部实现过程

    vue窗口内容滚动到底部实现过程

    这篇文章主要介绍了vue窗口内容滚动到底部实现过程,以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家,
    2025-12-12
  • vue+iview框架实现左侧动态菜单功能的示例代码

    vue+iview框架实现左侧动态菜单功能的示例代码

    这篇文章主要介绍了vue+iview框架实现左侧动态菜单功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Vue中消息横向滚动时setInterval清不掉的问题及解决方法

    Vue中消息横向滚动时setInterval清不掉的问题及解决方法

    最近在做项目时,需要进行两个组件联动,一个轮询获取到消息,然后将其传递给另外一个组件进行横向滚动展示,结果滚动的速度越来越快。接下来通过本文给大家分享Vue中消息横向滚动时setInterval清不掉的问题及解决方法,感兴趣的朋友一起看看吧
    2019-08-08
  • Vue实现boradcast和dispatch的示例

    Vue实现boradcast和dispatch的示例

    这篇文章主要介绍了Vue实现boradcast和dispatch的示例,帮助大家更好的理解和使用vue,感兴趣的朋友可以了解下
    2020-11-11
  • Vue实现多页签组件

    Vue实现多页签组件

    这篇文章主要介绍了Vue实现多页签组件的方法,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下
    2021-01-01
  • Vue中实现单向和多向数据绑定的方式详解

    Vue中实现单向和多向数据绑定的方式详解

    在学习 Vue.js 的过程中,数据绑定 是最基础也是最重要的概念之一,本文将深入讲解 Vue 中的两种数据绑定方式,即单向绑定 和 双向绑定,希望对大家有所帮助
    2025-12-12
  • vue实现动态给id赋值,点击事件获取当前点击的元素的id操作

    vue实现动态给id赋值,点击事件获取当前点击的元素的id操作

    这篇文章主要介绍了vue实现动态给id赋值,点击事件获取当前点击的元素的id操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • vue中@change兼容问题详解

    vue中@change兼容问题详解

    这篇文章主要介绍了vue中@change兼容问题详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10

最新评论