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
Kliknij przycisk udostępniania lokalizacji, aby udostępnić również lokalizację członkom rozmowy C.
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:
Wysyłanie pozycji
Otrzymanie stanowiska
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.