3. Modul INTERSECT - Verschnitt Flächen, Linien, Punkte

3.1. Allgemeines

Mit dem Modul INTERSECT können Flächen, Linien und Punkte miteinander verschnitten werden. Zum Beispiel aus der amtlichen Vermessung die Liegenschaften mit der Bodenbedeckung und den Einzelobjekten.

INTERSECT wird mit:

|INCL \script\intersect.mod

in einer ICS RUN1-Konfiguration verfügbar gemacht.

3.2. Abhängigkeiten von anderen Modulen

Der Modul verwendet die Klasse TOPO und GEOINDEX.

[Anmerkung]

Der Modul INTERSECT kann nicht gleichzeitig mit der Klasse TOPO und/oder GEOINDEX oder einem Modul, dass die Klasse TOPO und/oder GEOINDEX verwendet, angewendet werden. Bedingt die Verarbeitung einer Konfiguration eine Verwendung solcher Module mit der Klasse TOPO und/oder GEOINDEX, so ist die Konfiguration so zu gestalten, dass die Verarbeitung mit den Modulen sequentiell erfolgt

3.3. Beispiel

3.3.1. Ausgangslage

Abbildung C.1.

Das Beispiel zeigt als Ausgangslage eine Situation der Amtlichen Vermessung mit Flächen der Liegenschaften, Flächen der Bodenbedeckung und Flächen, Linien und Punkten der Einzelobjekte.

Die Objekte für einen Verschnitt werden wie folgt in das Modul INTERSECT mit der Prozedure INTERSECT_WRITE_OBJECT3,<Classname>,<Geometrie>,<Objekt-Map> geschrieben.

MAP INPUT_SOURCES

   ! INTERLIS objects read
   !----------------------
   I1 => ILTOPO,OPT.input

END_MAP

MAP INOUT

   ! INTERLIS objects write to intersect-module
   !-----------------------------------------
   I1                                  => IN.TOPIC,IN.TABLE
   I1,Bodenbedeckung,BoFlaeche_Area    => INTERSECT_WRITE_OBJECT3,IN.TABLE,IN.GEOM,IN   
   I1,Einzelobjekte,Flaechenelement    => INTERSECT_WRITE_OBJECT3,EOFlaechenelement,IN.Geometrie,IN   
   I1,Einzelobjekte,Linienelement      => INTERSECT_WRITE_OBJECT3,EOLinienelement,IN.Geometrie,IN   
   I1,Einzelobjekte,Punktelement       => INTERSECT_WRITE_OBJECT3,EOPunktelement,IN.Geometrie,IN   
   I1,Liegenschaften,Liegenschaft_Area => INTERSECT_WRITE_OBJECT3,IN.TABLE,IN.GEOM,IN   
   I1,*                                => OFF

END_MAP

3.3.2. Verschnitt Modus MAININTERSECTION

Abbildung C.2.

Der Verschnitt im Modus MAININTERSECTION liefert pro Objekt der Hauptklasse Fläche der Liegenschaften ein Objekt. Jedes Objekt beinhaltet als Listen die Verschnittgeometrien der Unterklassen Flächen der Bodenbedeckung, Flächen der Einzelobjekte, Linien der Einzelobjekte und Punkte der Einzelobjekte.

Der Veschnitt wird wie folgt berechnet und die Objekte gelesen.

MAP INPUT_SOURCES

   ! MAININTERSECTION intersect example source
   !----------------------------------------
   SM => INTERSECT,MAININTERSECTION,Liegenschaft_Area,BoFlaeche_Area,EOFlaechenelement,EOLinienelement,EOPunktelement

END_MAP

MAP INOUT

   ! MAININTERSECTION intersect example objects read
   !----------------------------------------------
   SM => DISPLAY_INTERSECT_OBJECT0

END_MAP
3.3.3. Verschnitt Modus INTERSECTION

Abbildung C.3.

Der Verschnitt im Modus INTERSECTION veschneidet alle Klassen mit Flächen mieinander und liefert zu jeder Verschnittfläche ein Objekt. Jedes Objekt beinhaltet als Listen die Verschnittgeometrien der Unterklassen vom Type Linien und Punkte.

Der Veschnitt wird wie folgt berechnet und die Objekte gelesen.

MAP INPUT_SOURCES

   ! INTERSECTION intersect example source
   !------------------------------------
   SI => INTERSECT,INTERSECTION,Liegenschaft_Area,BoFlaeche_Area,EOFlaechenelement,EOLinienelement,EOPunktelement

END_MAP

MAP INOUT

   ! INTERSECTION intersect example objects read
   !------------------------------------------
   SI => DISPLAY_INTERSECT_OBJECT0

END_MAP

3.4. Funtionsweise

Der Modul INTERSECT kennt zwei Modi von Verschnitten.

MAININTERSECTION (Verschnitt Hauptklasse mit Unterklassen)

Der Modus MAININTERSECTION verschneidet die Objekte einer Hauptklasse mit den Objekten der Unterklassen. Das heisst, jedes Objekt der Hauptklasse beinhaltet die mit der Geometrie des Hauptobjektes verschnittenen Geometrien der Unterobjekte, sofern ein Verschnitt möglich ist.

INTERSECTION (Verschnitt Klassen)

Der Modus INTERSECTION verschneidet die Objekte aller Klassen.

Beinhalten die Klassen Flächen, so werden die Flächen miteinader verschnitten und ergeben Schnittflächen. Weitere Klassen der Typen Line und Point werden mit diesen Schnittflächen verschnitten.

Beinhalten die Klassen keine Flächen, so wird die erste Klasse herangezogen und die weiteren Klassen werden mit dieser ersten Klasse verschnitten.

Die Verschneidung wird wie folgt berechnet.

[Anmerkung]

Beim Modi INTERSECTION sind alle Klassen gleichberechtigt, es gibt keine Hauptklasse, respektive Hauptobjekte.

3.5. Hilfskonfiguration

Zur Anwendung des Modules stehen folgende Anteile und Konfigurationen zur Verfügung.

ILTOOLS_DIR\system\models\INTERSECT.ili

Allgemeines INTERLIS 1 Modell um Resultate eines Verschnittes nach INTERLIS zu transferieren.

ILTOOLS_DIR\system\script\intersect\INTERSECT.cfg

INTERLIS nach INTERLIS Konfiguration für einen Verschnitt der amtlichen Vermessung. Der Verschnitt wird im Logfile angezeigt und nach INTERLIS in das Modell INTERSECT.ili transferiert.

Die Konfiguration kann kopiert und einfach an andere Modelle angepasst werden.

ILTOOLS_DIR\system\script\intersect\INTERSECT_il2shp.cfg

INTERLIS nach Shapefile Konfiguration. Daten in INTERLIS im Modell INTERSECT.ili werden nach Shapefile transferiert.

Die Konfiguration kann kopiert und einfach an andere Modelle angepasst werden.

Dient zur Visualisierung eines Verschnittes in Shapefile.

3.6. Parametermap INTERSECT_PARAM

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

Parameterreq/optBeschreibung
STATISTICSoON oder OFF, Default = OFF. Statistik anzeigen.
SILENToON oder OFF, Default = OFF. Meldungen anzeigen.
AREA_LIMIToREAL. Default = 0.0. Flächen kleiner als die Limite nicht berücksichtigen.
STROKEoREAL|STRING. Default = OFF. Sollen Kreisbögen in Liniensegmente aufgelöst werden. OFF : Kreisbögen werden nicht aufgelöst. REAL-Wert: definiert die Auflösung. Details siehe in der Beschreibung der Methode ICS.STROKE .
RESOLUTIONoREAL. Default = 0.001. Geometrische Auflösung der Inputgeometrien. Für mm muss z.B. 0.001 eingegeben werden.
OVERLAPoREAL. Default = 0.2. Möglicher Overlap für Kreisbögen gemäss INTERLIS Spezifikation (z.B. 0.2).

3.7. Objektmodell

Dem Modul INTERSECT werden Objekte mit der vordefinierten Prozedur INTERSECT_WRITE_OBJECT3 übergeben (s.a. unten). Die Verarbeitung der Objekte erfolgt mit dem Öffnen des Modules mit der vordefinierten Prozedur INTERSECT_OPEN (s.a. unten), die mit RUN1 automatisch aufgerufen wird. Mit den Argumenten zur Prozedur INTERSECT_OPEN wird die Art der Verarbeitung und die zu verarbeitenden Klassen definiert. Je nach Art der Verarbeitung liefert die Berechnung folgende IN-Objekte:

Komponenten für jedes IN-Objekt für die Berechnungsart MAININTERSECTION,mainclass,class,...

Die Berechnung im Mode MAININTERSECTION liefert als Objekte die originalen Objekte der Hauptklasse zurück. Zusätzlich enthält ein Hauptobjekt als Listen die Objekte der Unterklassen mit den Verschnitten, die in der Fläche des Objekt der Hauptklasse enthalten sind.

Komponentereq/optBeschreibung
IN.INTERSECT_MODE(s)rVerschnitt-Methode INTERSECTION oder MAININTERSECTION.
IN.INTERSECT_TYPE(s)rGeometrie Type der Verschnittgeometrie area, line oder point.
IN.INTERSECT_GEOM(g)rVerschnitt-Geometrie.
IN.INTERSECT_AREA(r)oFlächeninhalt wenn die Verschnitt-Geometrie eine Fläche ist.
IN.INTERSECT_LENGTH(r)oLinienlänge wenn die Verschnitt-Geometrie eine Linie ist.
IN.<attribute>(*)oAlle Attribute des originalen Objektes der Hauptklasse.
IN.<class> (li)oEine Liste pro beteiligte Klasse, mit allen Objekten und Attributen der Klasse, die in der Verschnitt-Geometrie IN.INTERSECT_GEOM enthalten sind.
IN.<class>.INTERSECT_MODE(s)rVerschnitt-Methode INTERSECTION oder MAININTERSECTION.
IN.<class>.INTERSECT_TYPE(s)rGeometrie Type der Verschnittgeometrie area, line oder point.
IN.<class>.INTERSECT_GEOM(g)rVerschnitt-Geometrie.
IN.<class>.INTERSECT_AREA(r)oFlächeninhalt wenn die Verschnitt-Geometrie eine Fläche ist.
IN.<class>.INTERSECT_LENGTH(r)oLinienlänge wenn die Verschnitt-Geometrie eine Linie ist.
IN.<class>.<attribute>(*)oAlle Attribute des originalen Objektes.
Komponenten für jedes IN-Objekt für die Berechnungsart INTERSECTION,class,class,...

Die Berechnung im Mode INTERSECTION liefert als Objekte die einzelnen Verschnitte der Objekte der beteiligten Klassen zurück. Neben den geometrischen Informationen der Verschnitte werden als Listen auch die in den Verschnitten enthaltenen Objekte der beiteiligten Klassen zurückgegeben.

Komponentereq/optBeschreibung
*r/oAlle komponenten wie bei der Berechnung om Mode MAININTERSECTION ausser den Attributen IN.<attribute>, weil des bei diesem Mode keine Hauptklasse gibt.
Komponenten für jedes IN-Objekt nach der Methode INTERSECT_GROUP_CLASS2,class,groupkeyattr

Nach der Berechnung des Verschnittes können beim Lesen der Verschnitt-Geometrien mit INTERSECT_GROUP_CLASS2 Unterklassen gruppiert werden. Beim Lesen der Verschnitte wird im IN-Objekt jede Unterklasse mit einer Liste der Teilgeometrie gelesen. Mit dieser Methode können die Teilgeometrien der Unterklassen nach dem Wert eines Attributes groupkeyattr gruppiert werden.

Komponentereq/optBeschreibung
*r/oAlle Attribute wie aus Verschnitt oben.
IN.INTERSECT_AREA(r)rFlächeninhalt der Flächengeometrie.
IN.<attribute>(*)oAlle Attribute des originalen Objektes der Hauptklasse.
IN.<subclass>(li)oEine Liste pro beteiligte Unterklasse, mit allen Objekten und Attributen der Unterklasse, die in der originalen Flächengeometrie IN.INTERSECT_GEOM des Objektes der Hauptklasse enthalten sind. Die Liste der Unterklasse enthält Objekte gruppiert nach den Wert des Attributes groupkeyattr .
IN.<subclass>.INTERSECT_COUNT(a)oDie Anzahl der Teilflächen der Unterklasse und der Gruppe.
IN.<subclass>.INTERSECT_GEOM(li)oEine Liste der Teilflächen der Unterklasse und der Gruppe.
IN.<subclass>.INTERSECT_AREA(r)oDie Summe des Flächeninhalt der Teilflächen der Unterklasse und der Gruppe.
IN.<subclass>.<groupkeyattr>oDas Attribute mit dem Wert für die Gruppenermittlung der Unterklasse .
IN.<subclass>.<attribut>(*)oAlle Attribute des ersten gefundenen originalen Objektes der Unterklasse und der Gruppe.

3.8. Exportierte Prozeduren und Methoden

Vor der Berechung des Verschnittes mit der Prozedur INTERSECT_OPEN müssen die Objekte des Verschnittes in das Modul geschrieben werden. Dies erfolgt mit folgender Prozedur.

ProzedurINTERSECT_WRITE_OBJECT3 ! s class, g geometry, m map
BeschreibungSchreibt eine Fläche für die Flächenberechnung in den Modul. <class> ist der Namen der Klasse des Objektes. <area> ist Flächengeometrie des Objektes. <map> ist der Namen oder die Referenz einer Map, die weitere Attribute des Objektes beinhaltet.
Beispiel
... => INTERSECT_WRITE_OBJECT3,Liegenschaft,IN.GEOM,IN

Nachdem die Objekte für den Verschnitt mit der Prozedur INTERSECT_WRITE_OBJECT3 in das Modul geschrieben worden sind, kann der Verschnitt mit der Prozedur INTERSECT_OPEN berechnet werden. Mit der Prozedur INTERSECT_READ_OBJECT werden die Verschnitt-Objekte gelesen.

ProzedurINTERSECT_OPEN ! [s type, s class, s class, ...][]
Beschreibung

Öffnet das Modul zwecks Berechnung des Verschnittes der definierten Klassen. Der <type> kann folgende Werte annehmen:

MAININTERSECTION

Die erste Klasse des Argumentes ist die Hauptklasse. Die weiteren Klassen sind Unterklassen.

Berechnet zu den Objekten der Hauptklasse die Verschnitt-Geometrien der Objekte der Unterklassen.

INTERSECTION

Berechnet zu den Objekten der definierten Klassen die Verschnittgeometrien. Die definierten Klassen sind gleichberechtigt.

INTERSECT_OPEN wird von RUN1 automatisch aufgerufen.

Die Objekte der Klassen werden mit der Prozedur INTERSECT_WRITE_OBJECT3 für die Berechnung in das Modul geschrieben.

Beispiel
'MAININTERSECTION,Liegenschaften_Area,BoFlaeche_Area' INTERSECT_OPEN
ProzedurINTERSECT_READ_OBJECT ! [][b status]
Beschreibung

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

Beispiel
INTERSECT_READ_OBJECT [TRUE]
ProzedurINTERSECT_CLOSE ! [][]
BeschreibungSchliesst den Modul. Nach dem Schliessen kann mit INTERSECT_OPEN mit den im Modul enthaltenen Objekten eine neue Berechnung durchgeführt werden. INTERSECT_CLOSE wird von RUN1 automatisch aufgerufen.
Beispiel
INTERSECT_CLOSE
ProzedurINTERSECT_GROUP_CLASS2 ! s class, s groupkeyattr
BeschreibungBeim Lesen der Verschnittgeometrien wird im IN-Objekt jede Unterklasse mit einer Liste der Teilgeometrien zur Hauptgeometrie gelesen. Mit dieser Methode können die Teilgeometrien der Unterklassen nach dem Wert eines Attributes groupkeyattr gruppiert werden. Siehe dazu auch das Objektmodell.
Beispiel
... => INTERSECT_GROUP_CLASS2,Bodenbedeckung_Area,Art_TXT

3.9. Skriptbeispiel

! Diese ICS Konfiguration zeigt alle von intersect.mod
! berechnetern Objekte in der .log Datei an.

|LICENSE \license\iltools.lic

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

MAP ILIN_PARAM
   INTERLIS_DEF    => \models\DM01AVCH24D.ili
   STATISTICS      => ON
   ENUM_TO_TEXT    => ON
   CALC_SURFACE    => ON
END_MAP

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

MAP INTERSECT_PARAM
   STATISTICS  => ON   
END_MAP

MAP INPUT_SOURCES

   I1 => ILTOPO,OPT.input

   S1 => INTERSECT,MAININTERSECTION,Liegenschaft_Area,BoFlaeche_Area,EOFlaechenelement,EOLinienelement,EOPunktelement

END_MAP

MAP INOUT

   I1                                  => IN.TOPIC,IN.TABLE
   I1,Bodenbedeckung,BoFlaeche_Area    => INTERSECT_WRITE_OBJECT3,IN.TABLE,IN.GEOM,IN   
   I1,Einzelobjekte,Flaechenelement    => INTERSECT_WRITE_OBJECT3,EOFlaechenelement,IN.Geometrie,IN   
   I1,Einzelobjekte,Linienelement      => INTERSECT_WRITE_OBJECT3,EOLinienelement,IN.Geometrie,IN   
   I1,Einzelobjekte,Punktelement       => INTERSECT_WRITE_OBJECT3,EOPunktelement,IN.Geometrie,IN   

   I1,Liegenschaften,Liegenschaft_Area => INTERSECT_WRITE_OBJECT3,IN.TABLE,IN.GEOM,IN   
   I1,*                                => OFF

   S1 => DISPLAY_OBJECT1,IN

END_MAP

MAP MACRO
END_MAP

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