De plus en plus on a une cohabitation d’ArcGis avec QGis. On garde ArcGis pour les opérations lourdes et on utilise QGis pour le travail plus léger, même si QGis est tout à fait capable d’assumer beaucoup plus que cela. Gratuit, plus facile à prendre en main, QGis sera plus utilisé pour des applications portables. Mais reste toujours le souci de partager les données entre ces deux logiciels. Pour bien travailler avec ArcGis on utilise les geodatabases, mais il n’est pas possible d’y accéder à ce type de données à partir de QGis. On opte alors par un export en shapefile qui lui, est accessible sans problème par les deux logiciels. Sauf que ce format, vieux de plus de 30 ans, pose pas mal de problèmes. Nous allons voir dans cet article une option un peu méconnue, l’utilisation de bases de données Spatialite, pour communiquer entre les deux logiciels.
Si vous voulez, avant tout, savoir pourquoi il vaut mieux utiliser SpatiaLite au lieu d’un fichier shapefile, allez directement au paragraphe Pourquoi pas un shapefile?. Vous reviendrez ici par la suite.
Avec QGis, nous avons déjà vu commet travailler avec les bases de données SpatiaLite (Tutoriel bases de données SpatiaLite sous QGis 2.8 Wien). Pour les utilisateurs d’ArcGis, au risque de les surprendre, il faut dire que le format SpatiaLite est bien supporté par ArcGis depuis la version 10.2.
Qu’est ce que SpatiaLite?
SpatiaLite est un projet Open Source de gestion de données spatiales, construit au-dessus de la plateforme SQLite.
Voici un extrait de l’article SQLite de Wikipedia:
« SQLite est une bibliothèque écrite en C qui propose un moteur de base de données relationnelle accessible par le langage SQL. SQLite implémente en grande partie le standard SQL-92 et des propriétés ACID.
Contrairement aux serveurs de bases de données traditionnels, comme MySQL ou PostgreSQL, sa particularité est de ne pas reproduire le schéma habituel client-serveur mais d’être directement intégrée aux programmes. L’intégralité de la base de données (déclarations, tables, index et données) est stockée dans un fichier indépendant de la plateforme.
D. Richard Hipp, le créateur de SQLite, a choisi de mettre cette bibliothèque ainsi que son code source dans le domaine public, ce qui permet son utilisation sans restriction aussi bien dans les projets open source que dans les projets propriétaires. Le créateur ainsi qu’une partie des développeurs principaux de SQLite sont employés par la société américaine Hwaci1.
SQLite est le moteur de base de données le plus distribué au monde, grâce à son utilisation dans de nombreux logiciels grand public comme Firefox, Skype, Google Gears, dans certains produits d’Apple, d’Adobe et de McAfee et dans les bibliothèques standards de nombreux langages comme PHP ou Python. De par son extrême légèreté (moins de 300 Kio2), il est également très populaire sur les systèmes embarqués, notamment sur la plupart des smartphones modernes : l’iPhone ainsi que les systèmes d’exploitation mobiles Symbian et Android l’utilisent comme base de données embarquée3. Au total, on peut dénombrer plus d’un milliard de copies connues et déclarées de la bibliothèque » (Voir la totalité de l’article)
Que faire pour pouvoir utiliser Spatialite?
RIEN! Il n’y a ni installation ni configuration. Vous pouvez créer et utiliser des bases de données Spatialite à partir d’ArcGis ou QGis, sans rien faire de particulier.
Créer une base de données SpatiaLite sous ArcGis
On utilisera la console Python pour créer la base de données SpatiaLite.
Ouvrez la console Python en cliquant sur l’icône
Tout d’abord on va définir le nom de la base de données à créer (argistest.sqlite) dans une variable (sqlite_database)
Tapez la commande suivante dans la fenêtre
sqlite_database = ‘C:/qgis/arcgistest.sqlite’
Ensuite, on crée effectivement la base de données avec la commande suivante :
arcpy.gp.CreateSQLiteDatabase(sqlite_database, “SPATIALITE”)
Voilà! La base de données est créée contenant toutes les tables et vues nécessaires à sa gestion.
Attention! Le paramètre « SPATIALITE » doit obligatoirement être utilisé si vous voulez communiquer avec QGis ou tout autre logiciel. L’autre option, « ST_GEOMETRY » est spécifique à ArcGis et la geométrie des tables créées ne sera pas lue par QGis ou les autres logiciels.
Maintenant que la base est créée vous pouvez l’utiliser de manière standard, avec la fenêtre catalogue, pour importer des données dans la base.
Pourquoi pas un fichier shapefile?
Une démonstration valant mieux qu’un long discours, voilà un petit exemple regroupant trois raisons pour ne pas utiliser un shapefile comme format intermédiaire.
Voici une classe d’entités de geodatabase. Elle contient 4 attributs:
Date_et_heure_prelevement, de type DATE
3 champs resultat_xxx de type float
La même table, après un export en shapefile donne:
Cherchez la différence!
1- Les noms de champ sont tronqués et modifiés. Ici on n’a que trois champs, mais quand il y en a beaucoup, s’y retrouver est compliqué. D’autre part, si le fichier shapefile doit être récupéré après traitement, par exemple après correction ou mise à jour par des utilisateurs, vous serez obligé de faire manuellement la correspondance de chaque champ du shapefile avec les champs de la geodatabase.
2- Les valeurs null des attributs numériques, indiquant qu’il n’y a pas de mesure, sont transformés en 0. Mais 0 est une valeur possible de mesure. Vous n’avez plus aucun moyen de savoir si l’analyse n’a trouvé aucune trace du produit ou si l’analyse n’a pas eu lieu. Cette modification est donc irréversible.
3- Même si le champ s’appelle date et heure, vous n’avez plus que la date et vous avez perdu l’heure. La version sql utilisée par les fichiers dbf (ceux utilisés dans les shapefiles) ne supporte que la partie jour-mois-année de la date. Vos heures et minutes sont définitivement passés à la trappe, et c’est irréversible.
Voici le résultat de l’import de la classe d’entités dans une base SpatiaLite:
Cherchez à nouveau la différence…
Il n’y en a pas!!
Les champs gardent leur nom, les valeurs null sont respectées, la date contient bien l’heure.
Ceux-ci n’étaient que trois exemples de problèmes, mais il y en a d’autres. Pourquoi se priver de cette solution?
Dans QGis il suffit maintenant de cliquer droit sur Spatialite, et connecter la base créée avec ArcGis.
Vous pouvez alors charger la couche dans la fenêtre cartographique, ouvrir la table attributaire, etc…