Localización compartida en el cliente QT
¿Cómo usarlo?
Uso trivial
En una conversación, el usuario puede hacer clic en el icono de ubicación para mostrar un mapa. Si Location Services
está habilitado en el dispositivo, se mostrará la posición del usuario en el mapa, junto con las ubicaciones de todos los demás miembros que comparten su ubicación (desde todas las conversaciones de la cuenta seleccionada). El usuario puede activar y desactivar el intercambio de ubicación haciendo clic en los botones de intercambio de ubicación.
Cuando un usuario comparte su ubicación en una conversación, un icono de ubicación rojo aparecerá en el icono de conversación. Si el usuario recibe una ubicación de otro miembro, se mostrará un icono de ubicación naranja en todas las conversaciones en las que el miembro esté presente.
El usuario puede interactuar con el mapa mediante reciclar, acercarse y sacarse, moverlo y cerrarlo. El mapa también puede ser fijado o desfijado. Cuando el mapa está desfijado, se puede replicar si el usuario está en la cuenta correcta. Esta función permite al usuario mantener el mapa visible mientras continúa utilizando Jami.
Uso avanzado
Compartición múltiple
escenario
El usuario ya está compartiendo la ubicación con conversación A y conversación B.
Características
Si el usuario cambia a conversación C, el mapa sigue siendo visible y el usuario tiene dos opciones
Haga clic en el botón de compartir ubicación para compartir ubicación con los miembros de la conversación C.
Haga clic en el botón final de compartir ubicación. Esto aparecerá en un pop-up que permite al usuario desactivar el intercambio de ubicación por completo o dejar de compartir su ubicación con los miembros de la conversación C.
Ventana con pin
Si la ventana está despinta, el usuario no podrá hacer clic en el botón de compartir ubicación porque la ventana ya no está conectada a una conversación. Para comenzar a compartir ubicación con nuevas personas, el usuario debe volver a pinar la ventana. Tenga en cuenta que despinar la ventana no afecta a ningún intercambio de ubicación en curso. Además, hacer clic en el botón final de compartir ubicación mientras la ventana está despinta detendrá todo el intercambio de ubicación actual y no aparecerá ningún pop-up que permita al usuario seleccionar una conversación específica para dejar de compartir con.
Cuentas múltiples
Cada cuenta tiene su propio mapa único. Si el usuario despierta el mapa mientras está en cuenta A, luego cambia a cuenta B y despierta el mapa, dos mapas serán visibles. Los mapas para cuentas A y B muestran las posiciones compartidas con esas cuentas, respectivamente, y están completamente separados entre sí
¿Cómo funciona?
Introducción
Esta característica se divide en tres partes:
Enviando su posición
Recibir un puesto
Muestra una posición
Para determinar la ubicación, se utiliza la API [Qt Positioning]https://doc.qt.io/qt-6/qtpositioning-index.html). Una vez que se determina la posición, se envía como un mensaje en el DHT y se transmite al cliente. La posición recibida se muestra luego utilizando la biblioteca JavaScript [OpenLayers]https://openlayers.org/).
Envío de una posición
Tan pronto como se abre un mapa, la clase Positioning
se encarga de recuperar la posición actual utilizando la clase QGeoPositionInfoSource
del módulo QtPositioning
. La posición se convierte luego en formato JSON y se transmite al positionManager
. Esta clase coordina todo el proceso de intercambio de posiciones. La posición se comparte luego a través de la función sendPosition()
. Se comparte:
Local a través de la señal
localPositionReceived
para que el usuario pueda ver su propia posiciónEn el DHT se encuentran todas las conversaciones en la lista
positionShareConvIds_
. Esta lista contiene las claves de todas las conversaciones con las que el usuario quiere compartir su posición.
El formato JSON de una posición es el siguiente:
Tipo (mensaje de posición o parada)
Latitud
Longoitud
Tiempo (no utilizado por el cliente)
Un ejemplo de datos: {\"lat\":45.51616583988481,\"long\":-73.620693,\"time\":1671658862000,\"type\":\"Posición\"}
Cuando se envía la posición al demonio, también se transmite la URI del autor.
Cuando el usuario deja de compartir su posición con una conversación, el ID de la conversación se elimina simplemente de la lista positionShareConvIds_
. También se envía un mensaje de «stop» a cada participante.
Recibir un puesto
Cuando se recibe una posición, se activa la ranura «onPositionReceived() «. Ya sea una posición local del módulo QtPositioning
o una posición de otro contacto.
Añadido (el URI no está presente en la lista)
Actualizado (el URI ya está presente en la lista)
Eliminación (tipo = «Permisa»)
La posición se almacena en la lista en forma de un objeto del tipo positionObject
. Este tipo permite un perro de vigilancia para cada posición.
Muestra una posición
Cuando se recibe una posición (slot onPositionReceived()
activado), la posición se transmite a Qml que a su vez envía la información a la biblioteca JavaScript [https://openlayers.org/] ]]. El módulo Qt WebEngine
permite el puente entre la tecnología web de la biblioteca y Qml. Cada posición se representa por una capa añadida al mapa. La función newPosition()
agrega una nueva capa, la función updatePosition()
actualiza las coordenadas de la capa, y la función removePosition()
elimina la capa.