Pentaho Data Integration a toujours autorisé la création de « plugins » permettant d’étendre les fonctionnalités de cet ETL en ajoutant notamment de nouvelles « JobEntries » pour les « Jobs » ou de nouveaux « Steps » pour les « Transformations ». Cette possibilité offerte à l’utilisateur permettait de couvrir nombre de besoins mais il fallait se limiter à la manipulation de données dont le type était nativement reconnu par l’ETL (BigNumber, Binary, Boolean, Date, Integer, Number, String).
Dans le contexte de l’information géographique et avec les versions antérieures à la version 5, la manipulation de données spatialisées nécessitait de transformer les géométries pour les exploiter à travers les types standards «String » ou « Binary ». Si cet artifice permettait de transporter tant bien que mal les descriptions géométriques d’objets dans les flux de données elle nécessitait cependant la mise en place de mécanismes particuliers afin de d’assurer notamment la lecture et l’écriture depuis ou vers les bases de données (utilisation de fonctions telles que St_Astext() pour PostGIS ou SDO_UTIL.TO_WKTGEOMETRY() pour Oracle).
Avec l’arrivée de la version 5.0 de Pentaho Data Integration, il devient désormais possible d’étendre les types de données proposés par défaut en ajoutant ses propres types de données basés sur la classe « ValueMetaBase ». Tirant parti de cette nouvelle possibilité, les équipes d’Atol Conseils et Développements ont souhaité enrichir l’ETL Pentaho Data Integration d’un nouveau type de données « Geometry » dédié à la manipulation de l’information géographique. Cette fonctionnalité initialement mise en œuvre pour couvrir les besoins en lecture et en écriture vers ou depuis PostGIS a finalement débouché sur la création de briques complémentaires permettant notamment de lire ou de produire les formats SIG courants, de prendre en compte les systèmes de coordonnées et de proposer quelques fonctionnalités de manipulation de géométries.
# Le nouveau type de donnée « Geometry »
Le nouveau type de données « Geometry » permet d’enrichir certaines briques existantes en apportant des fonctionnalités nouvelles en permettant une prise en compte directe dans certaines briques.
# La création de géométries depuis une forme textuelle
La création d’une géométrie peut se réaliser en saisissant directement la forme textuelle dans les étapes de type « Génération Lignes » ou « Génération données (grille) ». La transformation d’un type « Geometry » vers le type « String » et inversement est également acceptée dans les étapes « Altération structure flux ».Cette conversion permet également de typer la donnée lors de la lecture d’un fichier texte contenant une géométrie encodée au format WKT depuis une étape « Extraction depuis fichier ».
# Impact du type « Geometry » sur les briques existantes
# Lecture et écriture depuis et vers les bases de données
Actuellement, seuls les SGBD PostgreSQL / PostGIS, Oracle et MySQL sont supportés en lecture et en écriture. Les étapes impactées sont les suivantes :
- « Extraction depuis table »
- « Insertion dans table »
- « Insertion / Mise à jour table »
- « Mise à jour table »
- « Jointure Base de données »
- « Recherche dans Base de données »
- « Interrogation dynamique d’une BdD »
Les autres étapes telles que « Exécution script SQL », « Exécution script SQL dynamique » ne sont actuellement pas prises en compte.
# Prise en compte des géométries dans l’étape « Statistique »
La brique « Agrégation de géométrie » reprends les fonctionnalités proposées par la brique « Agrégation valeurs » mais ajoute les fonctionnalités :
- de calcul d’étendue de géométries (boîte englobante du flux ou du groupe)
- de fusion de géométries
- de création de collection de géométries (MULTIPOINT, MULTILINESTRING,MULTIPOLYGON ou GEOMETRYCOLLECTION)
Cette étape est disponible dans la catégorie « Information géographique »
# Nouvelles briques spécifiques à l’information géographique
Ces briques sont regroupées dans la catégorie « Information géographique »
# Lecture de formats SIG
La brique « Extraction depuis fichier SIG » autorise la lecture de fichiers SIG dans les formats « ESRI Shapefile », « Mapinfo Interchange Format » et « GeoJSON » et les bases Spatialite. La 3D n’est prise en compte que pour le format « ESRI Shapefile ». En fonction des formats, des options peuvent êtres précisées.
# Écriture de formats SIG
La brique « Extraction depuis fichier SIG » permet l’écriture de fichiers SIG dans les formats « ESRI Shapefile », « GeoJSON » , KML et DXF. Ces formats n’autorisant qu’une seule géométrie par entité, il est systématiquement nécessaire de renseigner la colonne « Geometry » du flux à exploiter. A la génération du fichier les autres colonnes de type « Geometry » éventuellement présentes dans le flux sont ignorées.
# Prise en compte des systèmes de coordonnées
La brique « Opération avec système de coordonnées » propose 2 fonctionnalités :
- L’affectation d’un système de coordonnées aux géométries
- La reprojection des coordonnées d’une géométrie d’un système vers un autre
Le code du système de coordonnées (SRID) affecté à une géométrie doit exister dans la base EPSG mais la reprojection de données autorise des transformations pour les autorités IGNF et ESRI.
# Opérations sur les géométries
Les briques « Géotraitement », « Relation spatiale et proximité » et « Information sur géométrie » permettent respectivement de réaliser des opérations entre géométries via les opérateurs « classiques (buffer, union, intersection, etc.), des tests de relation spatiale (est contenu dans, etc.) ou d’obtenir des informations sur une géométrie.
# Conclusion
Le développement de ces extensions « spatiales » pour l’ETL Pentaho Data Integration répond à un besoin minimal de prise en compte de l’information géographique au sein de cet ETL et ne cherche en aucun cas à rivaliser en terme de fonctionnalités avec des outils dédiés tels que FME, Spatialitics ETL ou Talend Spatial Data Integrator qui proposent nativement plus de fonctionnalités. Il témoigne cependant des capacités de cet ETL à accepter des modules complémentaires mobilisables en cas de besoins.
Le projet sur github : https://github.com/atolcd/pentaho-gis-plugins
6 octobre 2015 at 22 h 57 min
Dear,
I have installed last version of PDI community and compiled PDI GIS Plugins with last version of maven for windows 32 bits, and jdk1.7.0_79
Compilation do not break all it is correct and generate zip file with all of the pluging content.
After uncompress it in PDI_home/plugins/step and opening PDI Geospatial steps appear in PDI user interface.
I can make a new transformation and when i to concat a Coordinated system operation with an input step and try to open properties of that step an error windows appear.
The first time of that error message title:
I was unable to create a dialog for step com.atolcd.pentaho.di.ui.trans.steps.giscoordinatetransformation.GisCoordinateTransformationDialog
And content:
loader constraint violation: when resolving method « org.slf4j.impl.StaticLoggerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory; » the class loader (instance of org/pentaho/di/core/plugins/KettleURLClassLoader) of the current class, org/slf4j/LoggerFactory, and the class loader (instance of java/net/URLClassLoader) for resolved class, org/slf4j/impl/StaticLoggerBinder, have different Class objects for the type gerBinder.getLoggerFactory()Lorg/slf4j/ILoggerFactory; used in the signature
The second on time trying to open properties of the step the message title is the same but the content is:
Could not initialize class org.cts.registry.RegistryManager
What can be the problem?
Best regards,
Miguel A. Manso
7 novembre 2016 at 21 h 37 min
Dear atolCD team,
Thank you for sharing this plug-in with the community.
Could you please be more specific regarding the units used for distance,
length, etc.
As a matter of fact, the minimum distance calculated with the Spatial relationship and proximity step leads to results I can’t understand :
POINT(0 0) and POINT(90 0) gives 90. I expected around 10 000km 😉
POINT(0 0) and POINT(90 90) gives 127,3. Same should be aroung 10 000km, shouldn’t it ?
Looking forward to read your opinion regarding this.
Kind regards,
Jean-Christophe
8 novembre 2016 at 10 h 25 min
This is a reply to my comment: distances are cartesian euclidians not geodesic! I suspected this but got confirmation while digging into the source code (package com.vividsolutions.jts.geom.Coordinate).
I haven’t found a way to force geodesic calculation yet.
Jean-Christophe
8 novembre 2016 at 11 h 50 min
Bonjour,
Effectivement, les calculs de distances et de surfaces exploitent la librairie JTS qui ne gère pas les systèmes de projection. Les calculs effectués sont donc basés sur des opérations de géométrie euclidienne.
Actuellement, pour obtenir les distances cohérentes sur des coordonnées exprimées en longitude/latitude, il convient au préalable de réaliser lorque cela est possible, une reprojection via la brique « Opération avec système de coordonnées » vers un système de coordonnées « cartésien ».
Cédric
18 avril 2017 at 11 h 43 min
Bonjour,
je rencontre un problème lors d’une transformation, où j’utilise le plugin GIS. Je souhaite générer un fichier SVG à partir de mon shapefiles. Je n’arrive même pas à prévisualiser mes données à l’étape « Extraction depuis fichier SIG », j’ai cette erreur:
org.eclipse.swt.SWTException: Failed to execute runnable (java.lang.NoClassDefFoundError: org/apache/commons/vfs/FileSystemException)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.SWT.error(Unknown Source)
at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.runAsyncMessages(Unknown Source)
at org.eclipse.swt.widgets.Display.readAndDispatch(Unknown Source)
at org.pentaho.di.ui.spoon.Spoon.readAndDispatch(Spoon.java:1347)
at org.pentaho.di.ui.spoon.Spoon.waitForDispose(Spoon.java:7989)
at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9269)
at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:662)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
Caused by: java.lang.NoClassDefFoundError: org/apache/commons/vfs/FileSystemException
at com.atolcd.pentaho.di.trans.steps.gisfileinput.GisFileInputMeta.getFields(GisFileInputMeta.java:211)
at org.pentaho.di.trans.TransMeta.compatibleGetStepFields(TransMeta.java:2054)
at org.pentaho.di.trans.TransMeta.getThisStepFields(TransMeta.java:2040)
at org.pentaho.di.trans.TransMeta.getStepFields(TransMeta.java:1871)
at org.pentaho.di.trans.TransMeta.getStepFields(TransMeta.java:1771)
at org.pentaho.di.trans.TransMeta.getStepFields(TransMeta.java:1733)
at org.pentaho.di.ui.trans.debug.TransDebugDialog.showStepDebugInformation(TransDebugDialog.java:423)
at org.pentaho.di.ui.trans.debug.TransDebugDialog.refreshStepList(TransDebugDialog.java:288)
at org.pentaho.di.ui.trans.debug.TransDebugDialog.getData(TransDebugDialog.java:242)
at org.pentaho.di.ui.trans.debug.TransDebugDialog.open(TransDebugDialog.java:218)
at org.pentaho.di.ui.spoon.delegates.SpoonTransformationDelegate.executeTransformation(SpoonTransformationDelegate.java:800)
at org.pentaho.di.ui.spoon.Spoon$31$1.run(Spoon.java:8523)
at org.eclipse.swt.widgets.RunnableLock.run(Unknown Source)
… 12 more
Caused by: java.lang.ClassNotFoundException: org.apache.commons.vfs.FileSystemException
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.pentaho.di.core.plugins.KettleURLClassLoader.loadClassFromParent(KettleURLClassLoader.java:89)
at org.pentaho.di.core.plugins.KettleURLClassLoader.loadClass(KettleURLClassLoader.java:108)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
… 25 more
J’utilise pentaho data integration 6.1 et java 1.8.0_05.
S’il vous plait besoin d’aide.
18 avril 2017 at 13 h 12 min
Bonjour,
Effectivement, cette anomalie est connue avec les versions de PDI 6 et supérieures. En attendant la correction par nos équipes, je vous invite à utiliser, dans la mesure de vos possibilités, une version 5.X de PDI.
Cordialement