2020年7月15日水曜日

GPSセンサーの無いPCでも位置情報を取得できました

HCL Nomad では、端末の GPS 機能を利用して位置情報を取得するための LotusScript のクラスがあります。 

イマドキは GPS センサーが無い PC でもブラウザさえあれば Wi-Fi から位置情報を取得することができるらしいと噂で聞いたことがあります。

ところで先日、ノーツコンソーシアムのアプリ開発研究会に参加して Domino Volt を使ったアプリ開発を行いました。先月は Domino Volt を使ったアプリ開発のハンズオンだったのですが、今月は各自テーマを決めて自習する形式でした。※最近は全員がリモート参加のためグループでの取り組みが困難なのです

私は、Domino Volt ではまだ経験の無い Web API を利用したものにチャレンジしたかったのと、冒頭の「位置情報をGPSセンサー無しに取得する」を組み合わせて、位置情報を住所に変換する「リバースジオコーディング」アプリに取り組みました。

今回初めて Volt アプリを何もないところから作成したこともあり、研究会の限られた時間の中では Web API の部分しか実現できなかったのですが、その後 Domino Volt の Interface object についての Document の中に app.getLocation というコールバックファンクションがあることに気付き、今朝から取り組みました。

コールバックファンクションというのは、情報の取得が終わった後に呼び出される機能といったところでしょうか。

そして app.getLocation を使って取得できた位置情報から緯度と経度を取り出し、フォーム上の入力欄(単一行エントリー)へセットすることができました。

自宅PCでブラウザからこの Volt アプリへアクセスしてみたところ、取得できた緯度経度はGPSの値と大きな違いはなさそうでした。

次の画面ショットは、自由が丘駅のホームで iPhone からこの Volt アプリへアクセスしたものです。住所の精度は未確認ですが「自由が丘」というワードがあるので位置情報が大きくずれていることはなさそうです。
フォームを表示したとき、緯度と経度のデフォルト値をセット

実行ボタンをタップするとWeb APIを呼び出し、レスポンスを表へセット

これを実現するため、次のコードをフォーム「F_Form1」を表示するときに実行される onShow イベントへ設定しています。
var myForm = app.getForm('F_Form1');
var formBO = myForm.getBO();
var highAccuracy = true;
var myCallbackFunction = function (position) {
  if (position !== null) {
    formBO.F_SingleLine4.setValue(position.coords.latitude);
    formBO.F_SingleLine5.setValue(position.coords.longitude);
  }
};
app.getLocation(myCallbackFunction,highAccuracy);
フォームのイベントへカスタムアクションとしてJavaScriptのコードを追加


6行目の「F_SingleLine4」は緯度、7行目の「F_SingleLine5」は経度の入力欄です。フォームを表示すると、現在地の緯度と経度がデフォルト値としてセットされるという仕組みができました。

なお、このアプリをノーツコンソーシアムで用意していただいた Domino Volt 環境で実行すると、きちんと位置情報を取得できるのですが、私個人のPC内にある仮想環境上に構築した Domino Volt 環境では取得することができませんでした。検証できていませんが私の環境は https に対応していないことから、ひょっとすると位置情報を取得するためには https でアクセスできなければならないといったセキュリティ要件があるのかもしれません。

0 件のコメント:

コメントを投稿