Anleitung zur Programmfamilie ili2db
1 Überblick
ilid2db ist eine in Java erstellte Programmfamilie, die zurzeit ili2pg, ili2fgdb, ili2gpkg, ili2ora, ili2mssql, ili2mysql und ili2h2gis umfasst.
Damit kann eine INTERLIS-Transferdatei (itf oder xtf) einem INTERLIS-Modell entsprechend (ili) mittels 1:1-Transfer in eine Datenbank (PostgreSQL/Postgis bzw. GeoPackage) gelesen werden oder aus der Datenbank mittels einem 1:1-Transfer eine solche Transferdatei erstellt werden. Folgende Funktionen sind möglich:
- erstellt das Datenbankschema aus einem INTERLIS-Modell
- importiert Daten aus einer Transferdatei in die Datenbank
- exportiert Daten aus der Datenbank in eine Transferdatei
Folgende Transferformate werden unterstützt:
- INTERLIS 1
- INTERLIS 2
- GML 3.21
1.1 Schemaimport in die Datenbank
Beim Schemaimport (--schemaimport
) wird anhand des INTERLIS-Modells das Datenbankschema angelegt.
Diverse Optionen beeinflussen die Abbildung.
Den Geometrien kann mittels Parameter ein EPSG-Code zugewiesen werden. Die Geometrie-Attribute können optional indexiert werden.
Beispiel:
java -jar ili2gpkg.jar --schemaimport --dbfile mogis.gpkg path/to/dm01av.ili
1.2 Import in die Datenbank
Der Import (--import
) schreibt alle Objekte (im Sinne der eigentlichen Daten) der Transferdatei in die Datenbank.
Diverse Optionen beeinflussen, was mit den bestehenden Daten in der DB geschieht.
AREA- und SURFACE-Geometrien werden bei INTERLIS 1 polygoniert.
Kreisbögen werden als Kreisbögen importiert und somit nicht segmentiert (oder können optional auch segmentiert werden).
Beispiel:
java -jar ili2gpkg.jar --import --dbfile mogis.gpkg path/to/data.xtf
1.3 Export aus der Datenbank
Der Export (--export
) schreibt alle Daten aus der Datenbank in eine Transferdatei.
Mit weiteren Optionen wird gesteuert, welche Daten aus der Datenbank exportiert werden.
Genau einer der Parameter --models
, --topics
, --baskets
oder --dataset
muss zwingend verwendet werden, um die zu exportierenden DB-Records auszuwählen.
Der Parameter --exportModels
definiert das Export-Modell, indem die Daten exportiert werden (der Parameter ist also keine Alternative, sondern ein Zusatz für --models
, --topics
, --baskets
oder --dataset
). Als Export-Modelle sind Basis-Modelle (also z.B. Bundes-Modell statt Kantons-Modell) oder übersetzte Modelle (also z.B. DM_IT statt DM_DE) zulässig. Ohne die Option --exportModels
werden die Daten so wie sie erfasst sind (bzw. importiert wurden), exportiert.
Geometrien vom Typ AREA und SURFACE werden bei INTERLIS 1 während dem Export in Linien umgewandelt.
Beispiel:
java -jar ili2gpkg.jar --export --models DM01 --dbfile mogis.gpkg path/to/output.xtf
1.4 Log-Meldungen
Die Log-Meldungen sollen dem Benutzer zeigen, was das Programm macht. Am Anfang erscheinen Angaben zur Programm-Version. Falls das Programm ohne Fehler durchläuft, wird das am Ende ausgegeben.:
Info: ili2fgdb-3.10.7-20170823
...
Info: compile models...
...
Info: ...export done
Bei einem Fehler wird das am Ende des Programms vermerkt. Der eigentliche Fehler wird aber in der Regel schon früher ausgegeben.:
Info: ili2fgdb-3.10.7-20170823
...
Info: compile models...
...
Error: DM01.Bodenbedeckung.BoFlaeche_Geometrie: intersection tids 48, 48
...
Error: ...import failed
1.5 Fehlerhafte Daten
Um fehlerhaften Daten zu importieren (um sie danach (z.B. im GIS) zu flicken), muss mindestens die Validierung ausgeschaltet werden (--disableValidation
). Das DB-Schema muss aber auch so angelegt werden, dass fehlerhafte Werte als Text importiert werden können (--sqlColsAsText
) bzw. durch NULL
ersetzt werden können (--sqlEnableNull
). Und die Programmlogik für den Datenimport muss die Fehler tolerieren (--skipReferenceErrors
und --skipGeometryErrors
), so dass z.B. eine Referenz auf ein nicht vorhandenes Objekt ignoriert wird.
Um solche Daten zu importieren (um sie danach zu flicken):
java -jar ili2gpkg.jar --schemaimport --sqlEnableNull --sqlColsAsText \
--dbfile mogis.gpkg path/to/mo.ili
java -jar ili2gpkg.jar --import --skipReferenceErrors --skipGeometryErrors \
--dbfile mogis.gpkg path/to/data.xtf --disableValidation
Bei ITF (INTERLIS 1): Fehlerhafte AREA Attribute können für den ganzen Datensatz nicht als Polygone gelesen werden, weil ein Programm nicht erkennen kann, welche Linien und Punkte falsch sind (Punkt und/oder Linie zu viel oder zu wenig; Linie zu kurz oder zu lang); und somit nicht erkennen kann, bei welchem Polygon der Fehler ist. Dass diese Daten nicht gelesen werden können, hat also nicht in erster Linie mit der Validierung zu tun, sondern damit, dass aus den Linien+Punkten keine Polygone gebildet werden können. Die Polygonbildung muss also ausgeschaltet werden (--skipPolygonBuilding
).
Um solche Daten zu importieren (um sie danach zu flicken):
java -jar ili2gpkg.jar --schemaimport --sqlEnableNull --sqlColsAsText \
--dbfile mogis.gpkg path/to/mo.ili --skipPolygonBuilding
java -jar ili2gpkg.jar --import --skipReferenceErrors --skipPolygonBuilding \
--disableValidation --dbfile mogis.gpkg path/to/data.itf --skipGeometryErrors
Bei XTF (INTERLIS 2): Fehlerhafte SURFACE/AREA Attribute können als Linien (statt als Polygone) eingelesen werden. Die Polygonbildung muss also ausgeschaltet werden (--skipPolygonBuilding
).
Um solche Daten zu importieren (um sie danach zu flicken):
java -jar ili2gpkg.jar --schemaimport --sqlEnableNull --sqlColsAsText \
--dbfile mogis.gpkg path/to/mo.ili --skipPolygonBuilding
java -jar ili2gpkg.jar --import --skipReferenceErrors --skipPolygonBuilding \
--disableValidation --dbfile mogis.gpkg path/to/data.xtf --skipGeometryErrors
1.6 Laufzeitanforderungen
Das Programm setzt Java 1.8 voraus.
Als Datenbank muss mindestens PostgreSQL 8.3 und PostGIS 1.5 vorhanden sein. Falls das INTERLIS-Datenmodell INTERLIS.UUIDOID als OID verwendet, wird die Funktion uuid_generate_v4() verwendet. Dazu muss die PostgreSQL-Erweiterung uuid-ossp konfiguriert sein (CREATE EXTENSION "uuid-ossp";
). Mit der Option --setupPgExt
erstellt ili2pg die fehlenden notwendigen Erweiterungen.
Es muss Visual Studio 2015 C and C++ Runtimes installiert sein. Je nach Java Version (Die Java Version ist massgebend, nicht die Windows Version) muss die 32-bit oder 64-bit Version dieser Laufzeitbibliothek installiert sein. Falls diese Laufzeitbibliothek nicht installiert ist, gibt es einen Fehler beim laden der FileGDB.dll. Zur Laufzeit entpackt ili2fgdb zwei DLLs/Shared-Libraries und lädt diese. Der Benutzer benötigt also die Berechtigungen, um diese Bibliotheken zu laden.
Zur Laufzeit entpackt ili2gpkg eine DLL/Shared-Library und lädt diese. Der Benutzer benötigt also die Berechtigungen, um die Bibliothek zu laden.
1.7 Lizenz
GNU Lesser General Public License
2 Funktionsweise
In den folgenden Abschnitten wird die Funktionsweise anhand einzelner Anwendungsfälle beispielhaft beschrieben. Die detaillierte Beschreibung einzelner Funktionen ist in Kapitel 3 zu finden.
2.1 Schemaimport-Funktionen
2.1.1 Fall 1.1
Die Tabellen existieren nicht und sollen in der Datenbank angelegt werden (--schemaimport
).
java -jar ili2pg.jar --schemaimport --dbdatabase mogis --dbusr julia \
--dbpwd romeo path/to/dm01.ili
Die leeren Tabellen werden im Default-Schema des Benutzers julia
angelegt. Die Geometrie-Spalten werden in der Tabelle public.geometry_columns
registriert.
Als Host wird der lokale Rechner angenommen und für die Verbindung zur Datenbank der Standard-Port.
java -jar ili2gpkg.jar --schemaimport --dbfile mogis.gpkg path/to/dm01.ili
Die Geometrie-Spalten werden in den Tabellen gpkg_contents
und gpkg_geometry_columns
registriert.
Falls die Datei mogis.gpkg noch nicht existiert, wird sie erzeugt und mit den für GeoPackage nötigen Metatabellen initialisiert. Falls die Datei schon existiert, werden die Tabellen ergänzt.
java -jar ili2fgdb.jar --schemaimport --dbfile mogis.gdb path/to/dm01.ili
Falls die Datei mogis.gdb noch nicht existiert, wird sie erzeugt. Falls die Datei schon existiert, werden die Tabellen ergänzt.
Es werden keine Daten importiert, sondern nur die leeren Tabellen angelegt.
2.2 Export-Funktionen
lorem ipsum
2.3 Prüf-Funktionen
lorem ipsum
2.4 Migration von 3.x nach 4.x
lorem ipsum
3 Referenz
In den folgenden Abschnitten werden einzelne Aspekte detailliert, aber isoliert, beschrieben. Die Funktionsweise als Ganzes wird anhand einzelner Anwendungsfälle beispielhaft in Kapitel 2 (weiter oben) beschrieben.
Die Dokumentation gilt grundsätzlich für alle ili2db-Varianten, ausser es gibt einen spezifischen Hinweis auf PostGIS, GeoPackage oder FileGDB.
3.1 Aufruf-Syntax
java -jar ili2pg.jar [Options] [file]
java -jar ili2fgdb.jar [Options] [file]
java -jar ili2fgdb.jar [Options] [file]
Der Rückgabewert ist wie folgt:
- 0 Import/Export ok, keine Fehler festgestellt
- !0 Import/Export nicht ok, Fehler festgestellt
Optionen:
Option | Beschreibung |
---|---|
--import |
Importiert Daten aus einer Transferdatei in die Datenbank. Die Tabellen werden implizit auch angelegt, falls sie noch nicht vorhanden sind (siehe Kapitel Abbildungsregeln). Falls die Tabellen in der Datenbank schon vorhanden sind, können sie zusätzliche Spalten enthalten (z.B. bfsnr, datum etc.), welche beim Import leer bleiben. Falls beim Import ein Datensatz-Identifikator (–dataset) definiert wird, darf dieser Datensatz-Identifikator in der Datenbank noch nicht vorhanden sein. Um die bestehenden Daten zu ersetzen, kann die Option –replace verwendet werden. TODO: Die Tabellen sind schon vorhanden (und entsprechen (nicht) der ili-Klasse). |
--import |
Importiert Daten aus einer Transferdatei in die Datenbank. Die Tabellen werden implizit auch angelegt, falls sie noch nicht vorhanden sind (siehe Kapitel Abbildungsregeln). Falls die Tabellen in der Datenbank schon vorhanden sind, können sie zusätzliche Spalten enthalten (z.B. bfsnr, datum etc.), welche beim Import leer bleiben. Falls beim Import ein Datensatz-Identifikator (–dataset) definiert wird, darf dieser Datensatz-Identifikator in der Datenbank noch nicht vorhanden sein. Um die bestehenden Daten zu ersetzen, kann die Option –replace verwendet werden. TODO: Die Tabellen sind schon vorhanden (und entsprechen (nicht) der ili-Klasse). |
3.2 Optionen
3.2.1 --import
Importiert Daten aus einer Transferdatei in die Datenbank.
Die Tabellen werden implizit auch angelegt, falls sie noch nicht vorhanden sind (siehe Kapitel Abbildungsregeln). Falls die Tabellen in der Datenbank schon vorhanden sind, können sie zusätzliche Spalten enthalten (z.B. bfsnr, datum etc.), welche beim Import leer bleiben.
Falls beim Import ein Datensatz-Identifikator (–dataset) definiert wird, darf dieser Datensatz-Identifikator in der Datenbank noch nicht vorhanden sein. Um die bestehenden Daten zu ersetzen, kann die Option –replace verwendet werden.
TODO: Die Tabellen sind schon vorhanden (und entsprechen (nicht) der ili-Klasse).
3.2.2 --update
Aktualisiert die Daten in der Datenbank anhand einer Transferdatei, d.h. neue Objekte werden eingefügt, bestehende Objekte werden aktualisiert und in der Transferdatei nicht mehr vorhandene Objekte werden gelöscht. Diese Funktion bedingt, dass das Datenbankschema mit der Option --createBasketCol
erstellt wurde, und dass die Klassen und Topics eine stabile OID haben.
lorem ipsum
Fußnoten
GML 3.2; die verwendeten Kodierungsregeln entsprechen eCH-0118-1.0↩︎