一起动手做实时位置的天气预报功能的Notes应用

在这里插入图片描述
大家好,才是真的好。

今天我们继续查看V11几个开发中的新功能,并实现Notes中查看实时天气预报功能。不过要是专门只显示实时天气预报功能,我们前面似乎讲到过,这次,我们要和手机上的Nomad访问Notes应用结合起来,显示实时位置和其位置对应的天气预报。

嗯,有灵感的你,也许能立马想到,这还可以实现外出打卡功能呢——总之,有很多实用性。

一、几个API接口网站

我们要通过手机或移动设备上的GPS位置来获取实时位置和天气预报数据,Notes Domino本身并没有存储这些信息数据,所以需要到不同的API站点去查询。本文用到的API站点有http://api.cellocation.com:81用来查询地理位置,还有http://t.weather.sojson.com用来查询天气。

二、GPS实时位置获取

Domino Designer V11中的Lotusscript语言新增了NOTESGPS类,用以查询用户当前设备所在GPS地理位置。另外对JSON处理也进行了增强,在实验过程中,可以接触到这些新功能。

我们先做一个Notes表单如下
在这里插入图片描述
天气图片要不要均可。其中三个字段GPS、city和weather等,都为显示时计算,值都为域的名称。

现在先把以下代码贴到表单的POSTOPEN事件中,如下图:
在这里插入图片描述
代码如下

'=============================================
'以下代码获取设备实时GPS地理位置中的维度和经度

Dim session As New NotesSession
Dim GPS As NOTESGPS '定义GPS类
Set GPS = session.Creategps() '创建GPS实例
Dim hasAccess As Boolean 
hasAccess = GPS.Requestaccess() '判断在手机或移动设备上是否具备获取GPS的权限
If hasAccess Then '如果有权限
Dim pos As NOTESGPSPOSITION '定义地理位置
Set pos = GPS.Getcurrentposition() '实例化当前设备地理位置
Dim coo As NOTESGPSCOORDINATES
Set coo = pos.Coordinates '获取地理位置的坐标
Dim lat As Double
Dim lot As Double
lat = coo.Latitude '获取坐标纬度
lot = coo.Longitude  '获取坐标经度
End If

Source.EditMode=True
Call Source.FieldSetText("GPS","纬度 " & lat & " 经度 " & lot)

'维度和经度获取结束
'=============================================

现在,我们在手机或移动设备上使用HCL Nomad访问该表单时,可显示实时GPS位置,如下图
在这里插入图片描述
对,我把GPS纬度和经度隐藏了几度,免得大家顺着网线来找我。

三、实时位置名称获取

有了GPS实时位置,则可根据该位置来获取实时地理位置名称信息。只要把坐标发送到站点http://api.cellocation.com:81中即可获取,我们采用了get方法,从Notes Domino V10开始,Lotuscript支持HTTP的POST和GET等操作。

我们把以下代码贴到表单的POSTOPEN事件中,上一节代码的后面,如下图:
在这里插入图片描述
代码如下

'=============================================
'以下代码获取设备实时地理位置名称
Dim url As String
Dim webRequest As NotesHTTPRequest
Dim jsnav As NotesJSONNavigator
Dim el As NotesJSONElement

url="http://api.cellocation.com:81/regeo/?lat=" & lat & "&lon=" & lot &"&output=json"
Set webRequest = session.CreateHTTPRequest()
Set jsnav = session.CreateJSONNavigator(webRequest.get(url) )
Set el = jsnav.GetElementByName("address")
Call Source.FieldSetText("city",el.Value)

'实时地理位置名称获取结束
'=============================================

现在,我们在手机或移动设备上再次使用HCL Nomad访问该表单时,可以查看到具体的地理位置啦。
在这里插入图片描述
四、实时天气预报

显示GPS和地址我们前面似乎提到过,这次,我们要和手机上的Nomad访问Notes应用结合起来,显示实时位置和其位置上的天气预报。查询城市天气预报,要根据城市代码来,虽然我们也可以找到一个站点进行城市查询,但为了简单起见,我在Notes中做了一个表单和视图,专门用来输入城市名称和代码,如下图:
在这里插入图片描述
以此为基础,我们还是在同样的位置,加上代码,效果如下:
在这里插入图片描述
能够实现该功能的代码参考

'=============================================
'以下代码获取实时天气预报
Dim view As NotesView
Dim tmpdoc As NotesDocument
Dim tmpstr As String
Dim city As String
Dim cityno As String
'此处代码为硬写的演示代码,只考虑省份,不考虑自治区、直辖市等,先把城市名提出来
tmpstr=Strright(el.Value,"省")
city=Strleft(tmpstr,"市")
'从视图中获得城市编号
Set view=session.CurrentDatabase.GetView("allCities")
Set tmpdoc=view.GetDocumentByKey(city)
cityno=tmpdoc.cityno(0)
'获得城市天气预报
Dim jsonArr As NotesJSONArray
Dim listEL As NotesJSONElement
Dim jsonObj As NotesJSONObject
url="http://t.weather.sojson.com/api/weather/city/" & cityno
Set webRequest = session.CreateHTTPRequest()
Set jsnav = session.CreateJSONNavigator(webRequest.get(url) )
Set el = jsnav.GetElementByName("data")
Set el = el.value.GetelementByName("forecast")
Set jsonArr = el.Value
Set listEl = jsonArr.GetFirstElement()
Set jsonObj=listEl.Value
tmpstr="天气" + jsonObj.GetElementByName("type" ).Value
tmpstr=tmpstr+" "+ jsonObj.GetElementByName("low" ).Value
tmpstr=tmpstr+" "+ jsonObj.GetElementByName("high" ).Value
Call Source.FieldSetText("weather",tmpstr)
'实时天气预报获取结束
'=============================================

让我们再次在手机或移动设备上再次使用HCL Nomad访问该表单吧
在这里插入图片描述
好了,现在我们就基本上实现了一个实时地址和天气功能的Notes应用啦,细节方面,比如显示天气对应的图片,也很容易。大家可以试试看。

今天我们就讲到这里,欢迎继续关注。

更多精彩内容请关注微信公众号“协作者”

原文地址:https://mp.weixin.qq.com/s/ol4dSR2di11lkBkI-IGkDg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值