IDU.GeoTools.Net

IDU.GeoTools.Net ist ein umfangreiches Kommandozeilen-Tool. Damit lassen sich verschiedenste Import-/Export- und Konvertierungsaufgaben rund um Geo-Daten schnell und effizient lösen.

Zudem ist auch ein Batch-Modus verfügbar, mit dessen Hilfe sich einige Aufgaben auch automatisiert erledigen lassen.

Das Werkzeug steht für die Verwendung kostenfrei zum Download zur Verfügung.

Wir übernehmen keinerlei Haftung für das Programm.

Der aktuelle Stand ist die Version 2.0.22.58149 vom 14.02.2024.

Der Download wird regelmäßig aktualisiert. Die meisten Änderungen erfolgen i.d.R. durch Aktualisierung von Iwan7, das Changelog für Iwan7 enthält bspw. auch Hinweise zu neuen Ebenentypen.

Letzte Änderung:

  • Neu: EfaImport: die Beschreibung der Funktion und ihrer Parameter wurde den neuen Erkenntnissen zur Funktionsweise des EFA-Servers angepasst.

Falls bspw. Dienste Umlaute in den Spaltentiteln enthalten, werden diese je nach Import-Ziel maskiert. In diesem Fall sollten Sie die Spalten vor dem Verwenden in cardo anpassen, oder gleich über eine geeignete GeoSQL Abfrage beim Import normalisieren. Beachten Sie auch die Hinweise zu Allgemeine Hinweise zu Datenquellen

Allgemeines

Der Aufruf der Anwendung ohne Argumente startet die GeoTools-Kommandozeile im interaktiven Modus. Hier kann man sich eine Übersicht über die zur Verfügung stehenden Anweisungen und deren Verwendung (Syntax, Parameter) geben lassen und es können Befehle direkt eingegeben werden.

help bringt eine Liste aller Befehle, help <BEFEHL> die Details dazu.

Variablen

Global definieren

Beim Programm-Start wird im Pfad der Anwendung nach einer Datei Idu.GeoTools.Net.vars gesucht. In dieser können Variablen definiert werden, z.B. Kennwörter, Datenbankserver o.ä..

In der Textdatei kann pro Zeile ein #define-Anweisung stehen,

Bsp.:

#define MY_PG host=localhost dbname=us17 user=postgres port=6432
#define MY_PWD /ciph1/542D9B5DD5F3E7C4DF22A78C8B0B3E293ED4A3C9CEBD9E4732D8F74EF9122E74/
#define WFS_GEO_URL http://www.umwelt.sachsen.de/umwelt/infosysteme/ags/services/geologie/rohstoffe_utm/MapServer/WFSServer

Definiert die Variable MY_PG, MY_PWD und WFS_GEO_URL. Der Aufbau ist: #define <Name_Der_Variable> <Wert>

Beachte: Änderungen an der Datei werden erst nach Neustart der Anwendung beachtet.

Hinweis: Siehe die Befehle "Secret" und "Encrypt" für den Umgang mit verschlüsselten Kennwörtern.

Lokal definieren

Ist nur im Batch-Modus möglich.

Verwendung von Variablen

Variablen können immer als Argument übergeben werden, aber nicht als Teil innerhalb von Zeichenketten.

Zulässig wäre:

Connect to:WFS wfsUrl:%WFS_URL% ...

Wohingegen

Connect to:WFS wfsUrl:%WFS_URL% query:"SELECT * FROM .. WHERE shape match %BBOX_DD%" ...

nicht zum gewünschten Ergebnis führt.

Für das Zusammenfügen kann der Befehl ExpandVar verwendet werden.

Bsp.: Definiert ist die Variable BBOX_DD, Ergebnis soll eine neue Variablen werden, die die zusammengesetzte Abfrage enthält:

ExpandVar expr:"SELECT * FROM x WHERE shape match '%BBOX_DD%'" to:filterQuery

Damit wird das Ergebnis in der Variable filterQuery zur Verfügung gestellt. Beachte, dass die Variablen-Platzhalter case-sensitiv sind.

PrintVar kann zum Anzeigen des Inhalts aller Variablen verwendet werden.

Verwendung

Im Kern verwenden wir die neuen Komponenten, die rund um unseren Server Iwan7 entstanden sind. D.h. die Beschreibungen zu den Argumenten der jeweiligen Datenquelle finden Sie auf der Iwan7 Seite.

Der erste Schritt ist das Verbinden (Connect) zu einer Datenquelle mit einer der verfügbaren To[XXX]-Optionen um diese zu speichern.

Mit Connect wird eine benannte Verbindung zu einer Datenquelle erstellt.

Connect To:Wfs As:DienstA : Stelle eine Verbindung zu einem WFS Server her, der Alias für diese Datenquelle ist "DienstA".

Je nach Quelle (To[XXX]) sind entsprechende Argumente anzugeben. Die vollständige Liste der Argumente wird vom GeoTools aufgelistet. Die Bedeutung der Argumente finden Sie wiederum im Iwan7-Bereich der Datenquellenbeschreibung. Für das Bsp. WFS siehe hier.

Nachdem die Verbindung hergestellt ist, kann eine Datenvorschau abgerufen werden:

PreviewLayerContent From: DienstA

PreviewLayerContent hat weitere Argumente, siehe help PreviewLayerContent. Unter anderem kann auch eine GeoSQL-Abfrage übergeben werden:

PreviewLayerContent From: DienstA Query: "SELECT * FROM DienstA WHERE id = 60"

... listet nur die betroffenen Datensätze auf.

Nun können die Daten mit einer der To[XXX]-Methode konvertiert werden. Hier ist wiederum der Alias der Datenquelle anzugeben, gefolgt von den spezifischen Argumenten für das Ziel.

z.Z. gibt es diese Zielformate:

  • ToGeoJson
  • ToGeopackage
  • ToOracle
  • ToPostgres
  • ToShape
  • ToPuzzle

Neben dem Argument From kann auch wieder eine GeoSQL-Abfrage in Query übergeben werden. Damit können Daten gefiltert, transformiert und kombiniert werden.

Zusammenhängendes Beispiel

Ziel: Zugriff auf den FeatureType "Hartgestein" des WFS-Dienstes des LfuLg Sachsen und das Speichern der Daten in einer PostgreSQL Datenbank, gefiltert auf Dresden. Wenn die Tabelle bereits vorhanden ist, soll sie geleert und neu befüllt werden.

Beachte: Die hier verwendeten Variablen sind im Beispiel definiert worden.

```
#define PG host=localhost dbname=us17 user=postgres port=6432
#define WFS_URL http://www.umwelt.sachsen.de/umwelt/infosysteme/ags/services/geologie/rohstoffe_utm/MapServer/WFSServer
#define BBOX_DD SRID=25833;POLYGON((401373.30960585 5668962.59600988,426329.99934096 5669230.12560887,426329.99934096 5647216.26146274,401335.09109171 5647827.75768903,401373.30960585 5668962.59600988))
```
Abruf WFS, Selektion und Speichern in PostgreSQL
Tracing enable:true level:TraceDetail

Connect To:WfsOneFeatureType As:Geologie url:%WFS_URL% featureTypeName:Hartgestein

ExpandVar expr:"select * from geologie where shape match '%BBOX_DD%' AND ST_Intersects(shape,'%BBOX_DD%')" to:filterQuery

PreviewLayerContent From:Geologie Limit:10 asTable:false query:%filterQuery% 

ToPostgres from:Geologie query:%filterQuery% connectionString:%PG% tableName:Geo1 onExists:TruncateExisting

Batch-Modus

Der Batch-Modus ermöglicht die Verwendung aller oben aufgeführten Befehle und verfügt noch über einige Erweiterungen.

Hinweis: eine Batch-Aktion kann auch direkt aus dem interaktiven Modus heraus erfolgen.

Als Steuerdatei wird dem Programm die Aktion "batch", gefolgt von dem Namen einer Textdatei mit den Anweisungen übergeben.

Optional kann noch logPath übergeben werden (Name einer Datei, in der alle Ausgaben gespeichert werden, wird immer .html benannt). Mit dem Wert "null" wird keine Protokolldatei erstellt.

Ist LogPath nicht angegeben, wird eine Protokolldatei mit dem Namen der Eingangsdatei und der Erweiterung .html erstellt.

Bsp.:

Idu.GeoTools.Net.exe op:batch fileName:batch.txt logPath:null

Alle weiteren übergebenen Argumente können als Platzhalter in den folgenden Anweisungen eingesetzt werden (%NAME%), werden aber nicht als Variable bereitgestellt.

Die Ersetzung erfolgt hier in einer Art Vorverarbeitung (Präprozessor). Das Argumente keine Variablen werden, hat hier den Vorteil, dass globale Variablen als Platzhalter definiert werden können.

Die Argumentnamen werden immer in Großschreibweise umgewandelt.

Die Ersetzung der Argumente erfolgt immer vor der Auswertung von Variablen.

Kommentare

Eine Zeile wird übersprungen, wenn diese mit ...

  • REM
  • //
  • oder # beginnt

(bei # => Ausgenommen der reservierten # - Anweisungen, siehe ff).

Besondere Aktionen im Batch

Bedingte Ausführung

Es gibt einfache Möglichkeiten zur bedingten Ausführung. Diese Anweisungen (der c-Programmierer unter Ihnen wird sich heimisch fühlen) bestehen aus einem Block in der Form

#ifXX

  Anweisungen ...

#endif

Es gibt zwei Arten von Tests: Prüfen, ob ein Argument vorhanden ist oder Auswerten des Ausdrucks auf Ja/Nein.

  • #if bzw. #ifn (wenn / wenn Nicht), es wird 1/0 oder true oder false als Wert erwartet

  • #ifdef bzw. #ifndef (wenn definierte/ wenn nicht definiert), es wird der Wert eines Argumentes erwartet (keine Variable)

Argumente definieren

Die übergebenen Argumente können mittels #define Name Wert erweitert oder überschrieben werden. Auch hier gilt: Alle Namen werden immer in Großschreibung umgewandelt.

Einbinden von Dateien

Weitere Dateien können mit #include Dateiname eingebunden werden.

Das Übergeben von Argumenten ist nicht möglich, aber es werden alle bisher angefallenen Argumente übergeben.

Der Dateiname kann absolut oder relativ (dann zur aktuellen Batch-Datei) sein.

Report zusenden

Bei E-Mail Versand über SendReport an mehrere Empfänger sind diese durch ein Komma (ohne Leerzeichen) zu trennen. Die Level für den Parameter sendIfMsgLevelAtleast sind Info, Warning, Error. Es werden E-Mails gesendet, wenn der Status mindestens Warnung ist.

Batch-Beispiel

# Batch für GeoTools.Net
# Kopiert einen WFS-Dienst zu PG

# --------------------
# Parameter
# --------------------

# WFS_URL -> URL für den WFS
# WFS_LAYER -> Name des WFS-Layers, der kopiert werden soll

# TAB_NAME -> Name der Zieltabelle im PG
# GEO_COL -> Name der Geometrie-Spalte
# COL_NAMES -> Namen der zu übernehmenden Spalten, mit Komma getrennt, ggf. mit "as AliasName"

# --------------------
# ein paar Konstanten definieren
# --------------------

 #define PGDB host=localhost dbname=test
 #define PGSCHEMA test
 #define DBSRID 25833
 #define GEO_COL_NAME geom
 #define SERIAL_COL_NAME id
 #define MODE TruncateExisting
 
# --------------------
# Jetzt die Aktion
# --------------------
 
 # Jetzt zum WFS verbinden
 connect to:WFSOneFeatureType as:%TAB_NAME% url:%WFS_URL% featureTypeName:%WFS_LAYER%
 
 # und ab ins PG
 ToPostgres from:%TAB_NAME% connectionString:"%PGDB%" targetEpsg:%DBSRID% onExists:%MODE% tableNamePrefix:"%PGSCHEMA%." query:"select %GEO_COL% as %GEO_COL_NAME%, %COL_NAMES% from %TAB_NAME% where %GEO_COL% match '%EXTENT%'" serialColumnName:%SERIAL_COL_NAME%
 
#--------------------
# ggf. Report zusenden
#--------------------

 SendReport servername:MeinMailServer sender:ich@local to:du@local subject:wfs2pg_import clearMessagesAfterSend:true sendIfMsgLevelAtleast:Warning

Zuletzt geändert: 13.03.2024 12:40:13 (erstmals erstellt 07.06.2018)