Localizzazione condivisione sul cliente QT
Come usarlo?
Uso banale
In una conversazione, l’utente può fare clic sull’icona della posizione per visualizzare una mappa. Se Location Services
è abilitato sul dispositivo, la posizione dell’utente verrà mostrata sulla mappa, insieme alle località di tutti gli altri membri che condividono la loro posizione (da tutte le conversazioni dell’account selezionato). L’utente può attivare e spegnere la condivisione della posizione facendo clic sui pulsanti di condivisione della posizione.
Quando un utente condivide la propria posizione in una conversazione, sull’icona della conversazione appare un’icona di posizione rossa. Se l’utente riceve una posizione da un altro membro, viene visualizzata un’icona di posizione arancione su tutte le conversazioni in cui il membro è presente.
L’utente può interagire con la mappa recernendo, avvicinando e avvicinando, spostando e chiudendola. La mappa può anche essere pinnata o dispinata. Quando la mappa è dispinata, può essere ripinnata se l’utente è nel giusto account. Questa funzione consente all’utente di mantenere la mappa visibile mentre continua a usare Jami.
Uso avanzato
Multicoparticipazione
scenario
L’utente sta già condividendo la posizione con la conversazione A e la conversazione B.
Caratteristica
Se l’utente passa alla conversazione C, la mappa è ancora visibile e l’utente ha due opzioni
Fai clic sul pulsante condivisione della posizione per condividere anche la posizione con i membri della conversazione C.
Clicca sul pulsante di fine condivisione della posizione. Questo farà emergere una finestra che consente all’utente di disattivare completamente la condivisione della posizione o di smettere di condividere la propria posizione con i membri della conversazione C.
Finestra con pin
Se la finestra è disattaccata, l’utente non potrà fare clic sul pulsante condivisione della posizione perché la finestra non è più connessa a una conversazione. Per iniziare a condividere la posizione con nuove persone, l’utente deve rinfonzare la finestra.
Conti multipli
Ogni account ha una propria mappa unica. Se l’utente dischiude la mappa mentre è in account A, quindi passa al account B e dischiude la mappa, saranno visibili due mappe. Le mappe per gli account A e B visualizzano le posizioni condivise con questi account, rispettivamente, e sono completamente separate l’una dall’altra
Come funziona?
Introduzione
Questa caratteristica è suddivisa in tre parti:
Inviando la propria posizione
Ricevere una posizione
Mostra una posizione
Per determinare la posizione, viene utilizzata l’API [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html). Una volta determinata la posizione, viene inviata come messaggio sul DHT e trasmessa al cliente. La posizione ricevuta viene quindi visualizzata utilizzando la libreria JavaScript [OpenLayers]https://openlayers.org/).
Invio di una posizione
Appena aperta una mappa, la classe Positioning
si occupa di recuperare la posizione corrente utilizzando la classe QGeoPositionInfoSource
del modulo QtPositioning
. La posizione viene quindi convertita in formato JSON e trasmessa al positionManager
. Questa classe coordina l’intero processo di condivisione della posizione. La posizione viene poi condivisa attraverso la funzione sendPosition()
. È condivisa:
Locali attraverso il segnale
localPositionReceived
in modo che l’utente possa vedere la propria posizioneIl DHT è disponibile su
positionShareConvIds_
lista. Questa lista contiene le chiavi di tutte le conversazioni con cui l’utente vuole condividere la propria posizione. Da questa chiave, vengono ottenuti gli URI di tutti i partecipanti e un messaggio di posizione viene inviato a ciascun partecipante.
Il formato JSON di una posizione è il seguente:
Tipo (messaggio di posizione o di fermo)
Latitudine
Lungo-titudine
Tempo (non utilizzato dal QtClient)
Un esempio di dati: {\"lat\":45.51616583988481,\"long\":-73.620693,\"time\":1671658862000,\"type\":\"Position\"}
Quando si invia la posizione al demone, viene trasmesso anche l’URI dell’autore.
Quando l’utente smette di condividere la propria posizione con una conversazione, l’ID della conversazione viene semplicemente rimosso dalla lista positionShareConvIds_
. Un messaggio di «stop» viene inviato anche a ogni partecipante.
Ricevere una posizione
Quando una posizione viene ricevuta, viene attivato il slot «onPositionReceived() » Che si tratti di una posizione locale dal modulo QtPositioning
o di una posizione da un altro contatto.
Aggiunto (l’URI non è presente nell’elenco)
Aggiornato (l’URI è già presente nell’elenco)
Deletto (tipo = «Stop»)
La posizione è memorizzata nell’elenco sotto forma di oggetto di tipo positionObject
. Questo tipo consente di avere un cane da guardia per ogni posizione.
Mostra una posizione
Quando viene ricevuta una posizione (slot onPositionReceived()
attivata), la posizione viene trasmessa a Qml che a sua volta invia le informazioni alla libreria JavaScript [https://openlayers.org/]. Il modulo Qt WebEngine
consente di creare il ponte tra la tecnologia web della biblioteca e Qml. Ogni posizione è rappresentata da uno strato aggiunto alla mappa.