QT 클라이언트에서 위치 공유

어떻게 사용해야 할까요?

비약적 사용

대화에서 사용자는 위치 아이콘을 클릭하여 지도를 표시할 수 있습니다. 장치에서 Location Services를 활성화하면, 사용자의 위치가 지도에 표시되며, 선택한 계정의 모든 대화에서 자신의 위치를 공유하는 다른 모든 구성원의 위치와 함께 표시됩니다. 사용자는 위치 공유 버튼을 클릭하여 위치 공유를 활성화 및 종료 할 수 있습니다. 기본적으로 사용자의 위치가 15 분 동안 공유되지만 이 설정을 응용 프로그램의 설정에서 수정할 수 있습니다.

대화에서 위치를 공유하는 사용자라면 대화 아이콘에 빨간색 위치 아이콘이 표시됩니다. 사용자가 다른 회원이 위치 정보를 수신하면 회원이 참석하는 모든 대화에서 오렌지색 위치 아이콘이 표시됩니다.

사용자가 지도와 상호작용할 수 있는 방법은: 리서링, 확대, 이동 및 종료. 지도는 또한 또는 을 해낼 수 있습니다. 지도는 을 해낼 때, 사용자가 올바른 계정에서 있다면 다시 을 수 있습니다. 이 기능은 사용자가 Jami를 계속 사용하면서 지도를 가시적으로 유지할 수 있습니다.

고급 사용

다중 공유

시나리오

사용자는 이미 대화 A와 대화 B와 함께 위치를 공유하고 있습니다.

특징

사용자가 대화 C로 전환하면 지도가 여전히 가시적이며 사용자가 두 가지 옵션을 가지고 있습니다

  1. 위치 공유 버튼을 클릭하여 C 대화 멤버들과도 위치를 공유합니다.

  2. 위치 공유 끝 버튼을 클릭하면 사용자가 위치 공유를 완전히 종료하거나 C 대화 멤버들과 자신의 위치를 공유하는 것을 중단할 수 있는 팝업 버튼이 표시됩니다.

이 된 창

창이 비착된 경우, 사용자는 대화에 더 이상 연결되지 않기 때문에 위치 공유 버튼을 클릭할 수 없습니다. 새로운 사람들과 위치 공유를 시작하려면 사용자가 창을 다시 핀해야합니다. 창을 비착하는 것은 지속적인 위치 공유에 영향을 미치지 않는다는 것을 유의하십시오. 또한, 창이 비착된 동안 위치 공유 끝 버튼을 클릭하면 모든 현재 위치 공유를 중지하고 사용자가 공유를 중단하는 특정 대화를 선택할 수 있도록 pop-up이 나타나지 않습니다.

여러 계좌

각 계정에는 고유한 지도가 있습니다. 사용자가 A 계정에서 지도를 해제하고 B 계정에 전환하여 지도를 해제하면 두 개의 지도가 표시됩니다. A 계정과 B 계정의 지도는 각각 해당 계정과 공유된 위치를 표시하고 서로 완전히 분리됩니다.

어떻게 작동하는 거죠?

소개

이 특징은 세 부분으로 나뉘어 있습니다.

  1. 자신의 위치를 보내

  2. 직장을 받는

  3. 위치 표시

위치를 결정하기 위해 [Qt 위치] (https://doc.qt.io/qt-6/qtpositioning-index.html) API를 사용합니다. 위치가 결정되면 DHT에 메시지를 보내 클라이언트에 전송됩니다. 수신된 위치는 [OpenLayers] (https://openlayers.org/) 자바스크립트 라이브러리를 사용하여 표시됩니다.

포지션을 전송

지도가 열리자마자 Positioning 클래스는 QGeoPositionInfoSource 클래스를 사용하여 현재 위치를 검색합니다. 그 다음 위치가 JSON 형식으로 변환되어 positionManager로 전송됩니다. 이 클래스는 전체 위치 공유 프로세스를 조정합니다. 그 다음 위치가 sendPosition() 함수를 통해 공유됩니다. 공유됩니다:

  • 로컬 로컬 포시션 수신 ` 신호를 통해 사용자가 자신의 위치를 볼 수 있도록

  • DHT에서 positionShareConvIds_ 목록의 모든 대화에 대해 DHT에 표시합니다. 이 목록은 사용자가 자신의 위치를 공유하고자 하는 모든 대화의 키를 포함합니다. 이 키에서 모든 참가자의 URI를 얻으며 각 참가자에게 위치 메시지가 전송됩니다.

위치의 JSON 형식은 다음과 같습니다.

  • 타입 (위치 또는 중지 메시지)

  • 지위

  • 길이가

  • 시간 (QtClient이 사용하지 않는 시간)

데이터의 예: {\"lat\":45.51616583988481,\"장"\":-73.620693,\"시간":1671658862000,\"형"\":\"지위\"}

지위를 대몬에게 전송할 때, 저자의 URI도 전송됩니다.

사용자가 대화에 자신의 위치를 공유하지 않을 때 대화의 ID는 positionShareConvIds_ 목록에서 삭제됩니다. 또한 “stop” 메시지가 참가자에게 전송됩니다.

직장을 받는

위치가 수신되면 ‘onPositionReceived()’슬롯이 활성화됩니다. QtPositioning 모듈에서 로컬 위치 또는 다른 연락처에서 위치가 되든 간에. positionManager 수준에서, objectListSharingUris_ 목록은 고객의 모든 위치를 저장합니다. 위치는 다음과 같습니다:

  • 추가 (URI는 목록에 포함되어 있지 않습니다)

  • 업데이트 (URI는 이미 목록에 포함되어 있습니다)

  • 삭제 (형태 = “정지”)

위치 는 목록 에서 positionObject 타입의 객체 형태로 저장 됩니다. 이 타입 은 각 위치 에 대한 감시 개 를 허용 합니다. 특정 시간 내에 위치 가 업데이트 되지 않으면 목록 에서 삭제 됩니다.

위치 표시

위치가 수신되면 (slot onPositionReceived() 를 유발하면, 위치가 Qml에 전송되며, Qml은 [OpenLayers] (https://openlayers.org/) 자바스크립트 라이브러리로 정보를 전송합니다. Qt WebEngine 모듈은 라이브러리의 웹 기술과 Qml 사이의 다리를 허용합니다. 각 위치가 지도에 추가된 계층으로 나타납니다. newPosition() 함수는 새로운 계층을 추가하고, updatePosition() 함수는 계층의 좌표를 업데이트하고, `removePosition() 함수는 계층을 제거합니다.