Archives de février, 2012:
Google Fusion Table, OGR et QGIS
Google Fusion Table, OGR et QGIS : trois projets a priori indépendant, même si nous savons que derrière QGIS se cache la bibliothèque GDAL/OGR. Mais celle-ci est généralement sous estimée, notamment ses possibilités de virtualisation de données (raster ou vecteur). Entre autre chose cela permet à QGIS de pouvoir lire tous les formats de données gérés par GDAL/OGR même si elles ne sont pas listés dans les formats gérés ou qu’elles demandent des étapes intermédiaires (comme pour le format NetCDF).
Google Fusion Table (GFT) est une application Google lié plus ou moins à leur Google Doc, le tableur en particulier. En effet Google propose une feuille calc dans laquelle nous pouvons définir plusieurs colonnes, donc une spéciale, appelée Location qui contient une adresse ou une géométrie (KML par exemple).
GDAL/OGR gère le format GFT depuis sa version 1.9 (toute récente). Cet article a pour but de présenter quelques fonctionnalités et comment utiliser, simplement, un GFT au sein de QGIS (ou de MapServer bien sur).
Il y a quelques temps j’ai créé une feuille test_shapefile composée de quelques colonnes : nom, prénom, location (une adresse), et quelques informations diverses. Je peux me connecter à cette feuille via ogr comme cela :
[sourcecode language= »bash »]
yves@poseidon-vb:~$ ogrinfo -ro "GFT:email=yjacolin@gmail.com password=XXXXXX"
INFO: Open of `GFT:email=yjacolin@gmail.com password=XXXXXX’
using driver `GFT’ successful.
1: test_shapefile
[/sourcecode]
Mais entrer un mot de passe en clair n’est pas très sécurisé, Google proprose de récupérer une clé d’authentification, que l’on peut modifier enfin je suppose) :
[sourcecode language= »bash »] $ ogrinfo –config CPL_DEBUG ON "GFT:email=yjacolin@gmail.com password=XXXXXX" HTTP: Fetch(https://www.google.com/accounts/ClientLogin) HTTP: These HTTP headers were set: Content-Type: application/x-www-form-urlencoded GFT: Auth key : MACLéICI-LONGUE_DE_PLUSIEURS_CARACTèRES GFT: Run SHOW TABLES [..] [/sourcecode]
Puis, sous linux, nous utilisons une variable d’environnement pour définir la clé (d’autres possibilités existent en plus du mot de passe en clair et de la clé d’authentification, référez vous à la documentation du pilote GFT de GDAL/OGR (voir bibliographie plus bas) :
[sourcecode language= »bash »]</code> export GFT_AUTH=MACLéICI-LONGUE_DE_PLUSIEURS_CARACTèRES[/sourcecode]
On teste la prise en compte de la clé d’authentification :
[sourcecode language= »bash »]</code>ogrinfo -ro "GFT:"[/sourcecode]
J’exporte ma table en shapefile :
[sourcecode language= »bash »]ogr2ogr -f "Esri Shapefile" test_shapefile "GFT:tables=1jfYFX051Gbq5JU7Fd-Yxd_Q4aPDslDwDypsm3VU"[/sourcecode]
Puis j’importe une couche – différente – au format shapefile :
[sourcecode language= »bash »]</code>ogr2ogr -f GFT "GFT:" point_etude.shp[/sourcecode]
Pour visualiser ces données dans QGIS ou MapServer j’ai besoin de virtualiser ma couche GFT au moyen du format VRT vecteur.
Création du fichier vrt :
[sourcecode language= »xml »]
<OGRVRTDataSource>
<OGRVRTLayer name="point_etude">
<SrcDataSource>GFT:</SrcDataSource>
<SrcLayer>1SWEVgpny8Ojh-dzJEURhhEJVVa44Vnitey3DRhk&pli=1</SrcLayer>
<LayerSRS>WGS84</LayerSRS>
</OGRVRTLayer>
</OGRVRTDataSource>
[/sourcecode]
puis j’utilise ce fichier vrt pour vérifier que je me connecter correctement à ma couche GFT :
[sourcecode language= »bash »]
ogrinfo -so point_etude.vrt point_etude
INFO: Open of `point_etude.vrt’
using driver `VRT’ successful.
Layer name: point_etude
Geometry: Unknown (any)
Feature Count: 1500
Extent: (-5.974657, 40.712886) – (9.572308, 52.068039)
Layer SRS WKT:
GEOGCS["WGS 84",
DATUM["WGS_1984",
SPHEROID["WGS 84",6378137,298.257223563,
AUTHORITY["EPSG","7030"]],
TOWGS84[0,0,0,0,0,0,0],
AUTHORITY["EPSG","6326"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.0174532925199433,
AUTHORITY["EPSG","9108"]],
AUTHORITY["EPSG","4326"]]
ID: Real (0.0)
geometry: String (0.0)
[/sourcecode]
Les géométries sont affichées comme celles-ci :
[sourcecode language= »bash »]
OGRFeature(point_etude):1425
ID (Real) = 1423
geometry (String) = <Point><coordinates>-3.443027539873455,47.169053485738431</coordinates></Point>
POINT (-3.443027539873455 47.169053485738431)
OGRFeature(point_etude):1426
ID (Real) = 1424
geometry (String) = <Point><coordinates>8.270853712116637,45.104331014323307</coordinates></Point>
POINT (8.270853712116637 45.104331014323307)
OGRFeature(point_etude):1427
ID (Real) = 1425
geometry (String) = <Point><coordinates>3.631323682505393,46.460888984293931</coordinates></Point>
POINT (3.631323682505393 46.460888984293931)
[/sourcecode]
Enfin l’export fonctionne :
[sourcecode language= »bash »]ogr2ogr -f "Esri Shapefile" test.shp point_etude.vrt point_etude[/sourcecode]
La visualisation au sein de QGIS se fait simplement en ouvrant le fichier vrt comme tout format de données vecteur.
Conclusion
Le format Google Fusion Table est un format intéressant, l’interface avec un format vrt permet de s’y connecter avec toute application s’appuyant avec GDAL/OGR comme QGIs ou MapServer mais le principale intérêt aurait été de pouvoir géocoder ses adresses au moyen de GFT et de pouvoir s’en service comme source de données. Malheureusement GFT ne permet que de géocoder ses adresses et de les visualiser dans une carte Google Map ou Google Earth. Il est impossible de sauver le géocodage dans une colonne dans un format WKT par exemple.
Si cette limitation ne vous pose pas de problème, vous pouvez stocker vos couches sur les serveurs de Google au format GFT et les lire dans QGIS/MapServer.
Bibliographie
- Le pilote GFT dans OGR : version anglaise ou la version française
- Le pilote VRT dans OGR : version anglaise ou version française
- Guide du développeur de Google Fusion Table