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.
Folgende Parameter können in der Map ILIN_PARAM
für den Modul gesetzt werden:
| Parameter | req/opt | Beschreibung |
INTERLIS_DEF | r | Filename des INTERLIS Definitionsfiles. Die Angabe des Parameters ist obligatorisch |
METHA_OBJECTS | r | ON oder OFF, Default
= OFF. Methaobjekte liefern ein oder
aus. |
LOG_TABLE | r | ON oder OFF, Default
= ON. Für jede gelesene Tabelle eine Meldung
ausgeben. |
| r | ON oder OFF, Default
= OFF. Für jedes gelesene Objekt eine Zeile
ausgeben. |
ENUM_TO_TEXT | r | ON oder OFF, Default
= OFF. Aufzählungsattribute auch als
Textversion liefern. Die Textversion des Attributs ist in
IN.<Attribut>_TXT verfügbar. |
| r | ON oder OFF, Default
= OFF. SURFACE-Geometrien berechnen und dem
Hauptobjekt zuordnen. |
VALUE_CHECK | r | ON oder OFF, Default
= ON. Wertebereichtests auf Attributen
durchführen. |
CHARSET_CHECK | r | ON oder OFF, Default
= OFF. Zeichensatz gemäss Norm SN612030
überprüfen. |
MATH_DEGREES | r | ON oder OFF, Default
= OFF. DEGREES im
mathematischen Sinn interpretieren, d.h. 0.0 =
horizontal, Orientierung = Gegenuhrzeigersinn. |
ARC_CHECK | r | ON oder OFF, Default
= OFF. Kreisbogengeometrie testen. |
DOUBLEPOINT_CHECK | r | ON oder OFF, Default
= OFF. Nacheinanderfolgende doppelte Punkte in
Linien testen. |
TOPICS | r | Nur Topics gemäss Liste in TOPICS lesen.
Die Topics müssen als kommaseparierte Liste (z.B.
Fixpunkte,Bodenbedeckung) angegeben
werden. |
SYNTAX_ERROR_ HALT | r | ON oder OFF, Default
= OFF. Bei einem Syntax-Error in der
INTERLIS-Datei wird das weiterlesen abgebrochen. |
DEBUG | r | ON oder OFF, Default
= OFF. Debugmodus ein oder aus. |
SAVE_REF | r | ON 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. |
STATUS | r | Enthält nach dem Lesen eines Objekts einen Fehlerstatus, falls ein Fehler aufgetreten ist. |
STATISTICS | r | ON oder OFF, Default
= OFF. Statistik anzeigen. |
STATISTICS_FILE | o | ON oder OFF, Default
= OFF. Statistik mit File. |
STATISTICS_MODEL | o | ON oder OFF, Default
= OFF. Statistik mit Model. |
In der Map ILIN_TOPO sind die gewünschten
Geometrie-Tabellen des Types AREA einzutragen, für welche die Toplogie
berechnet werden sollen.
| Parameter | req/opt | Beschreibung |
Topic,Table | r | 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,
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_MAPDie 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.
| Komponente | req/opt | Beschreibung |
IN.MODEL(s) | r | Model des IN Objekts. |
IN.TOPIC(s) | r | Topic des IN-Objekt |
IN.TABLE(s) | r | Table des IN-Objekts. |
IN.OBJID(s) | r | Transferidentifikation des IN-Objekts . |
IN.LINE(i) | r | Zeilennummer des Objekts in der Inputdatei. |
Normalerweise wird vom Modul pro OBJE-Zeile
ein Objekt geliefert. Falls der Parmeter
ILIN_PARAM.METHA_OBJECTS auf
gesetzt wurde, werden auch
für die INTERLIS Label ONMODL,
EMOD, TOPI,
ETOP, TABL,
ETAB Objekte zurückgeliefert (sog.
Methaobjekte).
Für INTERLIS-Tabellen die implizit aus SURFACE-Deklarationen entstehen (z.B. Fixpunkte.LFPNachfuehrung_Perimeter) sind folgende zusätzlichen Objekte und Komponenten verfügbar:
| Objekt | req/opt | Beschreibung |
<Maintable>_
<Geometry-Attribute> | r | Implizite INTERLIS Table gebildet aus der Haupttabelle mit dem SURFACE-Attribute und dem Namen des SURFACE Attributes. |
| Komponente | req/opt | Beschreibung |
IN.GEOM(l) | r | Geometrie des Objekts. |
IN.REFID(s) | r | Referenz 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.
Für INTERLIS-Tabellen die implizit aus AREA-Deklarationen entstehen (z.B. Bodenbedeckung.BoFlaeche_Geometrie) sind folgende zusätzlichen Objekte und Komponenten verfügbar:
| Objekt | req/opt | Beschreibung |
<Maintable>_
<Geometry-Attribute> | r | Implizite INTERLIS Table gebildet aus der Haupttabelle mit dem AREA-Attribute und dem Namen des AREA Attributes. |
| Komponente | req/opt | Beschreibung |
IN.GEOM(l) | r | Geometrie des Objekts. |
ILIN_TOPOFalls 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:
AREABerechnete Flächen werden zur Verfügung gestellt.
MAP ILIN_TOPO Bodenbedeckung,BoFlaeche_Geometrie => AREA END_MAP
| Objekt | Beschreibung |
<Table>_Area | Zusä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. |
| Komponente | Beschreibung |
IN.GEOM(a) | Berechnete Fläche |
* | Alle weiteren Komponenten sind identische mit den Komponenten des Objekts mit dem Zentroid. |
BOUNDARYBerechnete, gültige Bergrenzungslinien werden zur Verfügung gestellt.
MAP ILIN_TOPO Bodenbedeckung,BoFlaeche_Geometrie => BOUNDARY END_MAP
| Objekt | Beschreibung |
<Table>_Boundary | Zusä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. |
| Komponente | Beschreibung |
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. |
BADBerechnete, ungültige Bergrenzungslinien werden zur Verfügung gestellt.
MAP ILIN_TOPO Bodenbedeckung,BoFlaeche_Geometrie => BAD END_MAP
| Objekt | Beschreibung |
<Table>_Bad_Boundary | Zusä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. |
| Komponente | Beschreibung |
IN.GEOM(l) | Geometrie der ungültigen Begrenzungslinie. |
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 Datentyp | ICS Datentyp |
IRANGE | int. |
RRANGE | real. |
| string. |
GRADS | real. |
DEGREES | real. |
RADIANS | real. |
ENUMERATION | int. string bei ILIN_PARAM.ENUM_TO_TEXT=ON |
COORD2 | point. |
COORD3 | point. |
| line. |
SURFACE | area. bei ILIN_PARAM.CALC_SURFACE=ON |
AREA | point. Zentroid. area bei entsprechendem Eintrag in ILIN_TOPO. |
| 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) |
| Prozedur | ILTOPO_OPEN [s input][] |
| Beschreibung | Öffnet eine bestehende INTERLIS 1
Datei <input> und initialisiert den
Modul. Die Prozedur wird von RUN1 automatisch aufgerufen. |
| Beispiel | |
| Prozedur | ILTOPO_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 | |
| Prozedur | ILTOPO_CLOSE [][] |
| Beschreibung | Schliesst den Modul und gibt die durch den Modul belegten Resourcen wieder frei. Die Prozedur wird von RUN1 automatisch aufgerufen. |
| Beispiel | |
| Methode | ILIN.GET_ILINK_KEY [ilink il] [s key] |
| Beschreibung | Schlüssel aus Beziehungsattribut lesen. |
| Beispiel | |
| Methode | ILIN.GET_ILINK_TABLE [ilink il] [s table] |
| Beschreibung | Tabellenname der referenzierten Tabelle aus Beziehungsattribut lesen. |
| Beispiel | |
| Methode | ILIN.GET_OBJECT_ILINK_LIST [m object, i linkdepthmax] [li list] |
| Beschreibung | Liefert 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 | |
| Methode | ILIN.COMPILE [s modelldatei] [s modell,b state] |
| Beschreibung | Modelldatei
<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 | |
| Methode | ILIN.GET_MODEL [s modelldatei] [s modell,b state] |
| Beschreibung | Modellnamen 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 | |
| Methode | ILIN.SET_ALTRANGE [r minx,r miny,r minz,r maxx,r maxy,r maxz] [] |
| Beschreibung | Alternativen Koordinatenbereich für Korrdinatenbereichtests festlegen. Der neue Koordinatenbereich übersteuert die aus dem INTERLIS-Datenmodell gelesenen Koordinatenbereiche. |
| Beispiel | |
! 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