QT 클라이언트에서 위치 공유
어떻게 사용해야 할까요?
비약적 사용
대화에서 사용자는 위치 아이콘을 클릭하여 지도를 표시할 수 있습니다. 장치에서 Location Services
를 활성화하면, 사용자의 위치가 지도에 표시되며, 선택한 계정의 모든 대화에서 자신의 위치를 공유하는 다른 모든 구성원의 위치와 함께 표시됩니다. 사용자는 위치 공유 버튼을 클릭하여 위치 공유를 활성화 및 종료 할 수 있습니다. 기본적으로 사용자의 위치가 15 분 동안 공유되지만 이 설정을 응용 프로그램의 설정에서 수정할 수 있습니다.
대화에서 위치를 공유하는 사용자라면 대화 아이콘에 빨간색 위치 아이콘이 표시됩니다. 사용자가 다른 회원이 위치 정보를 수신하면 회원이 참석하는 모든 대화에서 오렌지색 위치 아이콘이 표시됩니다.
사용자가 지도와 상호작용할 수 있는 방법은: 리서링, 확대, 이동 및 종료. 지도는 또한 또는 을 해낼 수 있습니다. 지도는 을 해낼 때, 사용자가 올바른 계정에서 있다면 다시 을 수 있습니다. 이 기능은 사용자가 Jami를 계속 사용하면서 지도를 가시적으로 유지할 수 있습니다.
고급 사용
다중 공유
시나리오
사용자는 이미 대화 A와 대화 B와 함께 위치를 공유하고 있습니다.
특징
사용자가 대화 C로 전환하면 지도가 여전히 가시적이며 사용자가 두 가지 옵션을 가지고 있습니다
위치 공유 버튼을 클릭하여 C 대화 멤버들과도 위치를 공유합니다.
위치 공유 끝 버튼을 클릭하면 사용자가 위치 공유를 완전히 종료하거나 C 대화 멤버들과 자신의 위치를 공유하는 것을 중단할 수 있는 팝업 버튼이 표시됩니다.
이 된 창
창이 비착된 경우, 사용자는 대화에 더 이상 연결되지 않기 때문에 위치 공유 버튼을 클릭할 수 없습니다. 새로운 사람들과 위치 공유를 시작하려면 사용자가 창을 다시 핀해야합니다. 창을 비착하는 것은 지속적인 위치 공유에 영향을 미치지 않는다는 것을 유의하십시오. 또한, 창이 비착된 동안 위치 공유 끝 버튼을 클릭하면 모든 현재 위치 공유를 중지하고 사용자가 공유를 중단하는 특정 대화를 선택할 수 있도록 pop-up이 나타나지 않습니다.
여러 계좌
각 계정에는 고유한 지도가 있습니다. 사용자가 A 계정에서 지도를 해제하고 B 계정에 전환하여 지도를 해제하면 두 개의 지도가 표시됩니다. A 계정과 B 계정의 지도는 각각 해당 계정과 공유된 위치를 표시하고 서로 완전히 분리됩니다.
어떻게 작동하는 거죠?
소개
이 특징은 세 부분으로 나뉘어 있습니다.
자신의 위치를 보내
직장을 받는
위치 표시
위치를 결정하기 위해 [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() 함수는 계층을 제거합니다.