Mit dem Skriptmodul können Objekte in eine SQLite-Datenbank geschrieben werden.
Insbesondere werden die Spezifikationen von OGC Geopackages (Vektor-Geometrien) unterstützt.
Der Modul wird mit:
|INCL \script\sqliteout.mod
in einer ICS RUN1-Konfiguration verfügbar gemacht.
Folgende Parameter können in der Map SQLITEOUT_PARAM für den Modul gesetzt werden:
Parameter | req/opt | Beschreibung |
STATISTICS | o | ON oder OFF, Default = OFF. Statistik anzeigen. |
DATASET | o | ON oder OFF ,
Default = OFF . Definiert, ob die in die
Datenbank geschriebenen Daten als Datasets verwaltetet
werden. Sie dazu mehr unter dem Kapitel Datasets. |
SRID | o | <STRING> . Die Nummer des
EPSG Spatial Reference System. Die SRID muss in der Table
gpkg_spatial_ref_sys enthalten sein. 2056
für LV95, 21781 für LV03. |
STROKE | o | <real> . Stroke-Tolerance
zur Auflösung von Kreisbögen in Liniensegmente. Als
Stroke-Tolerance können dieselben Werte wie für die
ICS-Methode ICS.STROKE verwendet werden
(s.a. iG/Script Benutzer- und Referenzhandbuch). Mit
OFF werden die Kreisbögen nicht
aufgelöst. |
ST_METADATA | o | ON oder OFF ,
Default = OFF . Definiert, ob die ST_*
Metadaten in der Datenbank erzeugt werden sollen. |
Der Modul verlangt pro OUT-Objekt folgende Systemkomponenten:
Komponente | req/opt | Beschreibung |
OUT.TABLE(s) | r | Tablename des OUT Objekts. |
OUT.<Attribut>(s) | o | Attributname der Tabelle. Der Wert der Komponente beinhaltet den Wert für die Datenbank. Der Typ des Werts muss mit dem Typ des Attributs in der Datenbank übereinstimmen. Es können beliebig viele Attribute definiert werden. |
Dieses Objektmodell gilt für die Anwendung mit der
Prozedur SQLITEOUT_WRITE_OBJECT0
. Die Tabellen mit
den Attributen müssen in der Datenbank bereits bestehen oder in einer
Konfiguration mit Prozeduren und Methoden vorgängig erzeugt werden.
Falls die Datenbankstrukturen automatisiert mit dem Modul erstellt
werden sollen, so beachten Sie das Kapitel mit den Record-Definitionen
und die Prozedur SQLITEOUT_WRITE_RECORD1
.
Mit Record Definitionen können nicht nur Objekte in die Datenbank
geschrieben werden, sondern auch Datenbank-Tabellen automatisiert in der
Datenbank angelegt werden. Die Record Definitionen werden von der
Prozedur DBOUT_WRITE_RECORD1
verarbeitet. Eine Record
Definition sieht wie folgt aus.
MAP RECORD_<n>
TABLE => <Table-Name>
:
<Attribute-Name> => <Attribute-Type>,<Attribute-Value>
:
END_MAP
Die einzelnen Bestandteile einer Record-Definition sind:
RECORD_<n>
Eine Record Definition ist eine Map. Der Map-Name muss mit dem Prefix RECORD_ beginnen und eine eindeutige Nummer <n> für die Record Definition beinhalten.
TABLE
Diese Komponente ist required und definiert die Datenbank-Tabelle.
<Table-Name>
Definiert als Wert der Komponente TABLE die Datenbank-Tabelle.
<Attribute-Name>
Definiert als Komponente einen Attribut-Namen der Tabelle. Es können beliebig viele Attribute als Komponenten definiert werden.
<Attribute-Type>
Definiert den Attribut-Type in der Datenbank. Im Normalfall können der Datenbank bekannt Typen verwendet werden. Spezialtypen einer Datenbank werden eventuell nocht nicht unterstützt. Solche Spezialtypen werden bei Bedarf und auf Anfrage implementiert. Bei den Typen ist auf folgendes zu achten.
Alle Datenbanken
CHAR(<length>)
Stringtypen sind immer als
CHAR
mit der Länge
<length>
zu
definieren..
NUMBER(p,s)
Number-Type.
INTEGER
Integer-Type.
GEOMETRY(<type>;<dimension>;<HASM>)
Geometrien müssen als Type
GEOMETRY
definiert werden. Dabei
sind folgende weiteren Definitionen notwendig.
<type>
Type der Geometrie, einer der Werte:
point|line|area.
<dimension>
Dimension der Geometrie, einer der Werte:
2D
|3D.
<HASM>
Geometrie besitzt die Measure-Dimension, einer
der Werte:
TRUE|FALSE
.
SQLite OGC Geopackage erlaubt nur eine Geometrie-Definition pro Tabelle. Deshalb kann pro Record-Definition nur ein Geometrie-Attribut definiert werden. |
Um mögliche Einschränkungen von SDE zu umgehen, ist es
empfehlenswert, den Geometrie-Attributen den Name
|
HASM wir zur Zeit nicht unterstützt. |
<Attribut-Value>
Definiert den Wert für das Attribut. Als Wert können absolute Werte oder ICS-Variablen, die einen Wert beinhalten - z.B. IN.OBJID - verwendet werden.
Beispiel einer Record Definition.
MAP RECORD_1 TABLE => Bodenbedeckung_BoFlaeche_Area OBJID => CHAR(10),IN.OBJID Entstehung => CHAR(10),IN.Entstehung.OBJID Qualitaet => CHAR(30),IN.Qualitaet Art => INTEGER,IN.Art Art_TXT => CHAR(47),IN.Art_TXT Herkunft => CHAR(30),IN.Herkunft GEOM => GEOMETRY(area;2D),IN.GEOM END_MAP
Mit dem Parameter DBOUT_PARAM.DATASET => ON
kann der Modul veranlasst werden, die Daten in Datasets zu
verwalten. In der Regel werden verschiedene Datasets in einen Datenbank
geschrieben. Die einzelnen Datasets können danach als Subset des Daten
nachgeführt oder gelöscht werden. Typischerweise bildet ein
INTERLIS-File ein solches Dataset. Falls der Dataset-Parameter
eingeschaltet ist, wird in der Datenbank folgendes angelegt:
CREATE TABLE GS_FILE ( FileID INTEGER -- Schlüssel für Dataset ModelName CHAR(255) -- Modellname (INTERLIS) FileName CHAR(255) -- Filenamen DateFile INTEGER -- YYYYMMDD Datum des Files DateUpload INTEGER -- YYYYMMDD Datum des lesen in die Datenbank UserUpload CHAR(255) -- eventuell ein Username ); CREATE TABLE <Data-Table> ( GS_FileID INTEGER -- Fremdschlüssel für Dataset : );
Die Tabelle GS_FILE
verwaltet die Datasets.
Jedes Dataset erhält eine eindeutigen Schlüssel im Attribut
FileID
. Jede angelegte Tabelle für die Daten erhält
ein Attribut GS_FileID
, das den Fremdschlüssel des
Datasets beinhalten.
Wird ein Dataset (File) das erste Mal in die Datenbank geschrieben
(INSERT) , wird der Eintrag in GS_FILE
generiert, und
jeder Daten-Record erhält den Fremdschlüssel des Datasets.
Wird ein Dataset (File) ein nächstes Mal in die Datenbank
geschrieben (UPDATE) , wird der Eintrag in GS_FILE
mit den Daten nachgeführt, die bestehenden Daten des Datasets in der
Datenbank gelöscht und die neuen Daten in die Datenbank
geschrieben.
Falls basierend auf den Record-Definitionen vor einem
Datentransfer das gesamte Datenbankmodell erstellt werden soll, so ist
der Parameter CONFIG_PARAM.GENERATE_MODEL
auf
ON
zu setzten:
MAP CONFIG_PARAM GENERATE_MODEL => ON END_MAP
Entsprechend den Record-Definitionen wird vor einem Datentransfer das Datenbankmodell angelegt, falls es nicht schon angelegt wurde.
Prozedur | SQLITEOUT_OPEN [s input][] |
Beschreibung | Öffnet eine Datenbank in
Abhängigkeit von Die Prozedur wird von RUN1 automatisch aufgerufen. |
Beispiel |
|
Prozedur | SQLITEOUT_WRITE_OBJECT0 |
Beschreibung | Schreibt ein Objekt in die Datenbank. Das OUT-Objekt muss gemäss dem Objektmodell gefüllt sein. |
Beispiel |
|
Prozedur | SQLITEOUT_WRITE_RECORD1 ! s recordname |
Beschreibung | Schreibt ein Objekt
definiert in
|
Beispiel |
|
Prozedur | SQLITEOUT_CLOSE [][] |
Beschreibung | Schliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen. |
Beispiel |
|
! Diese ICS Konfiguration liest ein INTERLIS FIle, ! erzeugt eine Tabelle für LFP's in der Datenbank ! und schreibt die LFP's in die Tabelle. |LICENSE \license\iltools.lic MAP USER_INPUT1 DIALOG => FILE MESSAGE => 'Enter INTERLIS Input File' FILE_FILTER => itf FILE_EXISTS => TRUE OPT => input END_MAP MAP USER_INPUT2 DIALOG => FILE MESSAGE => 'Enter SQLITE Output File' FILE_FILTER => gpkg;db FILE_EXISTS => FALSE OPT => output END_MAP MAP ILIN_PARAM INTERLIS_DEF => '\models\DM01AVCH24LV95D.ili' STATISTICS => ON CALC_SURFACE => ON ENUM_TO_TEXT => ON TRACE => OFF END_MAP MAP ILIN_TOPO DEFAULT => OFF END_MAP MAP SQLITEOUT_PARAM STATISTICS => ON DATASET => ON SRID => 2056 END_MAP MAP RECORD_1 TABLE => FixpunkteKategorie1_LFP1 OBJID => CHAR(32),IN.OBJID Entstehung => CHAR(32),IN.Entstehung.OBJID NBIdent => CHAR(12),IN.NBIdent Nummer => CHAR(12),IN.Nummer Geometrie => GEOMETRY(point;2D;FALSE),IN.Geometrie HoeheGeom => NUMBER(7,3),IN.HoeheGeom LageGen => NUMBER(4,1),IN.LageGen LageZuv => INTEGER,IN.LageZuv LageZuv_TXT => CHAR(4),IN.LageZuv_TXT HoeheGen => NUMBER(4,1),IN.HoeheGen HoeheZuv => INTEGER,IN.HoeheZuv HoeheZuv_TXT => CHAR(4),IN.HoeheZuv_TXT Begehbarkeit => INTEGER,IN.Begehbarkeit Begehbarkeit_TXT => CHAR(14),IN.Begehbarkeit_TXT Punktzeichen => INTEGER,IN.Punktzeichen Punktzeichen_TXT => CHAR(17),IN.Punktzeichen_TXT END_MAP MAP INPUT_SOURCES I1 => ILTOPO,OPT.input END_MAP MAP INOUT I1 => IN.TOPIC,IN.TABLE I1,FixpunkteKategorie1,LFP1 => R_1,RECORD_1 I1,* => OFF END_MAP |INCL \script\iltopo.mod |INCL \script\sqliteout.mod |INCL \script\run1.prg