LotusScript には NotesTimer という私があまり使ったことの無いクラスが存在します。NotesTimer クラスを使うと、指定した間隔(秒単位)ごとにイベントを発生させることができます。
定期的に発生するイベントでGPSからの位置情報を保存すれば、GPSロガー的なものになりそうです。
まずは、フォームを1つ作成して以下のコードをフォームへ追加しました。
(Globals)の(Declarations)
Dim elapsedTimer As NotesTimer Dim gps As NotesGPS Dim position As NotesGPSPosition Dim ss As NotesSession %INCLUDE "lsconst.lss"
(Globals)の Initialize
Sub Initialize Set ss = New NotesSession End Sub
QyeryOpen
Sub Queryopen(Source As NotesUIDocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant) On Error 4508 Goto ERROR4508 Set gps = ss.CreateGPS gps.TimeoutSec = 9 gps.HighAccuracy = False If Not gps.RequestAccess Then Messagebox "False",,"Request access" Exit Sub End If Set position = gps.GetCurrentPosition Call gpslog( "Start" ) Exit Sub ERROR4508: Messagebox "NotesGPS class のインスタンスを取得できません。" & Chr(10) & "Err: 4508" Continue = False Exit Sub End Sub
PostOpen
Sub Postopen(Source As NotesUIDocument) Set elapsedTimer = New NotesTimer(60, "") On Event Alarm From elapsedTimer Call elapsedTimerHandler End Sub
QueryClose
Sub Queryclose(Source As NotesUIDocument, Continue As Variant) elapsedTimer.Enabled = False Call gpslog( "End" ) End Sub
さらに次の2つのコードを追加しました。
Sub elapsedTimerHandler(Source As NotesTimer) Call gpslog( "" ) End Sub
Sub gpslog( msg As String ) Dim ndt As NotesDateTime Dim doc As NotesDocument Dim coodinates As NotesGPSCoordinates position.Update Set ndt = position.TimeStamp Set coodinates = position.Coordinates Set doc = New NotesDocument( ss.CurrentDatabase ) doc.Form = "Main" doc.Message = msg doc.gps.TimeoutSec = gps.TimeoutSec doc.gpsposition.TimeStamp = ndt.LSLocalTime doc.Latitude = coodinates.Latitude doc.Longitude = coodinates.Longitude doc.Altitude = coodinates.Altitude doc.Heading = coodinates.Heading doc.Speed = coodinates.Speed doc.Accuracy = coodinates.Accuracy doc.AltitudeAccuracy = coodinates.AltitudeAccuracy doc.Save True, False Set doc = Nothing Set ndt = Nothing End Sub
このフォームを開くとき、NotesGPS のオブジェクトを作り、イベント発生の間隔を60秒にセットします。イベント発生ごとにコールするスクリプトを「elapsedTimerHandler」としました。
このフォームを閉じるとき、NotesTimer を非アクティブの状態にします。これでイベントが発生しなくなります。
さて NotesTimer のヘルプには次のような記述があります。
NotesTimer はエージェントではなく Lotus Notes UI オブジェクトで使用することを意図されています。なんだか嫌な予感が...
HCL Nomad でこのフォームを前面に開いてる間は 約60秒おきに位置情報が保存されました。
フォームを開いて記録している間、HCL Nomad 上には、3つのタブ(ホーム、GPS Logger ビュー、フォーム)がありましたが、GPS Logger ビューのタブをタップしてフォームのタブが他のタブのうしろにある状態でも、位置情報は記録され続けました。※下図はフォームのタブが前面に表示されてます
しかしながら、画面の操作をしばらくやめて画面が暗転した状態では、位置情報が記録されませんでした。また HCL Nomad から別のアプリに切り替えている間も位置情報は記録されませんでした。
それから、 iPhone などのスマホでは他のアプリからの通知が表示されることがありますが、通知が表示されている間は位置情報は記録されていないような印象です。
位置情報が記録されなかった場合も、フォームを開いている間はタイマーが有効のようで、指定した間隔どおりにはなりませんでしたが遅れて記録され続けました。
こんなことがあったので、フォームを開いた後は、画面が暗くならないように画面をサワサワと触り続けたり、通知が表示されればすぐさま画面の外へスワイプするといったつまらない操作を継続的に行っていました。
そんなこんなで散歩ついでに取得した位置情報から KML ファイルを作り、Google Map へ読み込んでみると、次のように表示できました。→KMLファイルの作り方
GPS ロガーとしては、なかなか使いづらいものが出来上がりました。
0 件のコメント:
コメントを投稿