Cadre et développement logiciel en géomatique Fonctionnalités d’entrées/sorties de données géospatiales dans l’outil ETL GeoKettle Projet présenté par Jean Mathieu aux professeurs Thierry Badard et Frédéric Hubert
ETL ETL (Extract, Transform and Load) Extrait les données de différentes sources Transforme ces donneés pour en corriger les erreurs, les conformer à des normes ou restructurer leur contenu pour respecter un schéma voulu Charge les données dans l’entrepôt de données Gère à la fois l’insertion et la mise à jour de données
GeoKettle Intégration de données issues de différentes sources Version spatiale de Pentaho data integration (Kettle) Objects géométriques basés sur JTS topology suite Librairie GeoTools (fonctionnalités d’entrées/sorties) Open source
Fonctionnalités Geokettle Bases de données: PostGIS (Lecture/Écriture) Oracle Spatial (Lecture/Écriture) MySQL Spatial (Lecture/Écriture) Fichiers: ShapeFile (ESRI) (Lecture)
Mandat Géography Markup Language (GML) (Lecture) MapInfo (Lecture) WFS (Lecture) ShapeFile (Écriture) Tâches optionnelles: TIGER (Lecture) ArcSDE (Lecture)
Choix technologiques GeoTools (version 2.5.1): Shapefile - an ESRI shapefile (R/W) GML - Geography Markup Language (R) WFS - Features from an OGC Web Feature Server (RW) ArcSDE - ESRI's middleware for spatial databases (R) Tiger - Topologically Integrated Geographic Encoding and Referencing developed at the US Census Bureau (R) MapInfo - MIF (Mapinfo Interchange Format) (RW) (work in progress)
Choix technologiques GeoKettle (version 3.1.0) Language : Java JTS Eclipse : open source
Méthodologie Analyser le fonctionnement de GeoKettle Cibler les classes et endroits ou auront lieu les changements. Explorer les options offertes par Geotools
Fonctionnement de GeoKettle Classes ciblées GISFileInputDialog : Boite de dialogue GeotoolsReader : Fonctions de lecture GISFileInput : processus principal
Fonctionnement de GeoKettle Classe GISFileInputDialog SWT Récupère le nom de fichier, son extension et autres paramètres
Fonctionnement de GeoKettle Classe GeoToolsReader Fonctions d’ouverture/fermeture des fichiers Récupération des lignes et champs
Fonctionnement de GeoKettle Classe GISFileInput - Processus principal (« RUN ») - Appel des fonctions du lecteur - Instanciation de l’entrepôt de données
MapInfo (Lecture) Abandonné Géotools ne supporte pas ce format public class MIFDataStore extends AbstractDataStore Module: modules/unsupported/mif (gt-mif.jar) (Maven report) (SVN head)
Solutions Librairie OGR(GDAL C++) et java binding? (should be considered unsupported, no bindings maintainer) Utiliser les librairies d’applications acceptant ce format comme OpenJump et se servir de ces logiciels pour tester son utilisation.
GML (Lecture) À faire Ajouter dans la classe GeotoolsReader une fonction détectant le format du fichier d’entrée pour ensuite choisir le bon DataStore
GML Encodage de l’URL Problèmes nombreux reliés au schéma Tentatives avec plusieurs fichiers différents Très(trop) stricte quand à la forme du fichier VS le nombre de formes possibles de ce format Problèmes critiques SAXException durant le «parsing» Processus jamais arrêté…
Solutions OpenJump et UDIG supportent ce format…mais semblent également être capricieux après quelques essais. Librairie GeoRSS comporte des fonctions pouvant lire ce format. Revoir les besoins en ce qui concerne le format GML
ShapeFile (Écriture) À faire: Cheminement inverse Création des mêmes classes que pour le mode lecture. Reconvertir les données du format de GeoKettle vers celui de GeoTools Construire le shéma de données Introduire les données dans le «Datastore» Écrire les données
ShapeFile (Écriture) Conversion du type de données - Détecter la classe d’objet de l’entrepôt - Trouver la classe Geotools correspondante - Traduire la classe
Difficultés Chemin inverse partiel seulement Méthode en lecture: 1 - Datastore 2 - Feature Source (attributs) 3 - Feature Collection (Ensemble des données) 4 - Features (Données individuelles) 5 - Insertion dans l’entrepôt
Difficultés Impossible d’instancier certains éléments sans le shéma Solution: Javadoc Données dans l’entrepôt Création des types de données Création de la « Factory » Création du DataStore Création du shéma de données Création du « Writer » Écriture dans le DataStore
Difficultés Renvoit une exception si le fichier n’existe pas Solution: Tester la création d’un nouveau fichier et l’ajouter à la liste d’objets de fichiers.
Géométries Types de géométries très spécifiques dans un ShapeFile Null Shape Point PolyLine Polygon MultiPoint MultiPatch
Géométries GeoKettle comporte le type «Geometry» Peut comporter plusieurs types de géométrie Donc, Le type géométrique du premier objet est celui choisi, si les données ne sont pas toutes du même type, une erreur est lancée.
Tests Tests effectués sur tous les format de géométries possible dans un shapefile (Succès) Tests chronomètrés (environs 700-1000 lignes / secondes)
Démonstration
696 secondes plus tard…
Démonstration
À faire Liste de choix de géométries pour l’utilisateur… Demander pour réécrire un fichier existant… Champs dans le visualisateur non adaptés à l’écriture…
À faire Les opérations sur les systèmes de référence sont maintenant disponibles…inclure ces informations au ShapeFile. Chronomètre met beaucoup de temps à s’arreter Optimisation du code
Suggestions Possibilité d’ajouter des éléments à un Shapefile déjà existant Décomposeur de géométries
Bilan général Lecture de GML : non atteint Beaucoup plus problématique que dans les prévisions Problèmes de shéma GeoRss OpenJump et udig Lecture de MapInfo : non atteint Non supporté OpenJump Lecture de WFS : non atteint Manque de temps Écriture de ShapeFile : opérationnel
Apprentissages Faire des prétests durant l’étude de faisabilité Fonctionnement interne d’un outil ETL Mise en commun des apprentissages faits en cours et la réalité. Bâtir un projet sur une application existante
Remerciments Très grand merci à Étienne Dubé Thierry Badard, Frédéric Hubert Merci au debugger qui dépasse maintenant le chien comme meilleur ami de l’homme Merci à la coupe longueil de Denis Lapierre qui a été pour moi une source de motivation
Questions?