创建一个.net 8的webapi项目备用
 
编辑一个实体类,该实体类用于存储获取ip地址的经纬度数据使用
 
继续编辑三个类,用来存储对应经纬度的具体天气数据包:
 
改造默认的天气控制器,里面写成我们自己的。例如先写个获取IP的经纬度坐标的请求
 
运行一下,看下现在的效果,可以看到获取到ip的具体信息,包括运营商、经纬度坐标等。
 
继续拓展内容,根据经纬度获取天气数据
 
运行,可以看到一些天气信息
 
以下是返回的具体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】内回复“天气查询”即可获取源码地址。

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

 

.NET程序获取当前IP经纬度,并通过经纬度实现天气查询功能的更多相关文章

  1. 通过百度获取IP地址对应的经纬度

    /** * 获取指定IP对应的经纬度(为空返回当前机器经纬度) *  * @param ip * @return */ public static String[] getIPXY(String ip ...

  2. 微信小程序-获取经纬度

    微信小程序-获取经纬度 最近公司新功能 要求在外的市场人员 发送位置信息回来. 用的还是微信小程序开发.... 微信小程序 提供一个接口 getLocation 这个接口反回来的位置 相对实际位置 相 ...

  3. [微信小程序] 微信小程序获取用户定位信息并加载对应城市信息,wx.getLocation,腾讯地图小程序api,微信小程序经纬度逆解析地理信息

    因为需要在小程序加个定位并加载对应城市信息 然而小程序自带api目前只能获取经纬度不能逆解析,虽然自己解析方式,但是同时也要调用地图,难道用户每次进小程序还要强行打开地图选择地址才定位吗?多麻烦也不利 ...

  4. JavaScript和微信小程序获取IP地址的方法

    最近公司新加了一个需求,根据用户登录的IP地址判断是否重复登录,重复登录就进行逼退,那么怎么获取到浏览器的IP地址呢?最后发现搜狐提供了一个JS接口,可以通过它获取到客户端的IP. 接口地址如下: h ...

  5. php 获取客户端IP地址经纬度所在城市

    1. [代码]获取客户端IP地址经纬度所在城市 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 <?php   $getIp=$_SERVER["REMOTE_ADDR ...

  6. GeoIP简介与资源,定位经纬度,获取用户IP

    所谓GeoIP,就是通过来访者的IP,定位他的经纬度,国家/地区,省市,甚至街道等位置信息.这里面的技术不算难题,关键在于有个精准的数据库.有了准确的数据源就奇货可居赚点小钱,可是发扬合作精神,集体贡 ...

  7. nginx的配置:目的是使用nginx反向代理后,应用程序获取用户真实ip

    一.了解nginx Nginx是lgor Sysoev为俄罗斯访问量第二的rambler.ru站点设计开发的.从2004年发布至今,凭借开源的力量,已经接近成熟与完善. Nginx功能丰富,可作为HT ...

  8. 客户端程序获取自己的ip、isp、地理位置等信息

    @ 比如说你需要收集用户信息,又或者要通过这些信息让用户登陆合适的服务器(北京联通用户登陆北京联通服务器). @ 淘宝和新浪都提供了类似的API,你只需要发送一个http请求,它就返回一个json格式 ...

  9. Nginx反向代理后应用程序获取客户端真实IP

    Nginx反向代理后,Servlet应用通过request.getRemoteAddr()取到的IP是Nginx的IP地址,并非客户端真实IP,通过request.getRequestURL()获取的 ...

  10. C#服务器获取客户端IP地址以及归属地探秘

    背景:博主本是一位Windows桌面应用程序开发工程师,对网络通信一知半解.一日老婆逛完某宝,问:"为什么他们知道我的地址呢,他们是怎么获取我的地址的呢?" 顺着这个问题我们的探秘 ...

随机推荐

  1. 【Vue】10 Vue-Cli 项目创建

    简单的Demo案例并不需要Vue-Cli,因为一个页面之内可以总揽 但是真实的项目开发,考虑代码结构,目录结构,部署,热部署,单元测试... 代码量呈几何倍数增长,而且缺少轮子就写起来很痛苦 所以必须 ...

  2. IPython notebook(Jupyter notebook)指定IP和端口运行

    1.  使用conda  安装  jupyter conda install jupyter 2. 在服务器端不打开浏览器,指定 端口, IP ,  运行jupyter notebook 这里假设端口 ...

  3. 【源码篇】Flutter Bloc背后的思想,一篇纠结的文章

    前言 看了Bloc源码后,心情有点复杂呀... 说点积极的... 用过Bloc的靓仔们,肯定能感受到,Bloc框架对开发页面,做了很清晰划分,框架强行定了俩种开发模式 Bloc模式:该模式划分四层结构 ...

  4. Deformable DETR:商汤提出可变型 DETR,提点又加速 | ICLR 2021 Oral

    DETR能够消除物体检测中许多手工设计组件的需求,同时展示良好的性能.但由于注意力模块在处理图像特征图方面的限制,DETR存在收敛速度慢和特征分辨率有限的问题.为了缓解这些问题,论文提出了Deform ...

  5. flex数据绑定

    1 .方法绑定    [Bindable(event="myFlagChanged")] private function isEnabled():String { if (myF ...

  6. Odoo13开发环境搭建

    准备:windows10 64位系统.Python3.6.8.Pycharm2019.2.Postgresql-12.0-1.Odoo13 其它:nodejs.rtlcss.wkhtmltopdf 安 ...

  7. C#/.NET/.NET Core定时任务调度的方法或者组件[转载]

    原文由Rector首发于 码友网 之 <C#/.NET/.NET Core应用程序编程中实现定时任务调度的方法或者组件有哪些,Timer,FluentScheduler,TaskSchedule ...

  8. Android Studio 项目已经sync完成,但是在布局中显示:Design editor is unavaliable until after a sunncessful project sync

    原因:在drawable文件夹中新增了一个png图标 解决:同步在drawable-v24文件中复制一份即可

  9. axis2添加拦截器

    项目背景: 2002年的某保险老项目,项目是部署了多个服务器,每个服务器有2到多个服务(每个服务的日志对应一个日志文件),外部对接是通过F5分发到随机服务器上来进行访问,正式出现问题或者看一些问题就需 ...

  10. 强!70.3K star ! 推荐一款功能强大、开源、可视化的性能实时监控系统:Netdata

    在当今复杂多变的IT环境中,系统性能的实时监控与分析对于确保业务连续性.系统稳定运行以及快速故障排查至关重要.随着云计算.大数据和微服务架构的普及,对监控系统的要求也日益增高. 今天给大家推荐一款性能 ...