6. Modul FILEGDBOUT - ESRI File-Geodatabase schreiben

6.1. Allgemeines

Mit dem Modul können Objekte in eine ESRI File-Geodatabase geschrieben werden.

Der Modul beinhaltet folgende Besonderheiten:

  • Schreibt Daten mit Geometrien in eine Geodatabase.

  • Legt Tabellen für die Daten und die Spatial Indexe entprechende der ESRI File-Geodatabase an.

  • Füllt das Geodatabase Repository mit den notwendigen Definitionen.

  • Die Geodatabase kann nach dem Schreiben der Daten direkt mit den ESRI-Anwendungen weiterbearbeitet werden.

Der Modul wird mit:

|INCL \script\filegdbout.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

6.2. ESRI Lizenz

Der Module benötigt keine ESRI Lizenz. Der Modul verwendet das ESRI File Geodatabase API.

rcGIS Engine Runtime Lizenz.

6.3. Parametermap FILEGDBOUT_PARAM

Folgende Parameter können in der Map FILEGDBOUT_PARAM für den Modul gesetzt werden:

Parameterreq/optBeschreibung
SRIDr<STRING>. Der Name des ArcGIS Spatial Reference System. Es muss der Name eines ArcGIS bekannten Projected Coordinate Systems sein. Beispiele: 'CH1903_LV03', 'CH1903+_LV95'
DATASEToON oder OFF, Default = OFF. Definiert, ob die in die Datenbank geschriebenen Daten als Datasets verwaltetet werden. Sie dazu mehr unter dem Kapitel Datasets im Module DBOUT.
STATISTICSoON oder OFF, Default = OFF. Statistik anzeigen.

6.4. Objektmodell

Der Modul verlangt pro OUT-Objekt folgende Systemkomponenten:

Komponentereq/optBeschreibung
OUT.TABLE(s)rTablename des OUT Objekts.
OUT.GDB_DATASET(s)oGeodatabase Dataset, in welches das Objekt geschrieben werden soll.
OUT.<Attribut>(s)oAttributname 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 FILEGDBOUT_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 das Kapitel mit der Datenbank Modellgenerierung.

Den Objekten wird automatisiert im Attribute OBJECTID ein eindeutiger Schlüssel vergeben. Das Attribut OBJECTID ist nicht zu definieren.

6.5. Record Definitionen

Mit Record Definitionen können nicht nur Objekte in die Datenbank geschrieben werden, sondern auch Datenbank-Tabellen automatisiert in der Datenbank inklusive dem Geodatabase Repository angelegt werden. Eine Record Definition sieht wie folgt aus.

MAP RECORD_<n>
   TABLE => <Table-Name>
   GDB_DATASET => <Dataset-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.

GDB_DATASET

Diese Komponente ist optional und definiert das Geodatabase Dataset.

[Anmerkung]

Im GDB-Repository können nur Objekte mit einer Geometrie einem Dataset zugeordnet werden.

Wird diese Komponente bei einem Objekt definiert, das keine Geometrie aufweist, wird eine Dummy-Geometrie in der Form eines Punktes dem Objekt angefügt. Damit kann das Objekt dem Dataset zugeordnet werden.

Um ein Objekt, das keine Geometrie aufweist, als reine Tabelle zu transferieren, darf diese Komponente nicht definiert werden.

<Dataset-Name>

Definiert als Wert der Komponente GDB_DATASET das Geodatabase Dataset..

<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.

CHAR(<length>)

Stringtypen sind immer als CHAR mit der Länge <length> zu definieren..

NUMBER(p,s)

Number-Type.

INTEGER

Integer-Type.

DATE

Date-Type.

Ein Datum kann übergeben werden als:

- INTEGER im Format YYYYMMDD z.B.20141204

- STRING im Format 'YYYY-MM-DD' z.B '2014-12-04'

Ein Datum mit Zeit kann übergeben werden als

- STRING im Format 'YYYY-MM-DD HH24-MI-SS' z.B '2014-12-04 14:09:59'

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.

[Anmerkung]

Geodatabase erlaubt nur eine Geometrie-Definition pro Tabelle. Deshalb kann pro Record-Definition nur ein Geometrie-Attribut definiert werden.

[Anmerkung]

Um mögliche Einschränkungen von SDE zu umgehen, ist es empfehlenswert, den Geometrie-Attributen den Name SHAPE zu vergeben.

<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_15
   TABLE => Bodenbedeckung_BoFlaeche_Area
   GDB_DATASET => Bodenbedeckung
   OBJID => CHAR(32),IN.OBJID
   Entstehung => CHAR(32),IN.Entstehung.OBJID
   Qualitaet => INTEGER,IN.Qualitaet
   Qualitaet_TXT => CHAR(7),IN.Qualitaet
   Art => INTEGER,IN.Art
   Art_TXT => CHAR(47),IN.Art_TXT
   SHAPE => GEOMETRY(area;2D;FALSE),IN.GEOM
END_MAP

6.6. Datasets

Zur Verwaltung von Datasets in der Datenbank ist das analoge Kapitel des Modules DBOUT zu beachten.

Um ein Dataset aus einer Geodatabase Datenbank zu löschen, steht folgende Konfiguration zur Verfügung:

ILTOOLS_DIR\system\script\il2filegdb\filegdbdatasetdelete.cfg ! not implemented yet

6.7. Datenbank Modellgenerierung mit CONFIG_PARAM.GENERATE_MODEL

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 inklusive den Definitionen für das Geodatabase Repository generiert, falls es nicht schon generiert wurde.

6.8. Exportierte Prozeduren und Methoden

ProzedurFILEGDBOUT_OPEN [s input][]
BeschreibungÖffnet eine bestehende Datenbank oder kreiert neue Datenbank. Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
'c:\data\filegdb.gdb' FILEGDBOUT_OPEN
ProzedurFILEGDBOUT_WRITE_OBJECT0
Beschreibung

Schreibt ein Objekt in die Datenbank. Das OUT-Objekt muss gemäss dem Objektmodell gefüllt sein.

Beispiel
FILEGDBOUT_WRITE_OBJECT0
ProzedurFILEGDBOUT_WRITE_RECORD1 ! s recordname
Beschreibung

Schreibt ein Objekt definiert mit <recordname> in die Datenbank. <recordname> ist der Name einer Record-Definition (siehe weiter oben).

Beispiel
... => FILEGDBOUT_WRITE_RECORD1,RECORD_1
ProzedurFILEGDBOUT_CLOSE [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
FILEGDBOUT_CLOSE

6.9. Skriptbeispiel

! Diese ICS Konfiguration liest ein INTERLIS FIle,
! erzeugt eine Tabelle für LFP's in der Datenbank
! inklusive den Definitionen des Geodatabase Repository
! und schreibt die LFP's in die Tabelle.

|LICENSE \license\iltoolspro.lic

MAP CONFIG_PARAM
   GENERATE_MODEL => ON
END_MAP

MAP USER_INPUT1
   DIALOG        => FILE
   MESSAGE       => 'Enter INTERLIS Input File'
   FILE_FILTER   => itf
   FILE_EXISTS   => TRUE
   OPT           => input
END_MAP

MAP USER_INPUT2
   DIALOG        => DIRECTORY
   MESSAGE       => 'Enter SDE or Database Output File'
   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 FILEGDBOUT_PARAM
   SRID            => 'CH1903+_LV95'
   STATISTICS      => ON
   DATASET         => ON
END_MAP

MAP RECORD_1
   TABLE => Fi_LFP1
   GDB_DATASET => FixpunkteKategorie1
   OBJID => CHAR(40),IN.OBJID
   Entstehung => CHAR(40),IN.Entstehung.OBJID
   NBIdent => CHAR(12),IN.NBIdent
   Nummer => CHAR(12),IN.Nummer
   SHAPE => 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\filegdbout.mod
|INCL \script\il2filegdb\il2filegdb.out
|INCL \script\run1.prg