QT クライアントでの位置共有

どうやって使うか?

軽い使用

通信では,ユーザは位置アイコンをクリックして地図を表示できます. ロケーションサービスがデバイスで有効になっている場合,ユーザの位置が地図上に表示され,その位置を共有している他のメンバーの位置も表示されます (選択されたアカウントのすべての会話から).ユーザは位置共有ボタンをクリックして位置共有をオンオフにすることができます.デフォルトでは,ユーザーの位置が15分共有されますが,この設定はアプリの設定で変更できます.

ユーザーが会話で自分の位置を共有しているときに,会話アイコンに赤い位置アイコンが表示されます.ユーザーが他のメンバーから位置を受け取った場合,メンバーが参加するすべての会話にオレンジ色の位置アイコンが表示されます.

ユーザは,近況化,拡大,移動,閉じるなどによって地図と対話することができる.地図は,ピンまたはアンピンもできます.地図がアンピンされたとき,ユーザーが正しいアカウントにいる場合,再ピンすることができます.この機能は,ユーザがジャミを使用し続けながら地図を可視に保つことができます.

高度な使用

多重共有

シナリオ

ユーザは既に会話Aと会話Bで位置を共有しています.

特徴

ユーザが会話Cに切り替えた場合,地図はまだ可視で,ユーザは2つのオプションがあります

  1. 場所共有ボタンをクリックすると,またC会話メンバーと場所を共有します.

  2. 位置共有終了ボタンをクリックします.このことで,ユーザが位置共有を完全にオフにするか,または会話Cメンバーと自分の位置を共有することを停止する pop-up が表示されます.

ピン付きの窓

窓が開封された場合,ユーザーは,会話に接続されていないため,位置共有ボタンをクリックすることはできません.新しい人と位置共有を開始するには,ユーザーが窓を再開点点検する必要があります.窓を開封することは,継続的な位置共有に影響しません.さらに,窓を開封された間に位置共有終了ボタンをクリックすると,現在の位置共有を停止します.そして,ユーザーが特定の会話を選択して共有を停止することを許可するポップアップが表示されません.

多額口座

各アカウントには独自の地図があります.ユーザーがアカウント A に関するときに地図を解除し,B に切り替えて地図を解除すると,二つの地図が表示されます.アカウント A と B の地図は,それぞれ,それらのアカウントと共有位置を表示し,完全に相互に分離しています.

どうなるの?

紹介

この特徴は3つの部分に分かれています

  1. 位置を送信する

  2. 職位を受領する

  3. 位置を表示する

位置を決定するには, [Qt ポジショニング] (https://doc.qt.io/qt-6/qtpositioning-index.html) API を使用します.位置が決定されると,DHT にメッセージとして送信され,クライアントに送信されます.受信された位置は,その後 [OpenLayers] (https://openlayers.org/) JavaScript ライブラリを使用して表示されます.

ポジションを送信する

QGeoPositionInfoSource ヽ ヽQtPositioningモジュールで現在の位置を回収する.その位置はJSONフォーマットに変換され,positionManagerに送信されます.このクラスでは,位置共有プロセス全体を調整します.その位置は,sendPosition() ` 機能を通じて共有されます.

  • ローカルポジション 受信された信号を通して,ユーザが自分の位置を見ることができる

  • ヽ 位置ShareConvIds_`リストのすべての会話に DHT を載せます.このリストには,ユーザーが自分の位置を共有したいすべての会話のキーが含まれています.このキーから,すべての参加者のURIが取得され,それぞれの参加者に位置メッセージが送信されます.

位置の JSON 形式は次のとおりです

  • タイプ (位置または停止メッセージ)

  • 緯度

  • 縦軸

  • 時間 (QtClientが使用していない)

データの例: {\"ラット\":45.51616583988481,\"長\":-73.620693,\"時間\":1671658862000,\"タイプ\":\"位置\"}

ダイモンに位置を送信すると 作者のURIも送信されます

ユーザが会話で自分の立場を共有するのを停止すると,会話のIDは単に positionShareConvIds_リストから削除されます.また,各参加者に"停止"メッセージが送信されます.

職位を受領する

位置が受信されたとき, "onPositionReceived() "のスロットが起動されます. QtPositioningモジュールからのローカルポジションであろうと,別の連絡先からのポジションであろうと. positionManagerレベルでは, objectListSharingUris_リストはクライアントのすべてのポジションを保存します.ポジションは:

  • 追加 (URIはリストに含まれていない)

  • 更新された (URIは既にリストに含まれている)

  • 削除 (タイプ = "停止")

位置はリストに保存される.このタイプは,各位置に監視犬を設置する.特定の時間枠内に更新されない場合,リストから削除されます.

位置を表示する

位置が受信されたとき (slot onPositionReceived() が起動すると,位置がQmlに送信され,その情報が[OpenLayers]https://openlayers.org/) JavaScript ライブラリに送信されます. Qt WebEngineモジュールは,図書館のウェブ技術とQmlとの間の橋渡しが可能になります.各位置は地図に層を追加によって表現されます. newPosition() 関数は新しい層を追加し, updatePosition() 関数は層の座標を更新し, removePosition() 関数は層を削除します.