12. Modul TOPO - Topologie berechnen

12.1. Allgemeines

Mit dem Modul TOPO können geschlossene Flächen aus Begrenzungslinien (Boundaries) und Zentroiden berechnet werden. Ausserdem ist es möglich, alle Attribute der angrenzenden Flächen einer Begrenzungslinie oder die Knoten im Flächennetz zu bestimmen. Der Modul wird häufig in Zusammenhang mit Formaten wie AutoCAD DXF oder Microstation DGN benutzt, welche selber nicht den INTERLIS Typ AREA unterstützen. Für INTERLIS 1 und INTERLIS 2 sind die Möglichkeiten des Moduls TOPO bereits in entsprechenden INTERLIS Module eingebaut. Normalerweise muss daher für INTERLIS der Modul TOPO nicht manuell konfiguriert werden.

TOPO wird mit:

|INCL \script\topo.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

12.2. Abhängigkeiten von anderen Modulen

Keine Abhängigkeiten vorhanden.

12.3. Parametermap TOPO_PARAM

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

Parameterreq/optBeschreibung
RESOLUTIONrGeometrische Auflösung der Inputgeometrien. Für mm muss z.B. 0.001 eingegeben werden.
OVERLAPrMöglicher Overlap für Kreisbögen gemäss INTERLIS Spezifikation (z.B. 0.2).
[Anmerkung]

Die Map TOPO_PARAM ist bereits in topo.mod vordefiniert und muss daher nicht in der .cfg Datei definiert werden. Die TOPO_MAP muss daher in einem PRE_SOURCE_* Trigger oder mit NOOP gesetzt werden.

12.4. Objektmodell

Dem Modul TOPO werden Objekte mit den vordefinierten Prozeduren TOPO_WRITE_CENTROID2 bzw. TOPO_WRITE_BOUNDARY1 übergeben (s.a. unten). Nach der Toplogieberechnung liefert der TOPO Modul folgende IN-Objekte:

Allgemeine Komponenten für jedes IN-Objekt
Komponentereq/optBeschreibung
IN.TTYPE(s)rTyp des gelieferten Objekts (s.a. unten).
Zusätzliche Komponenten für IN.TTYPE = 'AREA'
Komponentereq/optBeschreibung
IN.AID(i)rJede berechnete Fläche erhält vom TOPO Modul eine eindeutige Nummer.
IN.GEOM(a)rBerechnet Fläche.
IN.VALUE(s)rAttributwert der Fläche (s.a. TOPO_WRITE_CENTROID2).
Zusätzliche Komponenten für IN.TTYPE = 'BOUNDARY'
Komponentereq/optBeschreibung
IN.LEFT(m)rMap mit allen Attributen der linken Fläche.
IN.RIGHT(m)rMap mit allen Attributen der rechten Fläche.
IN.GEOM(s)rGeometrie der Begrenzungslinie (= Boundary).
Zusätzliche Komponenten für IN.TTYPE = 'BAD_BOUNDARY'
Komponentereq/optBeschreibung
IN.GEOM(s)rGeometrie Begrenzungslinie. Es werden nur Geometrien geliefert welche vom TOPO Modul nicht verarbeitet werden konnten.
Zusätzliche Komponenten für IN.TTYPE = 'NODE'
Komponentereq/optBeschreibung
IN.GEOM(p)rKnotenkoordinate.
IN.DEGREE(i)rKnotengrad. Der Knotengrad gibt an, wieviele Boundaries in dem Knoten zusammen stossen.

12.5. Exportierte Prozeduren und Methoden

ProzedurTOPO_OPEN ! [s type][]
Beschreibung

Öffnet den Topologiemodul zwecks Berechnung des Topologietyps <type>. <type> kann folgende Werte annehmen:

AREA

Berechnet aus Begrenzungslinien und Zentroidpunkten geschlossene Flächen.

BOUNDARY

Berechnet für jede Begrenzungslinie die Fläche links bzw. rechts der Begrenzungslinie.

BAD_BOUNDARY

Liefert alle fehlerhaften Begrenzungslinien (z.B. Begrenzungslinien mit Lücken).

NODE

Liefert alle Knoten mit Koordinate und Knotengrad.

TOPO_OPEN wird von RUN1 automatisch aufgerufen.

Beispiel
'AREA' TOPO_OPEN
ProzedurTOPO_READ_OBJECT ! [][b status]
Beschreibung

Liest das nächste IN-Objekt gemäss Objektmodell. TOPO_READ_OBJECT wird von RUN1 automatisch aufgerufen.

Beispiel
TOPO_READ_OBJECT [TRUE]
ProzedurTOPO_CLOSE ! [][]
BeschreibungSchliesst den Modul und gibt die durch den Modul belegten Ressourcen wieder frei. Alle temporären Dateien werden wieder gelöscht. Die Prozedur wird von RUN1 automatisch aufgerufen.
Beispiel
TOPO_CLOSE
ProzedurTOPO_WRITE_BOUNDARY1 ! l boundary
BeschreibungSchreibt die Begrenzungslinie <boundary> in den Topologiebuffer.
Beispiel
... => TOPO_WRITE_BOUNDARY1,IN.GEOM
ProzedurTOPO_WRITE_CENTROID2 ! o value, p centroidpoint
BeschreibungSchreibt das Zentroid in den Topologiebuffer. Das Zentroid erhält den Attributwert <value> und der Zentroidpunkt ist <centroidpoint>.
Beispiel
... => TOPO_WRITE_CENTROID2,IN.TXT,IN.GEOM
[Anmerkung]

Es ist auch möglich die Topologie mit der Klasse TOPO ohne die Verwendung von RUN1 zu berechnen (s.a. iG/Script Benutzer- und Referenzhandbuch).

12.6. Skriptbeispiel

! Diese ICS Konfiugration berechnet aus DXF Polylines geschlossene
! Flaechen. Die Flaechen werden in der .log Datei angezeigt. 
! Fuer die Berechnung wird der TOPO Modul eingesetzt.

|LICENSE \license\iltools.lic

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

MAP DXFIN_PARAM
   STATISTICS   => ON
   DEBUG        => OFF
END_MAP

MAP INPUT_SOURCES
   I1 => DXFIN,OPT.input
   I2 => TOPO,AREA
END_MAP

MAP INOUT
   I1 => IN.LAYER
   I1,01234 => TOPO_WRITE_BOUNDARY1,IN.GEOM
   I1,01235 => TOPO_WRITE_CENTROID2,IN.TXT,IN.GEOM
   I1,* => OFF
   I2 => DISPLAY_OBJECT1,IN
END_MAP

|INCL \script\util.lib
|INCL \script\topo.mod
|INCL \script\dxfin.mod
|INCL \script\run1.prg