Table des matières

Cartographie de la couverture 4G

Introduction

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.

Développement du script d'acquisition des données

Partie GPS

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

Et en python

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

Partie gain 4G

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.

Préciser plus cette partie là, surtout le format de message retourné par la commande

Format des acquisitions

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)

Traitement des données

Zone de non réception

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.

Conversion en shapeFiles

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 ExtensionsGestionnaire D'extensions. Cochez ajouter une couche de texte délimité.

 Activer l'extension

Ensuite rendez vous dans CoucheAjouter une couche de texte délimité.

Bouton d'import du CSV

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.

Config du CSV

Vous devez sélectionner WGS84 comme système de coordonnées ici car c'est celui de votre GPS (défini avec le méridien de Greenwich)  Projection

Maintenant on exporte en shapefiles :  Export en shapefiles

Choisissez ensuite un dossier ainsi qu'un nom de fichier : Config de l'export

Cette documentation n'est pas finie, nous utiliserons ensuite GDAL pour projeter les points du shapefiles en Google Mercator ainsi qu'une astuce pour les importer sans erreur sur geoserver

Une histoire de projections

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],
Quand j'écris cette documentation, geoserver n'accepte pas la description de la projection, l'astuce que j'ai trouvée est de remplacer le fichier de projection (.prj) par celui çi.

L'import dans geoserver

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” :  Import geoserver shapefiles

Ensuite sélectionnez le bon shapefile (le mercator).

Enfin vous devez re-déclarer la projection (SRS) :

 re-déclarer la proj

Voilà c'est dans geoserver avec la bonne projection.

La heatmap

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.

Nos résultats

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 :