2024/02/06

HCL Nomad で GPS 座標の取得

Notes/Domino のクライアントソフトウェアには、ノーツクライアント以外に Nomad があります。現在 Nomad には、スマホやタブレット用の Nomad Mobile と WEB ブラウザで動作する Nomad WEB がありますが、今回は手持ちのデバイスで確認できる Nomad Mobile に関してです。

スマホやタブレットには、さまざまなセンサー類が付いていますが、Nomad では GPS にアクセスする機能が Notes 11 から追加されました。リリース当時、検証はしたのですが、先日久しぶりに開発しようとしたらすぐに思い出せず、ヘルプのお世話になりました。せっかくですからここでまとめておこうと思います。


GPS アクセスの概要

GPS にアクセスするためには Notes 11 で LotusScript に追加された次のクラスを使用します。

  • NotesGPS
  • NotesGPSPosition
  • NotesGPSCoordinates

3 つもあるのでオブジェクトを作成して、座標を Get するだけ、というように単純な使い方ではありません。GPS と言えばおおむね現在の位置を取得する目的に使用しますので、その機能だけを提供する関数を作成しておきましょう。


現在位置を取得する関数

GPS の座標は緯度(Latitude)と経度(Longitude)の 2 つの数値で示されます。デバイスの GPS にアクセスして現在位置の座標を返す GetGPSPos_Cur という関数を作成してみました(新規のスクリプトライブラリ lsGPS に作成)。

取得に成功した場合、戻り値が True となり、引数に座標をセットして返します。

Option Declare

Public Function GetGPSPos_Cur(rdLatitude As Double, rdLongitude As Double) As Boolean
   Dim ns As New NotesSession
   Dim gps As NotesGPS
   Dim gpsp As NotesGPSPosition
   Dim gpsc As NotesGPSCoordinates

   On Error GoTo ErrProc

   Set gps = ns.CreateGPS()
   If gps.RequestAccess() Then
      Set gpsp = gps.GetCurrentPosition()
      Set gpsc = gpsp.Coordinates
      rdLatitude = gpsc.Latitude
      rdLongitude = gpsc.Longitude

       GetGPSPos_Cur = True
   End If

ExitProc:
   Exit Function

ErrProc:
    GetGPSPos_Cur = False
   Resume ExitProc
End Function


座標取得までの流れは次の通りです。

  • NotesSession クラスの CreateGPS メソッドで NotesGPS クラスのオブジェクトを生成
  • RequestAccess メソッドで GPS に対するアクセスを確認
  • GetCurrentPosition メソッドで現在位置を NotesGPSPosition オブジェクトとして取得
  • Coordinates プロパティから座標を管理する NotesGPSCoordinates オブジェクトを取得
  • Latitude と Longitudeプロパティより座標を取得

デザイナーヘルプでは、Coordinates プロパティのように記載のない機能を使用していますが、これでコンパイルが通り、実行もできるので”よし”としましょう(12.0.2 で確認)。


なお、モバイルデバイスで Nomad に対して GPS のアクセスを禁止した場合や、GPS を持たない PC で実行した場合はエラーが発生します。そこで、エラーの場合は False を返すようにエラー処理を追加しています。


関数の組み込み

GPS から現在位置の座標を取得し、現在の文書にセットするエージェントを作成します。

Option Declare
Use "lsGPS"

Sub Initialize
   Dim ns As New NotesSession
   Dim nuiw As New NotesUIWorkspace
   Dim nuid As NotesUIDocument
   Dim nd As NotesDocument

   Dim dLat As Double
   Dim dLon As Double

   Set nuid = nuiw.Currentdocument
   Set nd = nuid.Document

   If GetGPSPos_Cur(dLat, dLon) Then
      nd.Latitude = dLat
      nd.Longitude = dLon
   Else
      MsgBox "GPS情報取得でエラーが発生しました。", 16
   End If
End Sub

トリガーは「エージェントリストの選択」、対象は「なし」で設定しています。


続いて、テストフォームを作成します。

緯度と経度を表示するフィールドと作成したエージェントを実行するアクションボタン[GPS情報取得]を作成します。


実行テスト

Nomad からアプリケーションを開き、テストします。[GPS情報取得]ボタンをタップすると現在位置の座標が表示されます(GPS に対する使用を許可した場合)。

GPS を持たない PC などで実行した場合は、エラーメッセージが表示されます。






0 件のコメント:

コメントを投稿