Ayant réussi à faire fonctionner une clé 4G sous GNU/Linux, nous avons voulu exploiter plus cette clé. Ainsi, nous avons mis en place une méthode uniquement basée sur des outils libres pour générer une carte de la couverture 4G.
Tout d'abord nous nous sommes renseignés sur les différentes commandes AT existantes. Nous avons ainsi trouvé la commande AT+CSQ qui retourne une valeur en lien avec le gain de la clé 4G ainsi qu'un indicateur de précision.
Notre démarche s'est déroulée en plusieurs étapes, d'abord la conception d'un script (en python) capable d'envoyer la commande AT et de récupérer le résultat ainsi que la position d'un GPS.
L'idée été aussi d'utiliser les moyens du bord et de ne rien dépenser, nous avons donc utilisé le GPS d'un smartphone sous Android.
Enfin, nous avons testé ce script sur le parking des locaux de Maison du libre. Une fois la méthode d’acquisition opérationnelle nous sommes partis en voiture.
Nous avons ensuite traité les données et transmis ces données sur un serveur de cartographie (geoserver), avec lequel nous avons pu générer une heatmap.
L'objectif était d'avoir une latitude et une longitude en python via GPSD qui met en forme les trames GPS récupérées sur un port série. Ici le port série est l'interface bluetooth avec laquelle on relie l'ordinateur au GPS du téléphone.
Plus d'informations et de détails sur la mise en place d'un tel procédé sont disponibles dans cette documentation que nous avons rédigée pour l'occasion : Utilisation du GPS d'un Android sous Ubuntu
Le code utilisé est une interface rapide qui se contente de récupérer les information GPS grâce a la librairie fournie avec gpsd et et utiliser les commande AT du port série pour récupérer le gain. Le scripte ne connecte pas le téléphone en Bluetooth ni la clée 4G.
mapping4g.tar.gz
La clé 4G tout comme le GPS apparaît sous forme d'un port série. On utilise la librairie “serial” en python pour obtenir le gain à l'aide de la commande AT.
Nous avons opté pour un format simple et efficace, le csv. Voici un extrait d'une de nos acquisitions :
id,lat,long,value,date 1,48.406221417,-4.46715035,22,03/07/12 16:37 2,48.406221417,-4.4671503,22,03/07/12 16:37 3,48.4062214,-4.467150233,22,03/07/12 16:37 ........
Value contient donc la valeur retournée par la commande AT (avant la virgule). Ce document montre la relation entre les 2.
La formule de conversion est relativement simple : dBm = -113 + N * 2 (N représente la valeur retournée par AT+CSQ)
En cas de non réception de signal (clé 4G déconnectée), la valeur retournée sera 99, nous avons pour les besoins de la heatmap décidé de remplacer cette valeur par -1.
Pour importer ces données sur notre serveur de cartographie geoserver (dont nous ne détaillerons pas l'installation ici), vous aurez besoin de shapeFiles avec une projection google mercator (EPSG:900913).
Nous avons besoin de cette projection pour pouvoir superposer la heatmap sur un fond de carte google ou Open Street Map (OSM) qui utilisent aussi cette projection.
Installez qgis en suivant la documentation d'ubuntu-fr.
Lancez QGis, rendez vous dans Extensions → Gestionnaire D'extensions. Cochez ajouter une couche de texte délimité.
Ensuite rendez vous dans Couche → Ajouter une couche de texte délimité.
Sélectionnez votre csv et configurez rapidement le reste, vous pouvez vérifier que c'est bon à l'aide de l'échantillon de données.
Maintenant on exporte en shapefiles :
Choisissez ensuite un dossier ainsi qu'un nom de fichier :
Il ne reste plus qu'un problème à régler avant d'envoyer les shapefiles sur geoserver.
En effet, pour pouvoir superposer 2 couches, ces couches doivent avoir les mêmes projections. Ici vos données ont une projection WGS84 alors qu'OSM a une projection EPSG:900913.
Pour effectuer la conversion vers la projection Google Mercator, rien de plus simple nous utiliserons les commandes fournies par GDAL :
ogr2ogr 1_2_3_4_5_6shpMercator.shp 1_2_3_4_5_6shp.shp -t_srs EPSG:900913
Vous pouvez ensuite vérifier la descriptions de la projection :
$ ogrinfo 1_2_3_4_5_6shpMercator.shp -al -so Layer SRS WKT: PROJCS["Google_Maps_Global_Mercator", GEOGCS["GCS_WGS_1984", DATUM["WGS_1984", SPHEROID["WGS_1984",6378137,298.257223563]], PRIMEM["Greenwich",0], UNIT["Degree",0.017453292519943295]], PROJECTION["Mercator_2SP"], PARAMETER["standard_parallel_1",0], PARAMETER["latitude_of_origin",0], PARAMETER["central_meridian",0], PARAMETER["false_easting",0], PARAMETER["false_northing",0],
Vous devez transférer tous les fichiers du shapefile sur votre serveur (si ce n'est pas la même machine).
Ensuite cliquez sur “Import Data” → “ShapeFiles” :
Ensuite sélectionnez le bon shapefile (le mercator).
Enfin vous devez re-déclarer la projection (SRS) :
Voilà c'est dans geoserver avec la bonne projection.
Nous avons utilisé le plugin AcidMaps pour geoserver, la prise en mains de ce plugin n'est pas évidente (nous ne le maîtrisons pas encore bien aujourd'hui).
Au niveau installation, je vous renvoie vers le site/dépôt du plugin : https://github.com/XoomCode/AcidMaps
Depuis les dépôts, j'ai téléchargé le client flex, que vous trouverez dans le dossier AcidMaps/flex/demo/AcidMapFlexClient/bin-debug/, lancez-le dans un niveau et configurez-le avec votre couche.
L'application flash n'est pas vraiment pratique car il est impossible de sauvegarder les modifications des paramètres.
Voici donc la marche à suivre pour accéder à nos données :