IDU.GeoTools.Net

IDU.GeoTools.Net ist ein Kommandozeilen-Tool. Damit lassen sich einige Aufgaben im Batch-Betrieb automatisiert erledigen.

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

Allgemeines

Der Aufruf der Anwendung ohne Argumente startet geotools im interaktiven Modus. Hier können Befehle eingegeben werden.

"help" bringt eine Liste aller Befehle, "help " die Details dazu.

Variablen

Global definieren

Beim 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/542D9B5CC5E3E7C4DF22A78C8B0B3E283ED4A3C9CEBD9E4732D8F74EF9122E74/
#define WFS_GEO_URL http://www.umwelt.sachsen.de/umwelt/infosysteme/ags/services/geologie/rohstoffe_utm/MapServer/WFSServer

Definiert die Variable "MY_PG" und "MY_PWD". Der Aufbau ist: <Schlüsselwort "#define"> <Name_Der_Variable>

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

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.

Geodaten

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.

Gegenstand der Geo-Aktionen ist üblicherweise der Export / Import von Daten verschiedener Arten.

Der erste Schritt ist das Verbinden mit einer Datenquelle (Connect) mit einer der verfügbaren ToXXX 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 ...) sind entsprechende Argumente anzugeben. Die vollständige Liste der Argumente wird vom GeoTools aufgelistet. Die Bedeutung der Argumente finden Sie wiederrum 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 ToXXX Methode konvertiert werden. Hier ist wiederrum der Alias der Datenquelle anzugegeben, gefolgt von den spezifischen Argumenten für das Ziel.

Z.Z. gibt es diese Zielformate ...

  • ToGeoJson
  • ToGeopackage
  • ToOracle
  • ToPostgres
  • ToShape

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

Zusammenhängendes Beispiel

Ziel: Zugriff auf den FeatureType "Hartgestein" des WFS Dienstes des LfuLg Sachsen, speichern der Daten in einer PostgreSQL Datenbank, gefiltert auf Dresden. Wenn die Tabelle bereits vorhanden ist, dann leeren und neu befüllen.

Beachte: Die hier verwendeten Variablen sind im Bsp. in der Idu.GeoTools.Net.vars definiert.

```
#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 (Preprozessor). 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.

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: 30.07.2018 13:49:40 (erstmals erstellt 07.06.2018)