13. Modul ILOUT - INTERLIS 1 schreiben

13.1. Allgemeines

Mit dem Modul ILOUT können Objekte in eine INTERLIS 1 .itf Datei geschrieben werden. Der Modul liest auch die zugehörigen INTERLIS 1 Datenmodelle (.ili Dateien). Jedes Objekt wird vom Modul auf seine Konsistenz gegenüber den INTERLIS 1 Datenmodellen überprüft. Falls z.B. zwingende Attribute vergessen oder falsche Attributwerte gefunden werden, werden entsprechende Fehlermeldungen ausgegeben.

Der Modul wird mit:

|INCL \script\ilout.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

13.2. Abhängigkeiten von anderen Modulen

Keine Abhängigkeiten vorhanden.

13.3. Parametermap ILOUT_PARAM

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

Parameterreq/optBeschreibung
INTERLIS_DEFrFilename des INTERLIS Definitionsfiles. Die Angabe des Parameters ist obligatorisch
FORMATrITF oder XTF, Default = ITF. Definiert das Output Datenformat.
MATH_DEGREESrON oder OFF, Default = OFF. DEGREES im mathematischen Sinn interpretieren, d.h. 0.0 = horizontal, Orientierung = Gegenuhrzeigersinn.
DOUBLEPOINT_CHECKrON oder OFF, Default = OFF. Nacheinanderfolgende dopplete Punkte in Linien testen.
DEBUGrON oder OFF, Default = OFF. Debugmodus ein oder aus.
STATUSrEnthält nach dem Schreiben eines Objektes einen Fehlerstatus, falls ein Fehler aufgetreten ist.
STATISTICSrON oder OFF, Default = OFF. Statistik anzeigen.

13.4. Objektmodell

Der Modul verlangt pro OUT-Objekt folgende Systemkomponenten:

Komponentereq/optBeschreibung
OUT.TOPIC(s) r

Topic des Objekts.

OUT.TABLE(s) r

Table des Objekts.

OUT.OBJID(s)rTransferidentifikation des Objekts .

Die restlichen Objektkomponenten sind abhängig von der dazughörigen INTERLIS Tabelle (s.a. OUT.TOPIC bzw. OUT.TABLE). Alle INTERLIS Attribute werden als Komponenten des OUT-Objekts mit dem gleichem Namen erwartet. Die ICS Datentypen werden wie folgt auf INTERLIS Datentypen abgebildet:

INTERLIS DatentypICS Datentyp
IRANGEint
RRANGE

real

Textstring
GRADSreal
DEGREESreal
RADIANSreal
ENUMERATION

int oder string

COORD2point
COORD3point
POLYLINEline
SURFACEarea
AREApoint (Zentroid) und area (Fläche)

13.5. Exportierte Prozeduren und Methoden

ProzedurILOUT_OPEN ! [s input][]
BeschreibungÖffnet eine neue INTERLIS 1 Datei <input> und initialisiert den Modul. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
'test.itf' ILOUT_OPEN
ProzedurILOUT_WRITE_OBJECT ! [][]
Beschreibung

Schreibt das nächste OUT-Objekt in die geöffnete INTERLIS 1 Datei.

Beispiel
ILOUT_WRITE_OBJECT
ProzedurILOUT_WRITE_SURFACE ! [s Surface-Table][]
Beschreibung

Schreibt zu einem Hauptobjekt die Surface in die geöffnete INTERLIS 1 Datei. Muss nach ILOUT_WRITE_OBJECT angwendet werden. In OUT.OBJID muss die Transferidentifikation des Hauptobjekts, in IN.GEOM die Surface-Fläche enthalten sein.

Beispiel
'Einzelobjekte' => OUT.TOPIC
'Flaechenelement' => OUT.TABLE
'1' => OUT.OBJID
ILOUT_WRITE_OBJECT
'Flaechenelement_Geometrie' ILOUT_WRITE_SURFACE
ProzedurILOUT_WRITE_SURFACE_LINEATTR ! [s Surface-Table, s Line-Attribute-Name][]
Beschreibung

Wie ILOUT_WRITE_SURFACE mit dem zusätzlichen Schreiben eines eventuell in der Geometrie enthaltenen Linienattributs.

Beispiel
'Einzelobjekte' => OUT.TOPIC
'Flaechenelement' => OUT.TABLE
'1' => OUT.OBJID
ILOUT_WRITE_OBJECT
'Flaechenelement_Geometrie' 'Linienart' ILOUT_WRITE_SURFACE_LINEATTR
ProzedurILOUT_WRITE_COMMENT ! [s Comment][]
Beschreibung

Schreibt eine Kommentarzeile in den SCNT Abschnitt der .itf Datei.

Beispiel
'dies ist ein Test' ILOUT_WRITE_COMMENT
ProzedurILOUT_CLOSE ! [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
ILOUT_CLOSE

13.6. Skriptbeispiel

! Diese ICS Konfiguration kopiert alle von ILIN
! gelesenen Objekte mit ILOUT in in eine .itf Datei.

|LICENSE \license\iltools.lic

MAP USER_INPUT1
   DIALOG => FILE ! FILE | STRING | ODBC
   MESSAGE => 'Enter .itf Input File'
   FILE_FILTER => itf
   FILE_EXISTS => TRUE
   OPT => input
END_MAP

MAP USER_INPUT2
   DIALOG => FILE ! FILE | STRING | ODBC
   MESSAGE => 'Enter .itf Output File'
   FILE_FILTER => itf
   FILE_EXISTS => FALSE
   OPT => output
END_MAP

MAP ILIN_PARAM
   INTERLIS_DEF    => \models\Grunddatensatz.ili
   STATISTICS      => ON
END_MAP

MAP ILOUT_PARAM
   INTERLIS_DEF    => \models\Grunddatensatz.ili
   STATISTICS      => ON
END_MAP

MAP INPUT_SOURCES
   I1 => ILIN,OPT.input
END_MAP

MAP INOUT
   I1 => COPY_INOUT0
END_MAP

|INCL \script\ilin.mod
|INCL \script\ilout.mod

PROCEDURE COPY_INOUT0
   &OUT MAPCLEAR
   &IN MAPRESET
   WHILE &IN MAPSCAN DO
      => VAR.ATTR
      => VAR.VALUE
      IF &VAR.VALUE GET_TYPE = 'ilink' THEN
         ! ilink in string umwandeln
         &VAR.VALUE ILIN.GET_ILINK_KEY => VAR.VALUE
      END_IF
      &OUT VAR.ATTR VAR.VALUE MAPINS
   END_WHILE
   ILOUT_WRITE_OBJECT
END_PROCEDURE

|INCL \script\run1.prg