Description
Il s’agit d’un nouveau développement, toujours en C++, d’une série de classes permettant l’import des flux XML d’OSM dans une base locale. Les fonctionnalités attendues sont :
- la lecture de fichiers planet et diffs ;
- le stockage dans une base de données locale ;
- des fonctions « spatiales » (index spatiaux, projections) ;
- un code « portable » sur différents environnements (Windows, Linux, etc.)
Les librairies
Pour éviter de réinventer la roue, voici les librairies existantes sur lesquelles s’appuie ce développement :
- The Expat XML Parser
- Expat est la librarie d’un parseur XML écrite en C. C’est un parseur orienté flux dans lequel une application enregistre des gestionnaires pour les éléments que le parseur peut rencontrer dans le document XML (comme une ouverture de tag). L’un des intérêts de cette librairie est sa légèreté et surtout son fonctionnement sur les flux, ce qui évite de charger en mémoire tout le document XML avant de commencer l’analyse.
- SpatiaLite 2.3.1 a complete Spatial DBMS in a nutshell
- Il s’agit de la librairie d’une base de données spatiale. Elle-même regroupe les fonctionnalités de plusieurs librairies dont :
- SQLite : un moteur de base de données (sans serveur) ;
- Geos : apporte le support du jeu des spécifications OpenGis® au niveau des requêtes SQL ;
- Proj.4 : permet les projections et autres changements de repères géographiques.
Elle permet aussi l’ajout d’index spatiaux sur les éléments géométriques de la base.
Le code source
Il est sous licence LGPLv3 qui n’est pas la meilleure aux yeux de la Free Software Foundation, Inc., mais comme elle plutôt faite pour les librairies, je l’adopte.
Le mieux, c’est de retrouver tout le code sur GitHub à l’adresse : http://github.com/Marcussacapuces91/LibOsm
Par contre, je ne fournis pas le make file. Il faudra le rédiger vous-même suivant votre environnement de développement.
Il vous faudra aussi le fichier init_spatialite-2.3.sql disponible sur le site de SpatiaLite pour initialiser la base de données.
Le modèle de données
Afin de pouvoir utiliser les tables efficacement, il est intéressant de connaitre le modèle de données (le schéma) de la base de données.
- Node (liste des nœuds) ;
- Way
- Relation
- Changeset
Ensuite, j’ai « factorisé » les User (id et nom utilisateur) et les Tags afin d’éviter de multiplier les références dans chaque enregistrement des tables ci-dessus.
