Aujourd’hui, il n’est pas simple de dénicher des données suivant les formats définis dans les spécifications sur les données INSPIRE. Quoiqu’il en soit, voici une méthode pour lire des données au format GML avec l’ETL Talend Open Studio (TOS) et son module Spatial.

En effet, les modèles UML des spécifications sur les données INSPIRE utilisent le format GML pour encapsuler les géométries. Ces modèles sont égalements appelés schémas d’application GML. L’ensemble des propriétés et relations entre les objets y est décrit.

Dans le cas d’une adresse, le modèle est le suivant :

TOS permet de lire et d’extraire des portions de fichier XML avec le composant tFileInputXML. Avec un peu de configuration (cf. ci-dessous), il est possible de définir une correspondance entre tout ou partie du fichier XML et un flux de sortie.

Dans ce cas, la position (« ad:position ») n’est pas transformée en géométrie, elle est de type texte. En sélectionnant l’option « Get Nodes » pour cette colonne, le composant va extraire le bloc XML. Ce bloc doit alors être converti en géométrie. Il est possible d’ajouter une routine pour réaliser cette conversion. Le menu « créer une routine » est accessible depuis l’onglet Référentiel > Code > Routines :

public class GeometryUtility {
    private static final org.geotools.xml.Parser gmlParser = new org.geotools.xml.Parser(new org.geotools.gml3.GMLConfiguration());
    /**
     * GMLToGeometry: Convert a GML string into a Geometry
     * 
     * {talendTypes} Geometry
     * {Category} GeometryUtility
     * {param} string("...") input: The GML to be parsed
     * {param} boolean(false) input: Validate the GML input document or not
     * {example} GMLToGeometry(row1.the_geom, false)
     */
    public static org.talend.sdi.geometry.Geometry GMLToGeometry(String gml, boolean validate) {
    	// Set GML parser properties.
    	gmlParser.setStrict(false);
    	gmlParser.setValidating(validate);
    	
        // TODO : Take care of coordinate system
    	
    	// Parse the geometry
	try {
		Object value = gmlParser.parse(new java.io.StringReader(gml));
		return new org.talend.sdi.geometry.Geometry((com.vividsolutions.jts.geom.Geometry) value);
	} catch (Exception e) {
		System.out.println("Error when parsing GML geometry: " + e.getMessage() + ".");
		e.printStackTrace();
	}
    	return null;	
    }
}

Une fois la routine créée, il est alors possible de l’utiliser dans toute expression :

routines.GeometryUtility.GMLToGeometry(row2.Point, false)  

Par exemple dans un composant tMap :

Ainsi, la conversion d’un fichier GML vers un fichier Shapefile peut se faire de la manière suivante :

Quand l’heure sera venue de traiter des données au format INSPIRE, il y aura probablement de nombreux cas particuliers à gérer mais c’est déjà un premier pas. Le cas de l’écriture de ces formats est également une problématique intéressante.

Lire les formats INSPIRE avec Talend Open Studio
Étiqueté avec :            

Une pensée sur “Lire les formats INSPIRE avec Talend Open Studio

  • 16 mars 2011 à 15:23
    Permalien

    Bonjour,

    Merci de l’information. A ma connaissance il n’y a pas encore de série de données conforme aux modèles UML arrêtés, et on ne devrait pas en avoir avant fin 2012 (sauf géomaticien aventurier). Mais c’est plutôt sain d’avoir des outils de ce type avant. Il y aura de nombreux tests à mener avant de passer en production (sans compter l’écriture, bien sûr).
    Bref, c’est (une partie de) l’avenir!

    Répondre

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.