Locatie delen op QT-client

Hoe moet ik het gebruiken?

Triviaal gebruik

In een gesprek kan de gebruiker klikken op het locatiesymbool om een kaart te weergeven. Als Location Services is ingeschakeld op het apparaat, wordt de positie van de gebruiker op de kaart weergegeven, samen met de locaties van alle andere leden die hun locatie delen (van alle gesprekken van het geselecteerde account). De gebruiker kan locatie delen aan en uitzetten door op de locatie delen knoppen te klikken.

Wanneer een gebruiker zijn locatie in een gesprek deelt, verschijnt er een rood locatie-icon op het conversie-icon. Als de gebruiker een locatie ontvangt van een ander lid, wordt er een oranje locatie-icon weergegeven op alle gesprekken waarin het lid aanwezig is.

De gebruiker kan met de kaart communiceren door te recenteren, te zoomen, te verplaatsen en te sluiten. De kaart kan ook worden gepinned of ongepinned worden. Wanneer de kaart is ongepinned, kan deze worden heropinned als de gebruiker zich in het juiste account bevindt.

Geavanceerd gebruik

Meervoudig delen

scenario

De gebruiker deelt al de locatie met gesprek A en gesprek B.

Feature

Als de gebruiker overstapt naar gesprek C, is de kaart nog steeds zichtbaar en heeft de gebruiker twee opties

  1. Klik op de knop om ook de locatie te delen met de leden van gesprek C.

  2. Klik op de eindknop voor het delen van locatie. Hierdoor komt een pop-up naar boven waarmee de gebruiker de locatie-deling volledig kan uitschakelen of alleen de locatie met de leden van het gesprek C kan stoppen.

Verstopt raam

Als het venster is ontkoppeld, kan de gebruiker niet op de locatie-deelknop klikken omdat het venster niet meer is aangesloten op een gesprek. Om te beginnen met het delen van locatie met nieuwe mensen, moet de gebruiker het venster opnieuw pin. Merk op dat het ontkoppelen van het venster geen invloed heeft op het aanhoudend delen van locatie.

Meervoudige rekeningen

Elke account heeft zijn eigen unieke kaart. Als de gebruiker de kaart ontpint terwijl hij op account A is, dan schakelt hij naar account B en ontpint hij de kaart, zijn er twee kaarten zichtbaar. De kaarten voor accounts A en B tonen respectievelijk de posities die met die accounts worden gedeeld en zijn volledig gescheiden van elkaar

Hoe werkt het?

Inleiding

Deze functie is verdeeld in drie delen:

  1. Zend je positie

  2. Een positie ontvangen

  3. Vertoon van een positie

Om de locatie te bepalen, wordt Qt Positioning API gebruikt. Zodra de positie is bepaald, wordt deze als een bericht op de DHT verzonden en wordt deze aan de client verzonden. De ontvangen positie wordt vervolgens weergegeven met behulp van de JavaScript-bibliotheek [OpenLayers] ((https://openlayers.org/)

Positie verzenden

Zodra een kaart is geopend, zorgt de Positioning-klasse voor het terugvinden van de huidige positie met behulp van de QGeoPositionInfoSource-klasse van de QtPositioning-module. De positie wordt vervolgens omgezet in JSON-formaat en wordt overgedragen naar de positionManager. Deze klasse coördineert het hele positiedelingsproces. De positie wordt vervolgens gedeeld via de sendPosition() -functie.

  • Lokaal via het localPositionReceived-signaal zodat de gebruiker zijn eigen positie kan zien

  • Op de DHT naar alle gesprekken in de positionShareConvIds_ lijst. Deze lijst bevat de sleutels van alle gesprekken waarmee de gebruiker zijn positie wil delen.

Het JSON-formaat van een positie is als volgt:

  • Type (positie- of stopmelding)

  • Breedtegraad

  • Langeterstand

  • Tijd (niet door de QtClient gebruikt)

Een voorbeeld van gegevens: {\"lat\":45.51616583988481,\"long\":-73.620693,\"time\":1671658862000,\"type\":\"Positie\"}

Bij het sturen van de positie aan de daemon wordt ook de URI van de auteur doorgegeven.

Wanneer de gebruiker stopt met het delen van zijn positie met een gesprek, wordt de ID van het gesprek eenvoudigweg verwijderd uit de lijst positionShareConvIds_.

Een positie ontvangen

Wanneer een positie wordt ontvangen, wordt de slot ‘onPositionReceived()’ geactiveerd. Of het nu gaat om een lokale positie uit de QtPositioning module of een positie uit een ander contact. Op het niveau positionManager, de objectListSharingUris_ lijst opslaat alle posities van de klant.

  • Gevoegd (de URI is niet aanwezig in de lijst)

  • Geactualiseerde (de URI is al aanwezig in de lijst)

  • Verwijderd (type = “Stop”)

De positie wordt opgeslagen in de lijst in de vorm van een object van het type positionObject.

Vertoon van een positie

Wanneer een positie wordt ontvangen (slot onPositionReceived() wordt geactiveerd), wordt de positie overgedragen aan Qml die op zijn beurt de informatie naar de [OpenLayers]https://openlayers.org/) JavaScript bibliotheek stuurt.