11 Localisation des utilisateurs et utilisation
Dorian HODIN edited this page 2 years ago

Récupérer la localisation

Autorisation Android et IOS

Android

Afin de pouvoir récupérer les coordonnées des utilisateurs, nous avons du utiliser le module geolocator de Flutter, qui permet justement de récupérer les coordonées GPS de l'appareil. Cependant, il faut autoriser l'application à acceder à la localisation de l'appareil. Pour cela, sur Android, il fallait modifier le AndroidManifest.xml, et ajouter ces deux lignes au dessus de la balise <application> :

 <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

Ces lignes permettent d'autoriser l'application à demander l'autorisation. Une fois ces lignes ajoutées, quand on ouvre l'application, cette dernière nous demande si on autorise l'application à acceder à la localisation. Une fois qu'on clique sur oui, le module geolocator récupére les coordonées GPS exactes de l'appareil.

IOS

Sur IOS, la démarche est la même que celle pour Android, il faut seuelement modifier un autre fichier, qui s'appelle Info.plist. Dans ce fichier, il faut ajouter, à la fin du fichier avant les fermetures des balises <dict> et <plist>, les lignes qui suivent :

 <key>NSLocationWhenInUseUsageDescription</key>
 <string>This app needs access to location when open.</string>

 <key>NSLocationAlwaysUsageDescription</key>
 <string>This app needs access to location when in the background.</string>

 <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
 <string>This app needs access to location when open and in the background.</string>

Une fois ces lignes ajoutées, l'application peut demander à son utlisateur d'accorder l'accès à la localisation de son appareil.

Liste des utilisateurs proches

PHP

Une fois ces coordonnées GPS récupérées, nous les envoyons sur un algorithme en PHP qui tourne sur un server Web. Cet algorithme permet de récuperer les données du code Flutter et de les envoyés sur PhpMyAdmin, un service web permettant de créer des bases de données et de les utiliser grâce à des scripts PHP. Sur cette base de données, nous envoyons l'ID de l'utilisateur qui a envoyé ses coordonnées, sa latitude et sa longitude. Une fois ces trois données stockées, un autre script PHP, executé par une fonction Flutter getData(), récupère ces données et les comparent afin de renvoyer la distance en mètres en ces deux coordonées.

Comparaison des données

Pour comparer deux coordonées GPS, nous avons pris un calcul sur Internet afin de determiner la distance en mètre entre deux points GPS. Pour ce calcul, nous convertissons tout d'abord les longitudes et latitudes en radian. Ensuite, nous effectuons différents calculs que nous même nous se serons pas justifier (sinus et cosinus, racine carré et utilisation du rayon de la Terre pour donner la distance finale en mètre). Après cela, cette fonction nous renvoie une distance en mètre.

Nous avons donc codé une fonction qui se connecte à la base de données, detecte quel utilisateur execute ce algorithme, et renvoie la liste de tout les utilisateurs autre que lui même à moins de 100 mètres de son appareil, en appelant la fonction qui calcul cette distance expliquée ci-dessus. La liste qui est renvoyé contient les ID des utilisateurs proches.

En moyenne, un piéton effectue 100 mètres en 1 minute 12. Nous allons donc actualiser l'algorithme pour qu'il s'actualise toute les 1 minute 12 secondes. Cependant, l'application est aussi fait pour le tram. Un tram met en moyenne 1 minute 32 secondes entre deux arrêts, et en moyenne il y a 475 mètres entre deux arrêts. Par conséquent, il parcourt 100 mètres en 20 secondes. Par conséquent, nous devrons actualiser l'algorithme toute les 20 secondes si l'utilisateur est en tram. Afin de récupérer les informations nous demanderons à l'utilisateur son moyen de déplacement au lancement de l'application.