8. Modul GMMDBOUT - Intergraph GeoMedia ACCESS Datenbank schreiben

8.1. Allgemeines

Mit dem Skriptmodul können Objekte in eine ACCESS-Datenbank nach GeoMedia Spezifikationen geschrieben werden. Der Modul unterstützt speziell das GeoMedia Datenmodell und die GeoMedia Geometrien.

Der Modul beinhaltet folgende Besonderheiten:

  • Schreibt Daten nach Access.

  • Legt Tabellen für die Daten an.

  • Schreibt die notwendigen Definitionen für GeoMedia.

  • Schreibt die Geometrien für GeoMedia.

  • Schreibt die GeoMedia Definitionen in das GeoMedia Repository.

  • Die Datenbank kann nach dem Schreiben der Daten direkt mit GeoMedia verwendet werden.

Der Modul wird mit:

|INCL \script\gmmdbout.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

8.2. Abhängigkeiten von anderen Modulen

Der Modul GMMDBOUT ist eine Erweiterung des Modules DBOUT. Alle in dem Modul DBOUT beschriebenen Anteile gelten daher auch für das Modul GMMDBOUT. Ziehen Sie deshalb die Dokumentation dieser Module bei.

8.3. Parametermap DB_PARAM

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

Parameterreq/optBeschreibung
SOURCEoODBC-Source der Datenbank. Muss gesetzt werden, falls die ODBC-Source nicht interaktiv abgefragt wird.
USERoDatenbank User für die Verbindung mit der ODBC-Source. Muss gesetzt werden, falls die ODBC-Source nicht interaktiv abgefragt wird.
PASSWORDoDatenbank Password für die Verbindung mit der ODBC-Source. Muss gesetzt werden, falls die ODBC-Source nicht interaktiv abgefragt wird.
TRACEoON oder OFF, Default = OFF. Für jedes gelesene Objekt eine Zeile ausgeben.

8.4. Parametermap DBOUT_PARAM

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

Parameterreq/optBeschreibung
SQLTRACEoON oder OFF, Default = OFF. Zeigt als sql-statements im Logfile an.
STATISTICSoON oder OFF, Default = OFF. Statistik anzeigen.
DATASEToON oder OFF, Default = OFF. Definiert, ob die in die Datenbank geschriebenen Daten als Datasets verwaltetet werden. Sie dazu mehr unter dem Kapitel Datasets. Der Wert ON hebt den Parameter DELETE_OLD auf.
SEED_DBoSTRING. Definiert, eine Seed-Datenbank für die Output-Datenbank. Ist die Output-Datenbank nicht vorhanden, wird diese Seed-Datenbank in die Output-Datenbank vor dem Transfer kopiert. Die Seed-Datenbank beinhaltet bereits das GDB-Repository. Beispiel: c:\iltools\system\db\ESRI\GDB_seed_91.mdb. Siehe mehr dazu unter Modell Generierung.

8.5. Parametermap GMMDBOUT_PARAM

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

Parameterreq/optBeschreibung
CSGUIDrSTRING. Definiert das GUID des Koordinatensystems. Die definierte CSGUID muss in der Output-Datenbank in der GeoMedia-Tabelle GCoordSystem vorhanden sein. Beispiel: CSGUID => {ABD80B73-98D3-4537-8119-FBD238F2D703} für Schweizer Koordinatensystem.

Für die Anwendung von GeoMedia unter Access ist die entsprechende Dokumentation von INTERGRAPH zu beachten.

8.6. Objektmodell

Der Modul verlangt pro OUT-Objekt folgende Systemkomponenten:

Komponentereq/optBeschreibung
OUT.TABLE(s)rTabellenname in welche das OUT-Objekt geschrieben werden soll.
OUT.<Attribut>(o)oAttributname der Tabelle. Der Wert der Komponente beinhaltet den Wert für die Datenbank. Der Type des Wertes muss mit dem Type des Attributes in der Datenbank übereinstimmen. Es können beliebig viele Attribute definiert werden.

Dieses Objektmodell gilt für die Anwendung mit der Prozedur GMMDBOUT_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, muss man das Kapitel mit den Record-Definitionen und die Prozedur GMMDBOUT_WRITE_RECORD1 beachten.

8.7. Record Definitionen

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 GMMDBOUT_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 obligatorisch und definiert die Datenbank-Tabelle.

<Table-Name>

Definiert als Wert der Komponente TABLE die Datenbank-Tabelle.

<Attribute-Name>

Definiert als Komponente einen Attribut-Namen innerhalb 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. Je nach Datenbank wird der Typ vom Modul in einen der Datenbank bekannten Type umgewandelt z.B. Oracle als VARCHAR2.

NUMBER

Number-Typen ohne Argumente werden vom Modul als NUMBER(38,5) interpretiert.

MEMO

Stringtyp für Texte > 255 Zeichen.

DATETIME

Datums/Zeit Typ. Der <Attribute-Value> muss der SQL-Spezifikation von MSACCESS entsprechen. Zum Beispiel für ein Datum <Attribute-Value> = '03.04.1993' , für Datum/Zeit <Attribute-Value>='03.04.1993 17:34:00'.

GEONEDIA_GEOMETRY(<type>;<dimension>)

GeoMedia Geometrien müssen als Type GEOMEDIA_GEOMETRY definiert werden. Dabei sind folgende weiteren Definitionen notwendig.

<type>

Type der Geometrie, einer der Werte: point|line|area|gmtext.

<dimension>

Dimension der Geometrie, einer der Werte 2D|3D. GeoMedia sepchert Geometrien immer als 3D ab. Ist 2D definiert, so werden eventuelle Z-Kordinaten auf 0.0 gesetzt. Ist 3D definiert, so werden eventuell nicht vorhandene Z-Koordinaten auf 0.0 gesetzt.

<Attribut-Value>

Definiert den Wert für das Attribut. Als Wert können Konstanten oder ICS-Variablen, die einen Wert beinhalten - z.B. IN.OBJID - verwendet werden.

Beispiel einer Record Definition.

MAP RECORD_1
   TABLE => Fixpunkte_LFP
   OBJID => CHAR(10),IN.OBJID
   ENTSTEHUNG => CHAR(10),IN.Entstehung.OBJID
   NUMMER => CHAR(12),IN.Nummer
   GEOMETRIE => GEOMEDIA_GEOMETRY(point;3D),IN.Geometrie
   LAGEZUV_TXT => CHAR(4),IN.LageZuv_TXT
   HOEHEZUV_TXT => CHAR(4),IN.HoeheZuv_TXT
   BEGEHBARKEIT_TXT => CHAR(14),IN.Begehbarkeit_TXT
   SYMBOLORI => NUMBER,IN.SymbolOri
   ART_TXT => CHAR(4),IN.Art_TXT
   HERKUNFT => CHAR(30),IN.Herkunft
END_MAP

8.8. Datasets

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

8.9. 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 und das Script il2gmmdb.lib zu includen:

MAP CONFIG_PARAM
   GENERATE_MODEL => ON
END_MAP
:
|INCL \script\il2gdb\il2gmmdb.lib

Entsprechend den Record-Definitionen wird vor einem Datentransfer das Datenbankmodell inklusive den Definitionen für das GeoMedia Repository generiert, falls es nicht schon generiert wurde.

In der Datenbank müssen die Tabellen des GeoMedia Repository bereits bestehen. Als leere GeoMedia Datenbank mit den Tabellen des GeoMedia Repository stehen folgende Datenbanken zur Verfügung:

ILTOOLS_DIR\system\db\GeoMedia\GeoMedia_seed.mdb

Kopieren Sie die gewünschte Datenbank für das Anlegen einer neuen GeoMedia-Datenbank oder erzeugen Sie mit GeoMedia eine neue leere GeoMedia-Datenbank.

Oder defineren Sie mit DBOUT_PARAM.SEED_DB eine Seed-Datenbank, die das GeoMedia Repository bereits beinhaltet.

Um das Datenmodell inklusive den Daten und den Definitionen im GeoMedia Repository aus einer GeoMedia Datenbank zu löschen, steht folgende Konfiguration zur Verfügung:

ILTOOLS_DIR\system\script\il2gmmdb\gmmdbdelete.cfg

Wird das Datenmodell im GeoMedia Repository durch die Schnittstelle generiert, ist folgendes vor Verwendung der Datenbank mit GeoMedia zu beachten.

8.10. Exportierte Prozeduren und Methoden

Der Modul beinhaltet alle Prozeduren und Methoden wie der Modul DBOUT. Ziehen Sie deshalb die Dokumentation des Modules DBOUT bei.

Zusätzlich stellt der Modul GMMDBOUT folgende Prozeduren und Methoden zur Verfügung.

ProzedurGMMDBOUT_OPEN [][]
BeschreibungÖffnet eine Datenbank definiert mit DB_PARAM.SOURCE. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
GMMDBOUT_OPEN
ProzedurGMMDBOUT_WRITE_OBJECT0
BeschreibungSchreibt einen Objekt in die Datenbank. Das OUT-Objekt muss gemäss dem Objektmodell vorbereitet sein.
Beispiel
GMMDBOUT_WRITE_OBJECT0
ProzedurGMMDBOUT_WRITE_RECORD1 ! s recordname
Beschreibung

Schreibt ein Objekt definiert in <recordname> in die Datenbank. <recordname> ist der Name einer Record-Definition (siehe weiter oben). Je nach den gesetzten Parametern führt die Prozedur beim ersten Aufruf für eine Record-Definition folgende Aktionen auf der Datenbank aus:

  1. Die Tabelle oder deren Inhalt wird gelöscht, falls definiert durch Parameter.

  2. Die Tabelle wird erzeugt, falls definiert durch Parameter.

  3. Die GeoMedia Metadefinitionen werden generiert, falls definiert durch Parameter.

  4. Das Objekt wird in die Datenbank geschrieben.

Beispiel
... => GMMDBOUT_WRITE_RECORD1,RECORD_1
ProzedurGMMDBOUT_CLOSE [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
GMMDBOUT_CLOSE
MethodeGEOMEDIA.GEOM_TO_BLOB [g geom][b blob]
BeschreibungÜbersetzt eine ICS-Geometrie point,line oder area in eine GeoMedia Geometrie als Blob. Falls die Geometrien nicht übersetzt werden können, wird auf dem Stack ein NULL-Blob zurückgegeben.
Beispiel
IN.GEOM GEOMEDIA.GEOM_TO_BLOB => VAR.GEOMEDIA_GEOM
 

Folgende Konversionen werden durchgeführt:

point

to gdbPoint (10)

line

to gdbLinear (1)

area

to gdbAreal (2)

Für die Unterstützung des Produktes GeoMedia mit Access stehen folgende Prozeduren zur Verfügung.

MethodeGEOMEDIA.GEOM_TO_BLOB_POINT ! [p Pos, r Rot] [b blob]
Beschreibung

Erzeugt einen GeoMedia oriented Point.

Beispiel
IN.Geometrie IN.Ori GEOMEDIA.GEOM_TO_BLOB_POINT => VAR.GEOMEDIA_GEOM
MethodeGEOMEDIA.GEOM_TO_BLOB_TEXT ! [s Text, p Pos, r Rot, i Hali, i Vali] [b blob]
Beschreibung

Erzeugt einen GeoMedia Text.

Beispiel
IN.Name IN.Geometrie IN.Ori IN.HAli IN.VAli GEOMEDIA.GEOM_TO_BLOB_TEXT => VAR.SDO_GEOM
ProzedurGMMDBOUT_POINT_CREATE2 ! p Pos, r Rot => IN.GMPoint
Beschreibung

Erzeugt einen GeoMedia oriented Point. Die GeoMedia Geometrie wird in IN.GMPoint abgelegt. IN.GMPoint kann in der Weiterverabietung genutzt werden, zum Beispiel in einer Record-Definition.

Beispiel
... => GMMDBOUT_POINT_CREATE3,IN.Geometrie,IN.Ori
ProzedurGMMDBOUT_TEXT_CREATE5 ! s Text, p Pos, r Rot, i Hali, i Vali => IN.GMText
Beschreibung

Erzeugt einen GeoMedia Text. Die GeoMedia Geometrie wird in IN.GMText abgelegt. IN.GMText kann in der Weiterverabietung genutzt werden, zum Beispiel in einer Record-Definition.

Beispiel
... => GMMDBOUT_TEXT_CREATE6,IN.Name,IN.Geometrie,IN.Ori,IN.HAli,IN.VAli

Neben diesen Prozeduren des Moduls stehen auch die Prozeduren und Methoden des Moduls DBOUT zur Verfügung. Diese Prozeduren und Methoden sind im Modul DBOUT beschrieben.

8.11. Skriptbeispiel

! Diese ICS Konfiguration liest ein INTERLIS FIle,
! erzeugt eine Tabelle für LFP's in der Datenbank
! inklusive den Definitionen des GEOMEDIA 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        => FILE
   MESSAGE       => 'Enter Access Output Database'
   FILE_FILTER   => mdb
   FILE_EXISTS   => FALSE
   OPT           => output
END_MAP

MAP ILIN_PARAM
   INTERLIS_DEF => \models\Grunddatensatz.ili
   STATISTICS   => ON
   CALC_SURFACE => ON
   ENUM_TO_TEXT => ON
   TRACE        => OFF
END_MAP

MAP ILIN_TOPO
   DEFAULT => OFF
END_MAP

MAP DB_PARAM
   SOURCE     => '' ! ODBC-Source
   USER       => '' ! ODBC-User
   PASSWD     => '' ! ODBC-Password
   TRACE      => OFF
END_MAP

MAP DBOUT_PARAM
   STATISTICS      => ON
   DATASET         => ON
   SEED_DB         => \db\geomedia\geomedia_seed.mdb
END_MAP

MAP GMMDBOUT_PARAM
   CSGUID          => {ABD80B73-98D3-4537-8119-FBD238F2D703}
END_MAP

MAP RECORD_1
   TABLE => Fi_LFP
   OBJID => CHAR(10),IN.OBJID
   ENTSTEHUNG => CHAR(10),IN.Entstehung.OBJID
   NUMMER => CHAR(12),IN.Nummer
   GEOMETRIE => GEOMEDIA_GEOMETRY(point;3D),IN.Geometrie
   GMTEXT => GEOMEDIA_GEOMETRY(gmtext;2D),IN.GMText
   LAGEZUV_TXT => CHAR(4),IN.LageZuv_TXT
   HOEHEZUV_TXT => CHAR(4),IN.HoeheZuv_TXT
   BEGEHBARKEIT_TXT => CHAR(14),IN.Begehbarkeit_TXT
   SYMBOLORI => NUMBER,IN.SymbolOri
   ART_TXT => CHAR(4),IN.Art_TXT
   HERKUNFT => CHAR(30),IN.Herkunft
END_MAP

MAP INPUT_SOURCES
   I1 => ILTOPO,OPT.input
END_MAP

MAP INOUT
   I1                => IN.TOPIC,IN.TABLE
   I1,Fixpunkte,LFP  => PR_1,GMMDBOUT_WRITE_RECORD1,RECORD_1
   I1,*              => OFF
END_MAP

MAP MACRO
   PR_1 => GMMDBOUT_TEXT_CREATE5,IN.Nummer,IN.NumPos,IN.NumOri,IN.NumHAli,IN.NumVAli
END_MAP

|INCL \script\iltopo.mod
|INCL \script\gmmdbout.mod
|INCL \script\il2gmmdb\il2gmmdb.lib
|INCL \script\run1.prg