.NET程序获取当前IP经纬度,并通过经纬度实现天气查询功能

news/2024/10/12 9:37:51
 
创建一个.net 8的webapi项目备用
0
 
编辑一个实体类,该实体类用于存储获取ip地址的经纬度数据使用
0
 
继续编辑三个类,用来存储对应经纬度的具体天气数据包:
0
 
改造默认的天气控制器,里面写成我们自己的。例如先写个获取IP的经纬度坐标的请求
0
 
运行一下,看下现在的效果,可以看到获取到ip的具体信息,包括运营商、经纬度坐标等。
0
 
继续拓展内容,根据经纬度获取天气数据
0
 
运行,可以看到一些天气信息
0
 
以下是返回的具体json报文,供参考:
{"latitude": 22.5,"longitude": 114,"generationtime_ms": 0.05698204040527344,"utc_offset_seconds": 0,"timezone": "GMT","timezone_abbreviation": "GMT","elevation": 37,"current_weather_units": {"time": "iso8601","interval": "seconds","temperature": "°C","windspeed": "km/h","winddirection": "°","is_day": "","weathercode": "wmo code"},"current_weather": {"time": "2024-10-11T09:45","interval": 900,"temperature": 26.1,"windspeed": 6.6,"winddirection": 131,"is_day": 1,"weathercode": 2}
}

 

 
数据字段解析
基本信息
  • latitude: 22.5 - 纬度。表示该地点的纬度位置。
  • longitude: 114 - 经度。表示该地点的经度位置。
  • generationtime_ms: 0.05698204040527344 - 数据生成的时间,单位是毫秒。表示从数据请求到数据生成所用的时间。
  • utc_offset_seconds: 0 - 与 UTC 时间的偏移,单位为秒。这里为 0 表示该数据是在 GMT 时区下计算的。
  • timezone: "GMT" - 时区,表示为 GMT。
  • timezone_abbreviation: "GMT" - 时区缩写,这里也是 GMT。
  • elevation: 37 - 表示该地点的海拔高度为 37 米。
当前天气单位
current_weather_units 部分用于解释当前天气数据中每个字段的单位。
  • time: "iso8601" - 时间格式遵循 ISO 8601 标准。
  • interval: "seconds" - 时间间隔单位为秒。
  • temperature: "°C" - 温度单位为摄氏度。
  • windspeed: "km/h" - 风速单位为每小时公里数。
  • winddirection: "°" - 风向单位是角度,以度数表示。
  • is_day: "" - 此字段没有单位,仅用来指示是否是白天(通常为 0 或 1)。
  • weathercode: "wmo code" - 表示天气情况的代码,使用 WMO(世界气象组织)标准代码。
当前天气情况
current_weather 部分提供了实际的天气数据。
  • time: "2024-10-11T09:45" - 表示观测的具体时间点,格式为 ISO 8601,即 2024 年 10 月 11 日 09:45。此处我们要换算成自己的东八区时间,要增加8小时,则是下午17点45分。
  • interval: 900 - 表示观测间隔为 900 秒,即 15 分钟。
  • temperature: 26.1 - 当前温度为 26.1°C。
  • windspeed: 6.6 - 当前风速为 6.6 km/h。
  • winddirection: 131 - 当前风向为 131 度。风向用度数表示,0 度表示正北,90 度表示正东,131 度则大致为东南方向。
  • is_day: 1 - 表示当前观测是在白天,1 代表白天,0 通常代表夜晚。
  • weathercode: 2 - 当前的天气代码为 2,按照 WMO 的天气代码标准,2 通常表示“部分多云”。
WMO 天气代码详解
根据 WMO(世界气象组织)的标准,weathercode 字段提供了天气状况的具体信息。以下是一些常见的 WMO 天气代码:
  • 0: 晴朗
  • 1: 主要晴朗
  • 2: 部分多云
  • 3: 多云
  • 4: 阴天
  • 45: 有雾
  • 48: 有浓雾
  • 51: 轻微毛毛雨
  • 53: 中等毛毛雨
  • 55: 强毛毛雨
  • 61: 轻微阵雨
  • 63: 中等阵雨
  • 65: 强阵雨
  • 71: 轻雪
  • 73: 中雪
  • 75: 强雪
  • 95: 雷阵雨,可能有轻微的降水
  • 99: 雷阵雨,伴有强降水
天气描述
在当前的数据中,weathercode 为 2,这表示天气状况为“部分多云”。
 
获取经纬度和天气的在线请求代码:
LocationInfo locationInfo = null;
using (var httpClient = _httpClientFactory.CreateClient())
{httpClient.Timeout = TimeSpan.FromSeconds(100);var res = httpClient.GetAsync("http://ip-api.com/json/").GetAwaiter().GetResult();res.EnsureSuccessStatusCode();var location = res.Content.ReadAsStringAsync().GetAwaiter().GetResult();if (!string.IsNullOrEmpty(location)){locationInfo = JsonConvert.DeserializeObject<LocationInfo>(location);}
}
if (locationInfo != null)
{using (var httpClient = _httpClientFactory.CreateClient()){httpClient.Timeout = TimeSpan.FromSeconds(100);var res = httpClient.GetAsync($"https://api.open-meteo.com/v1/forecast?latitude={locationInfo.lat}&longitude={locationInfo.lon}&current_weather=true").GetAwaiter().GetResult();res.EnsureSuccessStatusCode();var weather = res.Content.ReadAsStringAsync().GetAwaiter().GetResult();if (!string.IsNullOrEmpty(weather)){WeatherResponse weatherInfo = JsonConvert.DeserializeObject<WeatherResponse>(weather);return Ok(weatherInfo);}}
}

 

 

如果需要完整源码,可以在公众号【Dotnet Dancer】内回复“天气查询”即可获取源码地址。

以上就是本文章全部内容,如果有帮助,欢迎点赞、在看、转发分享或评论,谢谢大佬们捧场~

 

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

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

相关文章

公司网站如何修改图片

要修改公司网站上的图片,你可以按照以下步骤操作:备份原图:在修改任何图片之前,确保先备份原始图片。这有助于防止在修改过程中丢失原始数据。选择合适的工具:根据你需要进行的修改类型选择合适的工具。例如,如果只是简单的尺寸调整,可以使用在线工具如 Canva 或者本地软…

网站连接sql数据库

要让网站连接到SQL数据库,通常需要遵循以下步骤来配置和建立连接。这里我将分点简要说明,并以PHP和MySQL为例给出示例代码:安装数据库驱动确保你的Web服务器上已经安装了相应的数据库驱动。例如,对于MySQL,你需要安装mysqli或PDO_mysql。配置数据库连接信息准备好数据库的…

请问怎么修改公司网站内容

要修改公司网站的内容,通常有以下几种方法:使用CMS系统:如果您的公司网站是基于WordPress、Drupal或Joomla等内容管理系统(CMS)构建的,您可以直接登录到CMS后台进行内容编辑。 在CMS后台,您可以添加新的页面、编辑现有页面内容、上传图片和文件等。直接编辑源代码:如果…

宝塔面板占用443端口怎么办

宝塔面板默认会占用443端口来提供HTTPS服务,如果你在服务器上部署了其他服务也需要使用443端口,可能会遇到端口冲突的问题。以下是一些解决方法:更改宝塔面板的端口登录到宝塔面板。 前往“服务器”->“nginx”或“Apache”设置。 修改HTTP和HTTPS端口号。 保存并重启服务…

mysql数据库服务器错误怎么回事

MySQL数据库服务器错误可能由多种原因导致,这里列举一些常见的问题及其解决方法:服务未启动检查MySQL服务是否已经启动。 在命令行中使用 net start mysql (Windows)或 sudo service mysql start (Linux)来尝试启动MySQL服务。配置文件错误确认my.cnf(Linux)或my.ini(…

宝塔登录密码忘记怎么办_宝塔linux面板命令大全

通过官方文档或帮助中心查找解决方案访问宝塔面板的官方网站,查阅相关帮助文档或联系客服获取技术支持。使用面板安装脚本重置如果你有安装面板时使用的脚本,可以尝试使用该脚本提供的重置功能。 例如,有些脚本提供了 bt 命令,你可以尝试执行 bt 后根据提示进行操作。直接修…

请问怎么自己做一个网站

制作一个网站可以分为几个基本步骤,下面是一些关键步骤和建议: 1. 确定网站目标和内容明确你的网站想要实现什么功能。 决定网站的主要内容和风格。2. 规划网站结构设计网站的整体布局和页面结构。 制作线框图或原型图帮助规划。3. 获取域名和主机注册一个易于记忆且与网站主…

Day5 备战CCF-CSP练习

题目分析 暴力/二维前缀和 暴力就不说了,讲一下优化 二位前缀和,我们将矩形中每一个点都当成前缀和的点,那么,我们只需要将顶点标注一下,就可以利用前缀和的性质画出整个矩形 如图一,蓝色是要画的目标矩形那么怎么构建差分数组呢 根据前缀和公式f[i][j] = f[i][j - 1] + …