13. Modul ILTOPO - INTERLIS 1 lesen mit Topologieberechnung

13.1. Allgemeines

Mit dem Modul ILTOPO können ICS Objekte aus einer INTERLIS 1 .itf Datei gelesen werden. Der Modul interpretiert neben der .itf Datei auch das zugehörige INTERLIS 1 Datenmodell (.ili Dateien). Jedes Objekt wird vom Modul auf seine Konsistenz gegenüber dem INTERLIS 1 Datenmodell überprüft. Falls z.B. zwingende Attribute vergessen oder falsche Attributwerte gefunden werden, werden entsprechende Fehlermeldungen ausgegeben. Zudem können für den INTERLIS-Type AREA die Flächen (geschlossene Polygone) berechnet werden. Der Modul entspricht weitgehend dem Modul ILIN mit zusätzlich eingebauter automatischer Topologieberechnung.

Der Modul wird mit:

|INCL \script\iltopo.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

13.2. Abhängigkeiten von anderen Modulen

Keine Abhängigkeiten vorhanden.

13.3. Parametermap ILIN_PARAM

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

Parameterreq/optBeschreibung
INTERLIS_DEFrFilename des INTERLIS Definitionsfiles. Die Angabe des Parameters ist obligatorisch
METHA_OBJECTSrON oder OFF, Default = OFF. Methaobjekte liefern ein oder aus.
LOG_TABLErON oder OFF, Default = ON. Für jede gelesene Tabelle eine Meldung ausgeben.
TRACErON oder OFF, Default = OFF. Für jedes gelesene Objekt eine Zeile ausgeben.
ENUM_TO_TEXTrON oder OFF, Default = OFF. Aufzählungsattribute auch als Textversion liefern. Die Textversion des Attributs ist in IN.<Attribut>_TXT verfügbar.
CALC_SURFACErON oder OFF, Default = OFF. SURFACE-Geometrien berechnen und dem Hauptobjekt zuordnen.
VALUE_CHECKrON oder OFF, Default = ON. Wertebereichtests auf Attributen durchführen.
CHARSET_CHECKrON oder OFF, Default = OFF. Zeichensatz gemäss Norm SN612030 überprüfen.
MATH_DEGREESrON oder OFF, Default = OFF. DEGREES im mathematischen Sinn interpretieren, d.h. 0.0 = horizontal, Orientierung = Gegenuhrzeigersinn.
ARC_CHECKrON oder OFF, Default = OFF. Kreisbogengeometrie testen.
DOUBLEPOINT_CHECKrON oder OFF, Default = OFF. Nacheinanderfolgende doppelte Punkte in Linien testen.
TOPICSrNur Topics gemäss Liste in TOPICS lesen. Die Topics müssen als kommaseparierte Liste (z.B. Fixpunkte,Bodenbedeckung) angegeben werden.
SYNTAX_ERROR_ HALTrON oder OFF, Default = OFF. Bei einem Syntax-Error in der INTERLIS-Datei wird das weiterlesen abgebrochen.
DEBUGrON oder OFF, Default = OFF. Debugmodus ein oder aus.
SAVE_REFrON oder OFF, Default = ON. INTERLIS Referenzen unterstützen. Falls die Option eingeschaltet ist, können INTERLIS Referenzen (->) in der Skriptsprache durch Angabe des vollständigen Pfad (z.B. IN.Objekt.Nummer) aufgelöst werden . Dazu müssen die referenzierten Objekte zwischengespeichert werden. Falls die Option auf OFF gesetzt ist, werden die referenzierten Objekte nicht zwischengespeichert. Die Auflösung der Referenzen via den Pfad ist dann nicht mehr möglich, dafür ist das Lesen der Inputdatei schneller.
STATUSrEnthält nach dem Lesen eines Objekts einen Fehlerstatus, falls ein Fehler aufgetreten ist.
STATISTICSrON oder OFF, Default = OFF. Statistik anzeigen.
STATISTICS_FILEoON oder OFF, Default = OFF. Statistik mit File.
STATISTICS_MODELoON oder OFF, Default = OFF. Statistik mit Model.

13.4. Parametermap ILIN_TOPO

In der Map ILIN_TOPO sind die gewünschten Geometrie-Tabellen des Types AREA einzutragen, für welche die Toplogie berechnet werden sollen.

Parameterreq/optBeschreibung
Topic,Tabler

AREA, BOUNDARY, BAD. Mit dem Eintrag der Table der Begrenzungslinien eines AREA Typs wird definiert, dass für dieses Objekt die Topologie berechnet werden soll. Die Topologieberechnung berechnet aus den Begrenzungslinien und den Zentroiden die Flächen. Die Einträge haben folgende Bedeutung:

AREA

Mit dem Code AREA wird definiert, dass die berechneten Flächen als Objekte zurückgegeben werden sollen.

BOUNDARY

Mit dem Code BOUNDARY wird definiert, dass die berechneten, gültigen Begrenzungslinien als Objekte zurückgegeben werden sollen.

BAD

Mit dem Code BAD wird definiert, dass die berechneten ungültigen Begrenzungslinien als Objekte zurückgegeben werden sollen.

AREA, BOUNDARY, BAD können einzeln oder zusammen kommasepariert aufgeführt sein.

Beispiel A.1. ILIN_TOPO Definitionen

MAP ILIN_TOPO
   Bodenbedeckung,BoFlaeche_Geometrie => AREA,BOUNDARY
   Liegenschaften,Liegenschaft_Geometrie => AREA,BOUNDARY
END_MAP

Die obigen Definitionen berechnen für die Tables BoFlaeche_Geometrie und Liegenschaft_Geometrie die Toplogie des Types AREA aufgrund der Zentroide und der Begrenzungslinien. Der Modul liefert als zusätzliche Objekte die berechneten Objekte in den Tabellen BoFlaeche_Area, BoFlaeche_Boundary, Liegenschaft_Area und Liegenschaft_Boundary.

13.5. Objektmodell

Allgemeine Komponenten für jedes IN-Objekt
Komponentereq/optBeschreibung
IN.MODEL(s)rModel des IN Objekts.
IN.TOPIC(s) r

Topic des IN-Objekt

IN.TABLE(s) r

Table des IN-Objekts.

IN.OBJID(s)rTransferidentifikation des IN-Objekts .
IN.LINE(i)rZeilennummer des Objekts in der Inputdatei.

Normalerweise wird vom Modul pro OBJE-Zeile ein Objekt geliefert. Falls der Parmeter ILIN_PARAM.METHA_OBJECTS auf ON gesetzt wurde, werden auch für die INTERLIS Label MODL, EMOD, TOPI, ETOP, TABL, ETAB Objekte zurückgeliefert (sog. Methaobjekte).

Zusätzliche Objekte und Komponenten für Typ SURFACE Geometrietabellen

Für INTERLIS-Tabellen die implizit aus SURFACE-Deklarationen entstehen (z.B. Fixpunkte.LFPNachfuehrung_Perimeter) sind folgende zusätzlichen Objekte und Komponenten verfügbar:

Objektreq/optBeschreibung
<Maintable>_ <Geometry-Attribute>rImplizite INTERLIS Table gebildet aus der Haupttabelle mit dem SURFACE-Attribute und dem Namen des SURFACE Attributes.
Komponentereq/optBeschreibung
IN.GEOM(l)rGeometrie des Objekts.
IN.REFID(s)rReferenz auf das Hauptobjekt.

Falls der Parameter ILIN_PARAM.CALC_SURFACE auf ON gesetzt wurde, werden alle SURFACE Flächen direkt als Attribut zum Objekt geliefert. Falls ausserdem eine LINEATTR Definition für die SURFACE im Datenmodell definiert wurde, wird das LINATTR Attribut als GATTR (s.a. ICS.GET_GATTR) zu den Randlinien der Fläche gespeichert. Bei mehreren LINEATTR Attributen pro SURFACE wird das erste Attribut vom Grundtyp INTEGER als GATTR geliefert.

Zusätzliche Objekte und Komponenten für Typ AREA Geometrietabellen

Für INTERLIS-Tabellen die implizit aus AREA-Deklarationen entstehen (z.B. Bodenbedeckung.BoFlaeche_Geometrie) sind folgende zusätzlichen Objekte und Komponenten verfügbar:

Objektreq/optBeschreibung
<Maintable>_ <Geometry-Attribute>rImplizite INTERLIS Table gebildet aus der Haupttabelle mit dem AREA-Attribute und dem Namen des AREA Attributes.
Komponentereq/optBeschreibung
IN.GEOM(l)rGeometrie des Objekts.
Zusätzliche Objekte und Komponenten für ILIN_TOPO

Falls in der Map ILIN_TOPO die entsprechenden Einträge für den INTERLIS Typ AREA vorhanden sind, werden von der Topologieberechnung folgende zusätzlichen Objekte zur Verfügung gestellt:

AREA

Berechnete Flächen werden zur Verfügung gestellt.

MAP ILIN_TOPO
   Bodenbedeckung,BoFlaeche_Geometrie => AREA
END_MAP
ObjektBeschreibung
<Table>_AreaZusäztliches Objekt wie das Objekt mit dem Zentroid mit der Extension _Area. Das Objekt beinhaltet alle Komponenten wie das Objekt mit dem Zentroid plus einer Komponente IN.GEOM mit der berechneten Fläche. Beispiel: BoFlaeche ist das Objekt mit dem Zentroid. BoFlaeche_Area ist das Objekt mit der zusätzlichen Komponente der berechneten Fläche.
KomponenteBeschreibung
IN.GEOM(a)Berechnete Fläche
*Alle weiteren Komponenten sind identische mit den Komponenten des Objekts mit dem Zentroid.
BOUNDARY

Berechnete, gültige Bergrenzungslinien werden zur Verfügung gestellt.

MAP ILIN_TOPO
   Bodenbedeckung,BoFlaeche_Geometrie => BOUNDARY
END_MAP
ObjektBeschreibung
<Table>_BoundaryZusätzliches Objekt wie das Objekt mit dem Zentroid mit der Extension _Boundary. Das Objekt beinhaltet je eine Map mit den Komponenten der linken und rechten Fläche, falls die Flächen vorhanden sind. Beispiel: BoFlaeche ist das Objekt mit dem Zentroid. BoFlaeche_Boundary ist das Objekt mit den berechneten, gültigen Begrenzungslinien.
KomponenteBeschreibung
IN.GEOM(l)Geometrie der Begrenzungslinie.
IN.LEFT(m)Map mit den Komponenten des Objektes der linken Fläche. Nur vorhanden falls auch eine linke Fläche vorhanden ist.
IN.RIGHT(m)Map mit den Komponenten des Objektes der rechten Fläche. Nur vorhanden falls auch eine rechte Fläche vorhanden ist.
BAD

Berechnete, ungültige Bergrenzungslinien werden zur Verfügung gestellt.

MAP ILIN_TOPO
   Bodenbedeckung,BoFlaeche_Geometrie => BAD
END_MAP
ObjektBeschreibung
<Table>_Bad_BoundaryZusätzliches Objekt wie das Objekt mit dem Zentroid mit der Extension _Bad_Boundary. Beispiel: BoFlaeche ist das Objekt mit dem Zentroid. BoFlaeche_Bad_Boundary ist das Objekt mit den berechneten, ungültigen Begrenzungslinien.
KomponenteBeschreibung
IN.GEOM(l)Geometrie der ungültigen Begrenzungslinie.
Weiter Komponenten gemäss INTERLIS Datenmodell

Die restlichen Objektkomponenten sind abhängig von der dazugehörigen INTERLIS Tabelle (s.a. IN.MODEL, IN.TOPIC bzw. IN.TABLE). Alle INTERLIS Attribute werden als Kompontenten des IN-Objekts mit dem gleichem Namen geliefert. Die INTERLIS Datentypen werden wie folgt auf ICS Datentypen abgebildet:

INTERLIS DatentypICS Datentyp
IRANGEint.
RRANGE

real.

Textstring.
GRADSreal.
DEGREESreal.
RADIANSreal.
ENUMERATION

int. string bei ILIN_PARAM.ENUM_TO_TEXT=ON

COORD2point.
COORD3point.
POLYLINEline.
SURFACEarea. bei ILIN_PARAM.CALC_SURFACE=ON
AREApoint. Zentroid. area bei entsprechendem Eintrag in ILIN_TOPO.
-> (Referenz)ilink. Referenzen von INTERLIS-Objekten auf andere INTERLIS-Objekte (z.B. Hoehen.Entstehung : -> HoehenNachfuehrung) sind als spezieller Datentyp ilink implementiert. INTERLIS-Referenzen können aufgelöst werden, indem deren Komponenten in iG/Script angesprochen werden (z.B. IN.Entstehung.Identifikator)

13.6. Exportierte Prozeduren und Methoden

ProzedurILTOPO_OPEN [s input][]
BeschreibungÖffnet eine bestehende INTERLIS 1 Datei <input> und initialisiert den Modul. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
'test.itf' ILTOPO_OPEN
ProzedurILTOPO_READ_OBJECT [][b state]
Beschreibung

Liest das nächste IN-Objekt aus der geöffneten INTERLIS 1 Datei. Die Prozedur wird von RUN1 automatisch aufgerufen.

Beispiel
ILTOPO_READ_OBJECT [TRUE]
ProzedurILTOPO_CLOSE [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
ILTOPO_CLOSE
MethodeILIN.GET_ILINK_KEY [ilink il] [s key]
BeschreibungSchlüssel aus Beziehungsattribut lesen.
Beispiel
IN.Entstehung ILIN.GET_ILINK_KEY ['200015']
MethodeILIN.GET_ILINK_TABLE [ilink il] [s table]
BeschreibungTabellenname der referenzierten Tabelle aus Beziehungsattribut lesen.
Beispiel
IN.Objekt ILIN.GET_ILINK_TABLE ['LFPNachfuehrung']
MethodeILIN.GET_OBJECT_ILINK_LIST [m object, i linkdepthmax] [li list]
BeschreibungLiefert zu einem Input-Objekt - enthalten in der Map object - alle Objekte als Maps in einer Liste list zurück, auf die das Input-Objekt über Beziehungsattribute referenziert. Falls das Input-Objekt keine Beziehungsattribute aufweist, ist die Liste leer. Mit den Argument linkdepthmax kann die Tiefe der zu berücksichtigen Beziehungen definiert werden. Die Tiefe 0 liefert keine Objekte zurück. Die Tiefe 1 liefert alle Objekte zurück, die direkt vom Input-Objekt referenziert werden. Die Tiefe 2 liefert alle Objekte zurück, die direkt vom Input-Objekt referenziert werden und diejenigen, die von diesen vom Input-Objekte referenzierten Objekte wiederum referenzieren. Und so weiter.
Beispiel
&IN 5 ILIN.GET_OBJECT_ILINK_LIST [list]
MethodeILIN.COMPILE [s modelldatei] [s modell,b state]
BeschreibungModelldatei <modelldatei> (.ili) mit INTERLIS-Compiler compilieren. Falls das Modell keine Fehler enthält wird TRUE und der Name des Modells auf dem Stack geliefert, sonst FALSE. ILIN.COMPILE erzeugt ein Abbild des INTERLIS-Datenmodells in der vordefinierten Map ILIN_MODEL.
Beispiel
'td.ili' ILIN.COMPILE ['Grunddatensatz',TRUE]
MethodeILIN.GET_MODEL [s modelldatei] [s modell,b state]
BeschreibungModellnamen aus der .ili Datei <modelldatei> lesen. Falls der Modellname gelesen werden konnte, wird TRUE und der Name des Modells auf dem Stack geliefert, sonst FALSE. ILIN.GET_MODEL ist für die Bestimmung des Modellnamens die effizientere Variante als ILIN.COMPILE. ILIN.GET_MODEL füllt jedoch im Gegensatz zu ILIN.COMPILE die Map ILIN_MODEL nicht.
Beispiel
'td.ili' ILIN.GET_MODEL ['Grunddatensatz',TRUE]
MethodeILIN.SET_ALTRANGE [r minx,r miny,r minz,r maxx,r maxy,r maxz] []
BeschreibungAlternativen Koordinatenbereich für Korrdinatenbereichtests festlegen. Der neue Koordinatenbereich übersteuert die aus dem INTERLIS-Datenmodell gelesenen Koordinatenbereiche.
Beispiel
600000.0 200000.0 500.0 650000.0 250000.0 600.0 ILIN.SET_ALTRANGE []

13.7. Skriptbeispiel

! Diese ICS Konfiguration zeigt alle von iltopo.mod
! gelesenen Objekte in der .log Datei an.

|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 ILIN_PARAM
   INTERLIS_DEF    => \models\Grunddatensatz.ili
   TRACE           => OFF
   STATISTICS      => ON
END_MAP

MAP ILIN_TOPO
   Bodenbedeckung,BoFlaeche_Geometrie => AREA,BOUNDARY,BAD
   Liegenschaften,Liegenschaft_Geometrie => AREA,BOUNDARY,BAD
END_MAP

MAP INPUT_SOURCES
   I1 => ILTOPO,OPT.input
END_MAP

MAP INOUT
   I1 => DISPLAY_OBJECT1,IN
END_MAP

|INCL \script\iltopo.mod
|INCL \script\run1.prg