Położenie udostępnianie w klienci QT

Jak go użyć?

Użycie bez znaczenia

W rozmowie użytkownik może kliknąć ikonę lokalizacji, aby wyświetlić mapę. Jeśli Location Services jest włączona na urządzeniu, pozycja użytkownika zostanie wyświetlana na mapie, wraz ze lokalizacjami wszystkich innych członków, którzy dzielą się swoją lokalizacją (z wszystkich rozmów wybranych konta). Użytkownik może włączyć i wyłączyć udostępnianie lokalizacji, klikając przyciski udostępniania lokalizacji.

Kiedy użytkownik dzieli się swoją lokalizacją w rozmowie, na ikonie rozmowy pojawia się czerwona ikona lokalizacji. Jeśli użytkownik otrzymuje lokalizację od innego członka, na wszystkich rozmowach, w których członek jest obecny, wyświetlana będzie pomarańczowa ikona lokalizacji.

Użytkownik może interagować z mapą poprzez aktualizację, zwiększanie się, przesuwanie i zamykanie.

Wykorzystanie zaawansowane

Wielowymiarowe udostępnianie

scenariusz

Użytkownik już dzieli się lokalizacją z rozmową A i rozmową B.

Funkcja

Jeśli użytkownik przełączy się na rozmowę C, mapa jest nadal widoczna i użytkownik ma dwie opcje

  1. Kliknij przycisk udostępniania lokalizacji, aby udostępnić również lokalizację członkom rozmowy C.

  2. Kliknij przycisk końcowy do udostępniania lokalizacji. Wyświetla się wpadka, która umożliwi użytkownikowi wyłączenie udostępniania lokalizacji w całości lub tylko zaprzestanie udostępniania swojej lokalizacji członkom rozmowy C.

Okna wciskowane

Jeśli okno jest odłączone, użytkownik nie będzie mógł kliknąć przycisku udostępniania lokalizacji, ponieważ okno nie jest już podłączone do rozmowy. Aby rozpocząć udostępnianie lokalizacji nowymi osobami, użytkownik musi ponownie przycisnąć okno.

Wielu kont

Każdy konto ma własną unikalną mapę. Jeśli użytkownik odłączy mapę podczas konty A, a następnie przejdzie na konto B i odłączy mapę, będą widoczne dwie mapy. Mapy dla kont A i B wyświetlą pozycje dzielane z tymi kontami odpowiednio i są całkowicie oddzielne od siebie

Jak to działa?

Wprowadzenie

Ten element jest podzielony na trzy części:

  1. Wysyłanie pozycji

  2. Otrzymanie stanowiska

  3. Wyświetlanie pozycji

Aby określić lokalizację, używany jest API [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html). Po ustaleniu pozycji, jest ona przesyłana jako wiadomość na DHT i przekazywana do klienta. Po otrzymanym pozycji jest następnie wyświetlana za pomocą biblioteki JavaScript [OpenLayers]https://openlayers.org/).

Wysyłanie pozycji

Jak tylko mapa zostanie otwarta, klasa Positioning zajmuje się odzyskiwaniem bieżącej pozycji za pomocą klasy QGeoPositionInfoSource modułu QtPositioning. Pozycja jest następnie konwertowana w format JSON i przesyłana do positionManager. Ta klasa koordynuje cały proces dzielenia się pozycjami. Pozycja jest następnie udostępniana za pośrednictwem funkcji sendPosition() .

  • Lokalnie poprzez localPositionReceived sygnał, dzięki czemu użytkownik może zobaczyć swoją własną pozycję

  • W DHT do wszystkich rozmów w positionShareConvIds_ listy. Ta lista zawiera klucze wszystkich rozmów, z którymi użytkownik chce dzielić się swoją pozycją.

Format JSON pozycji jest następujący:

  • Typ (pozycja lub wiadomość stop)

  • Latynatura

  • Dłużność

  • Czas (nie wykorzystywany przez Klienta QtClient)

Przykład danych: {\"lat\":45.51616583988481,\"dług\":-73.620693,\"czas\":1671658862000,\"typ\":\"Pozycja\"}

Wysyłając pozycję do demona, przekazuje się również URI autora.

Kiedy użytkownik przestaje dzielić się swoją pozycją w rozmowie, identyfikator rozmowy jest po prostu usunięty z listy positionShareConvIds_.

Otrzymanie stanowiska

Po otrzymaniu pozycji uruchomi się slot „onPositionReceived() „. Niezależnie od tego, czy chodzi o pozycję lokalną z modułu QtPositioning, czy pozycję z innego kontaktu. Na poziomie positionManager lista objectListSharingUris_ przechowuje wszystkie pozycje klienta.

  • Dodał (URI nie jest obecny w wykazie)

  • Aktualizowany (URI jest już obecny w wykazie)

  • Usunięte (typ = „Stop”)

Pozycja jest przechowywana w wykazie w postaci obiektu typu positionObject.

Wyświetlanie pozycji

Kiedy pozycja jest otrzymana (slot onPositionReceived() uruchomiona), pozycja jest przesyłana do Qml, który z kolei wysyła informacje do biblioteki JavaScript.