7.2.1用坐标表示地理位置学案
天气预报是我们日常生活中经常关注的信息之一。通过结合微信小程序的地理位置获取和天气预报查询 API,我们可以轻松实现自动获取当前位置的天气信息。
本文将详细介绍如何利用微信小程序获取地理位置和经纬度,并通过天气预报查询 API 获取实时天气和天气预报的步骤和示例代码。
代码教程1. 授权获取地理位置信息:首先,你需要在小程序的代码中请求用户授权获取地理位置信息。可以使用 wx.authorize 方法请求用户授权,并指定 scopeerLocation 权限。
wx.authorize({ scope: 'scopeerLocation', success: function () { // 用户授权成功 }, fail: function () { // 用户拒绝授权或授权失败 wxToast({ title: '请授权地理位置信息', icon: 'none', duration: 2000 }); }})
2. 获取地理位置在用户授权成功后,可以使用 wx.getLocation 方法获取用户的地理位置信息。该方返回用户的经纬度等详细信息。
wx.getLocation({ type: 'wgs84', success: function (res) { var latitude = restitude; // 纬度 var longitude = res.longitude; // 经度 // 调用逆地理编码接口获取当前位置信息 getAddressInfo(latitude, longitude) // 在这里调用获取天气信息的函数,并传入经纬度参数 getWeatherInfo(latitude, longitude); }})
上述示例中的 type: 'wgs84' 表示使用 WGS84 坐标系获取经纬度信息。你还可以使用其他坐标系,如 'gcj02',根据你的需求进行调整。
3. 显示当前位置信息在小程序界面中展示用户当前位置的信息,例如城市名称或详细地址。创建一个函数 getAddressInfo, 接收经纬度参数,可以使用微信小程序提供的逆地理编码接口将经纬度转换为具体的位置信息。
function getAddressInfo(latitude, longitude) { wx.request({ url: '/d/file/gt/2023-09/5s15xluylxf data: { location: latitude + ',' + longitude, key: 'Your_Tencent_Map_API_Key' }, success: function (response) { var address = response.data.result.address; // 获取位置信息 // 在界面上展示当前位置信息 console.log('当前位置:' + address); }, fail: function () { // 网络请求失败 wxToast({ title: '网络请求失败,请稍后重试', icon: 'none', duration: 2000 }); } }); }
4. 获取实时天气情况创建一个函数 getWeatherInfo,接收经纬度参数,并在函数内部调用天气预报查询 API。
function getWeatherInfo(latitude, longitude) { var url = "https://eolink.o.apispace/456456/weather/v001/now?lonlat=" + longitude + "," + latitude; wx.request({ url: url, method: "GET", header: { "X-APISpace-Token": "", // 替换为空字符串的部分应填写APISpace API Key "Authorization-Type": "apikey" }, success: function (response) { console.log(response.data) }, fail: function () { // 网络请求失败 wxToast({ title: '网络请求失败,请稍后重试', icon: 'none', duration: 2000 }); } });}
访问地址:
/d/file/gt/2023-09/xwtnyh0pyyb API Key 可以到 APISpace 登录注册获取。
5. 天气预报除了实时天气情况,你还可以调用天气预报查询 API 来获取未来几天的天气预报信息,并在小程序界面中展示。
以下是未来3天的天气预报数据调用示例,如果需要查询更多天,请把days=3 改为 days=n,n最多为15天
function getWeatherForecast(latitude, longitude) {var data = "" var url = "https://eolink.o.apispace/456456/weather/v001/day?days=3&lonlat=" + longitude + "," + latitude; wx.request({ url: url, method: "GET", header: { "X-APISpace-Token": "", // 替换为空字符串的部分应填写APISpace API Key "Authorization-Type": "apikey" }, success: function (response) { console.log(response.data) // var forecastData = response.data; // 获取天气预报数据 // 在界面上展示天气预报信息 // for (var i = 0; i < forecastData.length; i++) { // var forecast = forecastData[i]; // console.log('日期:' + forecast); // console.log('天气:' + forecast.text_day); // console.log('------------------------'); // } } });}
注意: API Key 可以到 APISpace 登录注册获取。
APISpace 简介上述调用的天气预报查询接口即来自 APISpace 的,APISpace 是 国内一个较大的 API 供应平台,提供多种类型的 API 接口,包括手机号码归属地查询 API 、天气预报查询API、手机在网状态 API 、反欺诈(羊毛盾)API 以及当前比较热门的 AI 绘画 API 等等,其中天气预报查询接口支持通过经纬度/城市编码查询天气实况信息、逐小时预报信息或者是未来15天的天气信息,感兴趣的小伙伴可以去官网体验一下。
结语通过以上步骤和提示,你可以在微信小程序中实现自动获取地理位置信息和经纬度后,获取当前位置的天气信息,并展示在小程序界面上。无论是作为一个天气预报应用,还是作为其他类型的小程序,这些功能都可以为用户提供实用和便利的服务。保持代码的优雅和可维护性,同时关注用户体验和数据准确性,将使你的小程序在功能和性能上得到更好的发展和用户认可。
业余电台之间进行通讯联络时,在一般情况下,除应及时向对方报告信号和自己设备及操作员相关信息之外,还应当详细报告自己电台所在的地理位置。虽然在两个电台沟通联络时已经从呼号中获取了对方大致的位置,但是范围还是太大。为了便于对方结合信号报告更好地分析电波传播情况以及设备和天馈性能,无疑知道对方电台的具体地理位置是非常重要的。
我们报告地理位置的方法通常有一下几种
1、直接报告自己电台所在地的名称,一般是用Q简语中的QTH来进行报告。
例如:My QTH is Beijing, The capital city of China (我的电台位置在中国首都北京。)
My QTH is Gaobeidian Hebei Near Beijing (我的位置在河北高碑店,在北京附近。)
2、报告自己电台所在的经纬度。这种方式适合正在移动着(如在海洋中航行等)的电台。报告时也使用Q简语QTH。
例如:My QTH is E 116°28′43″and N 39°58′34″(我的位置在东经116°28′43″,北纬39°58′34″。)
My QTH is W 58°22′12″ and S 34°37′13″(我的位置在西经58°22′12″,南纬34°37′13″)
如果需要有一种简要和快速的定位方式,那么非梅登黑德网格定位系统Maidenhead Grid Square Locator莫属了。世界业余无线电通用的一种简单4-6个字符的快速区块定位方式。
该系统在1980年业余无线电VHF管理人员在英国伦敦附近的梅登黑德开会时被提出而得名。这是一种用4-6个字符就能报告电台精确位置的方法,这种方法可以减少很多在复杂地理位置时需要作出的繁杂解释,也可以避免在用经纬度报告地理位置时,需要费时又容易出错的一大串数字,如果遇干扰或使用CW联络时,要发出或抄收这一大串数字则更为困难。
能够直接显示网格坐标的Garmin GPS
梅登海德网格定位系统这么简单易用,那这些网格是如何划定的呢?
我们来了解一下。梅登海德网格定位系统是将整个地球表面分成了18*18=324个“场”,各占经度20°,纬度10°,每个“场”中又被分为10*10=100个“方”,各占经度2°,纬度1°,再把每个“方”分为24*24=5766个“块”,各占经度5′,纬度2.5′,这样整个地球表面即被分为1866662400个小网格“块”。其中每个“场”在地球上的位置用AA-RR间的字母表示,每一个“方”在“场”中的位置用00-99的两位数字表示,每一个“块”在“方”中的位置用AA-XX之间的两个字母表示。
以上每两个字符中的第一个均表示经度方向的序号,第二个均表示纬度方向的序号。网格位置的起点设在东经180°的南极端,经度的序号由西向东排列,纬度的序号由南向北排列。所以粗略的网格位置就可以用4个字符表示,如上海为“PM01”;比较精确的网格位置可以用6个字符表示,如北京通州区“OM89HV”。使用该系统只要6个字符就可以报出误差不超过10km的地球上任何地点。
粗略的4位字符网格定位
加入最后2位字母便可得到更精确的位置
如果大家想了解自己所处位置的梅登黑德网格数据,可以使用一款HAM QTH梅登黑德定位软件,直接在Maidenhead系统坐标计算工具中,输入你的经纬度坐标,点击 “计算QTH”,该工具自动解算给出你所在全球的QTH网格位置。
来!给我6个字符,我就知道你在哪!