Spatial-ETL-Tutorial: Geodaten in ETL-Prozesse integrieren
In diesem Spatial-ETL-Tutorial: Geodaten zeigen wir Ihnen Schritt für Schritt, wie Sie Geodaten und räumliche Operationen in ETL-Prozessen nutzen können. Im Einsatz sind die frei erhältlichen Tools Talend Open Studio für Data Integration und die Disy-Erweiterung GeoSpatial Integration für Talend.
Vorbereitungen
Am Beispiel der Open-Source-Software Talend Open Studio sowie des Geo-ETL-Plug-ins „GeoSpatial Integration für Talend“ zeigen wir Ihnen, wie Sie in Ihren ETL-Prozessen Geodaten und räumliche Operationen nutzen können. Um beim Tutorial mitzumachen, laden Sie zunächst eine aktuelle Version von Talend Open Studio für Data Integration und zusätzlich das Disy-Plug-in „GeoSpatial Integration für Talend“ herunter und installieren Sie beides. Im Downloadpaket von Disy sind alle Daten enthalten, die Sie benötigen, um bei diesem Tutorial mitzumachen:
Während Sie die Software herunterladen und installieren, wollen wir Ihnen ein paar Basisinformationen zur Funktionsweise von GeoSpatial Integration für Talend geben:
Das Spatial-ETL-Plug-in erweitert Talend, indem es Zugriff auf räumliche Datenbanken und Formate wie Oracle Locator/Spatial, PostGIS, SpatiaLite, Shapefiles und Well-known Text (WKT) ermöglicht. Darüber hinaus erweitert es die Palette der Talend-Komponenten um einen vollständigen Satz an geometrischen Operatoren wie Flächen- oder Längenrechner, Puffer, Zentroid, Verschneidung und vieles mehr, um räumliche Aufgaben und Workflows zu automatisieren.
In unserem Spatial-ETL-Tutorial betrachten wir folgendes Anwendungsbeispiel:
In einem Windpark steht jede Turbine als einzelnes Standortobjekt (Punkt). Wir möchten die gesamte Fläche des Windparks berechnen. „Geometrisch“ gesprochen möchten wir die konvexe Hülle aller Punkte berechnen, die zu diesem Windpark gehören.
Unsere Übung umfasst die folgenden Schritte:
- Definition der Metadaten für die neue Datenquelle (Shapefile)
- Definition des Talend-Jobs, um die Windparkfläche mit Hilfe einer geometrischen Operation zu berechnen
- Ausführung des Jobs und Schreiben der Resultate in eine Datei oder Datenbank
Mit diesem einfachen Prozess können Sie die Gesamtfläche des Windparks bestimmen. Auf dieser Basis können dann weitere Planungsschritte beispielsweise im Bereich Straßenbau oder Naturschutz vorgenommen werden.
Schritt 1: Definition der Metadaten, um die Geometrien aus einer Datei oder Datenbank zu laden
Damit wir uns ein besseres Bild zur Lage unserer Windkraftanlagen machen können, haben wir die einzelnen Standorte mit Hilfe von Cadenza visualisiert. In der Karte sieht man sofort, welche Turbinen zusammen einen Park bilden (siehe Abb. 1).
Im Repository-Baum von Talend wählen Sie Metadata -> File Shapefile -> Create file shapefile.
Es öffnet sich ein Dialog, bei dem Sie den Namen und einen Verwendungszweck angeben sowie das Shapefile Windfarm.shp auswählen. Nachdem Sie die Daten, die mit dem Disy-Plug-in ausgeliefert werden, entpackt haben, sollten Sie die Datei unter \Disy_GeoSpatial_Sample_Data\in\DataPreparation wiederfinden. Die Schema-Informationen wie Spaltennamen und Datentypen werden automatisch importiert. Bei Bedarf können Anpassungen vorgenommen werden (z. B. Einstellen des Primärschlüssels, wenn dieser nicht in den Datensätzen angegeben wurde). Klicken Sie auf Finish.
Das Shapefile wird nun in die Talend-Metadaten aufgenommen und kann für den nächsten Schritt oder für jeden anderen Job, den Sie mit diesen Daten beginnen möchten, verwendet werden.
Schritt 2: Einen Talend-Job mit den räumlichen Operatoren erstellen
Dazu müssen Sie in Talend einen neuen Job erstellen und einen Namen, einen Zweck und eine Beschreibung definieren (siehe Abb. 4 und 5).
Wählen Sie anschließend im Bereich „Metadata“ das Schema der Windparkdaten „windfarm“ aus und ziehen Sie es per Drag-and-drop in die Arbeitsfläche des Jobs. Automatisch öffnet sich ein Dialog. Sie können nun auswählen, mit welcher Komponente Sie arbeiten möchten. Wählen Sie hier dShapeFileInput aus (siehe Abb. 6).
Da wir die konvexe Hülle unserer Punkte berechnen möchten, wählen Sie aus der Palette unter Disy GeoSpatial > Geom Operations die Komponente dAggregateGeometryRow aus und ziehen Sie sie in die Arbeitsfläche des Jobs (siehe Abb. 7).
Zwischen beiden Komponenten legen Sie eine Main-Row-Verbindung an (rechter Mausklick auf dShapeInput-Komponente, im Kontextmenü Row -> Main wählen und Verbindung auf dAggregateGeometryRow-Komponente ziehen, siehe Abb. 8).
Zum Schluss müssen wir das Ausgabeformat (Output) definieren. In unserem Fall ist es ein einfaches Shapefile, das nur den Namen des Windparks und die neu erstellten Geometrien enthält. Per Doppelklick auf die Komponente dAggregateGeometryRow öffnen sich deren Einstellungen. Klicken Sie in den Einstellungen der Komponente auf die Schaltfläche EditSchema, um das Ausgabeschema der Komponente zu definieren. Durch Klicken auf die Schaltfläche Add (Symbol „+“) erstellen wir zwei neue Spalten: Name (Typ: STRING, Länge: 80) und ConvexHull (Typ: DGeometry).
Da unsere Quelldatei Punkte aus verschiedenen Windparks enthält und wir eine konvexe Hülle der Windräder eines jeden Windparks generieren möchten, müssen die Windräderpunkte nach dem Namen jedes Windparks gruppiert werden. Dies gelingt, indem in der Group by-Sektion die Spalte „Name“ sowohl für die Input- als auch die Output-Spalte ausgewählt wird (siehe Abb. 10).
Zusätzliche sollten in der Operators-Sektion die folgenden Einstellungen gewählt werden:
- Output column = CONVEXHULL
- Function = Convex hull
- Input column = SHAPE
Fügen Sie dem Arbeitsbereich eine tMap-Komponente hinzu (Palette -> Verarbeitung -> tMap) und erstellen Sie eine Verbindung („main row“) zwischen der dAggregateGeometryRow- und der tMap-Komponente. Damit die einzelnen ETL-Prozessschritte einfacher nachvollziehbar sind, haben wir die neue Main-Row-Verbindung in „convex_hull“ umbenannt (siehe Abb. 11).
Jetzt können wir den Input-Datenstrom per Drag-and-Drop auf den Output-Datenstrom abbilden. Es ist empfehlenswert, eine eindeutige Kennung für alle Ausgabedatensätze zu erstellen. In unserem Beispiel erstellen wir daher eine neue "ID"-Spalte für den Unique Identifier als "Integer"-Datentyp, indem wir die Numeric.sequence-Funktion ("s1", 1,1) verwenden (siehe Abb. 13 und 14).
Die neu erstellten Geo- und Attributdaten werden als Shapefile gespeichert. Verwenden Sie hierzu die Komponente dShapefileOutput. Ziehen Sie diese aus der Palette unter Disy GeoSpatial -> File -> Shapefile in die Arbeitsfläche des Jobs. Verbinden Sie die tMap-Komponente mit dShapeFileOutput und verwenden Sie dabei den Namen Ihres tMap-Outputs: im Beispiel „out1“ (Abb. 16).
Um den Output-Stream anzupassen, navigieren Sie zu den Komponenteneigenschaften und wählen Sie den Speicherort des Shapefiles. Wählen Sie das gleiche Koordinatenreferenzsystem aus, das in der Datenquelle definiert ist. In unserem Beispiel ist es EPSG: 3857 (a.k.a WGS84 oder Web Mercator), siehe Abb. 17.
Schritt 3: Führen Sie den Job aus und schreiben Sie die Ergebnis-Geometrien in eine Datei oder Datenbank
Herzlichen Glückwunsch! Sie haben gerade Ihren ersten Geo-ETL-Job bearbeitet.
In der Karte, die wir mit Cadenza erstellt haben, sehen wir unser Ergebnis visualisiert (siehe Abb. 19).