Gerlach, C. - Institut für Photogrammetrie
Transcrição
Gerlach, C. - Institut für Photogrammetrie
ÿþýüûúùø÷úûþ ø û Universität Stuttgart Christian Gerlach Neue MDL-Funktionen unter Microstation GeoGraphics Betreuer: Dipl.-Ing. Michael Glemser Prüfer: Prof. Dr.-Ing. Dieter Fritsch Inhaltsverzeichnis 1 Einleitung 2 Grundlagen 2.1 Begriserklarungen . . . . . . . . . . . . . . . . . . . 2.1.1 Geoinformationssystem . . . . . . . . . . . . 2.1.2 Raumbezogene Objekte . . . . . . . . . . . . 2.1.3 Topologie . . . . . . . . . . . . . . . . . . . . 2.2 Topologisch strukturierte Daten . . . . . . . . . . . . 2.3 Topologische Relationen . . . . . . . . . . . . . . . . 2.4 Programmbeschreibung - MicroStation GeoGraphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 7 7 7 7 8 8 9 11 3 Datenstruktur TOPOLOGY 13 4 Topologische MDL-Funktionen 17 3.1 Die Datenstruktur TOPOLOGY . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.1 Struktur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.2 Beschreibung der Datenstruktur TOPOLOGY . . . . . . . . . . . . 13 4.1 Bezeichnungen . . . . . . . . . . . . . . . . . . . . . 4.2 Funktionsbeschreibungen . . . . . . . . . . . . . . . 4.2.1 Analysefunktionen . . . . . . . . . . . . . . . 4.2.1.1 mdlMapArea containsPoint . . . . . 4.2.1.2 mdlMapAreaTable getAdjacent . . . 4.2.1.3 mdlMapTLayer linePolyIntersect . . 4.2.1.4 mdlMapTLayer overlay . . . . . . . 4.2.1.5 mdlMapTLayer pointPolyIntersect . 4.2.2 Erzeugungs- und Visualisierungsfunktionen . 4.2.2.1 mdlMapArea extractPoints . . . . . 4.2.2.2 mdlMapAreaTable add . . . . . . . 4.2.2.3 mdlMapAreaTable display . . . . . 4.2.2.4 mdlMapBoundary commonLinks . . 4.2.2.5 mdlMapBoundary extractPoints . . 4.2.2.6 mdlMapBoundaryTable add . . . . 4.2.2.7 mdlMapBoundaryTable display . . . 4.2.2.8 mdlMapCentroidTable add . . . . . 4.2.2.9 mdlMapCentroidTable display . . . 4.2.2.10 mdlMapNodeTable add . . . . . . . 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 20 20 20 20 21 21 22 22 22 23 23 24 24 25 25 26 26 27 INHALTSVERZEICHNIS 2 4.2.2.11 mdlMapNodeTable display . . . . . . . . . 4.2.2.12 mdlMapTLayer add . . . . . . . . . . . . . 4.2.2.13 mdlMapTLayer associateCentroids . . . . . 4.2.2.14 mdlMapTLayer buildAreas . . . . . . . . . 4.2.2.15 mdlMapTLayer createCentroids . . . . . . 4.2.2.16 mdlMapTLayer display . . . . . . . . . . . 4.2.2.17 mdlMapTLayer loadDscr . . . . . . . . . . 4.2.2.18 mdlMapTLayer spatialJoin . . . . . . . . . 4.2.3 Managementfunktionen . . . . . . . . . . . . . . . . 4.2.3.1 mdlMapNodeTable getNext . . . . . . . . . 4.2.3.2 mdlMapTLayer copy . . . . . . . . . . . . 4.2.3.3 mdlMapTLayer init . . . . . . . . . . . . . 4.2.3.4 mdlMapTLayer removeDeletes . . . . . . . 4.2.4 Pruunktionen . . . . . . . . . . . . . . . . . . . . . 4.2.4.1 mdlMapAreaTable multipleCentroids . . . 4.2.4.2 mdlMapAreaTable noCentroid . . . . . . . 4.2.4.3 mdlMapCentroidTable multipleAreas . . . 4.2.4.4 mdlMapCentroidTable noArea . . . . . . . 4.2.4.5 mdlMapCentroidTable noLinkage . . . . . 4.2.4.6 mdlMapTLayer validate . . . . . . . . . . . 4.2.5 Speicherverwaltungsfunktionen . . . . . . . . . . . . 4.2.5.1 mdlMapAreaTable addBlankMember . . . 4.2.5.2 mdlMapAreaTable allocate . . . . . . . . . 4.2.5.3 mdlMapAreaTable extend . . . . . . . . . . 4.2.5.4 mdlMapAreaTable free . . . . . . . . . . . 4.2.5.5 mdlMapBoundaryTable addBlankMember 4.2.5.6 mdlMapBoundaryTable allocate . . . . . . 4.2.5.7 mdlMapBoundaryTable extend . . . . . . . 4.2.5.8 mdlMapBoundaryTable free . . . . . . . . 4.2.5.9 mdlMapCentroidTable addBlankMember . 4.2.5.10 mdlMapCentroidTable allocate . . . . . . . 4.2.5.11 mdlMapCentroidTable extend . . . . . . . 4.2.5.12 mdlMapCentroidTable free . . . . . . . . . 4.2.5.13 mdlMapNodeTable addBlankMember . . . 4.2.5.14 mdlMapNodeTable allocate . . . . . . . . . 4.2.5.15 mdlMapNodeTable extend . . . . . . . . . 4.2.5.16 mdlMapNodeTable free . . . . . . . . . . . 4.2.5.17 mdlMapTLayer free . . . . . . . . . . . . . 5 MDL-Applikation Relationentest 5.1 Programmbeschreibung . . . . . . . . . . 5.2 Programmablauf . . . . . . . . . . . . . . 5.2.1 Beispiel der Relation CONTAINS . 5.2.2 Beispiel der Relation DISJOINT . 5.2.3 Beispiel der Relation INSIDE . . . 5.2.4 Beispiel der Relation INTERSECT 5.3 Anwendungsbeispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 28 28 29 29 29 30 30 31 31 31 32 32 32 32 33 33 34 34 35 35 35 35 36 36 36 37 37 38 38 38 39 39 39 40 40 40 40 42 42 44 50 51 52 53 54 INHALTSVERZEICHNIS 6 Zusammenfassung und Ausblick A Programmlistings A.1 Komponenten der TOPOLOGY-Struktur . . . . . . . . . A.1.1 CENTROIDTBL-Struktur . . . . . . . . . . . . . . A.1.2 CENTROID-Struktur . . . . . . . . . . . . . . . . A.1.3 BOUNDARYTBL-Struktur . . . . . . . . . . . . . A.1.4 BOUNDARY-Struktur . . . . . . . . . . . . . . . . A.1.5 AREATBL-Struktur . . . . . . . . . . . . . . . . . A.1.6 AREA-Struktur . . . . . . . . . . . . . . . . . . . A.1.7 NODETBL-Struktur . . . . . . . . . . . . . . . . . A.1.8 TOPONODE-Struktur . . . . . . . . . . . . . . . . A.1.9 TOPOCFG-Struktur . . . . . . . . . . . . . . . . . A.1.10 TOPOPROPS-Struktur . . . . . . . . . . . . . . . A.2 MicroStation GeoGraphics Feature Control Block (FCB) . A.2.1 GTKFCB-Struktur . . . . . . . . . . . . . . . . . . A.3 MDL-Applikation Relationentest . . . . . . . . . . . . . A.4 Programmdiskette . . . . . . . . . . . . . . . . . . . . . . 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61 63 63 63 63 64 64 65 65 66 66 67 68 69 69 72 73 Abbildungsverzeichnis 2.1 2.2 2.3 2.4 2.5 2.6 Raumbezogenes Objekt (aus Bill/Fritsch, 1994) . Geometrischer Graph (aus Bill/Fritsch, 1994) . . Relationen zwischen zwei Objekten . . . . . . . . Verknupfungsprinzip . . . . . . . . . . . . . . . . Projektaufbau . . . . . . . . . . . . . . . . . . . . Visualisierung von Flachen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 9 10 11 12 12 3.1 TOPOLOGY-Strukturaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 3.2 Topologische Elementtypen . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 4.1 MDL-Funktionskategorien . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 Funktionsergebnis . . . . . . . . . . . . . . . . Dialogfeld \MicroStation-Manager" . . . . . . . Dialogfeld \Projekt onen" . . . . . . . . . . . Dialogfeld \MDL" . . . . . . . . . . . . . . . . Dialogfeld \Topology Analysis" . . . . . . . . . Kartenfeld \Ansicht 1" . . . . . . . . . . . . . . Dialogfeld \Anzeige-Manager" . . . . . . . . . . Dialogfeld \Relationentest" . . . . . . . . . . . OptionButton . . . . . . . . . . . . . . . . . . . Relation A CONTAINS B . . . . . . . . . . . . Relation A DISJOINT B . . . . . . . . . . . . . Relation A INSIDE B . . . . . . . . . . . . . . Relation A INTERSECT B . . . . . . . . . . . Design-File \Flurstucke" . . . . . . . . . . . . . Design-File \U berutungszone" . . . . . . . . . U bersicht der Topologie-Layer . . . . . . . . . . Flurstucke innerhalb des U berutungsbereichs . Flurstucke die U berutungsbereich schneiden . Vom Hochwasser betroene Flurstucke . . . . . Vom Hochwasser betroene Flurstucke (Zoom) Flurstucke auerhalb des U berutungsbereichs 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 44 45 46 47 47 48 49 49 50 51 52 53 54 55 56 57 58 59 59 60 Kapitel 1 Einleitung Geoinformationssysteme sind heutzutage bei der Losung und Bewaltigung von topologischen Problemen und Aufgaben nicht mehr wegzudenken. Sie stellen die Beziehung zwischen den raumbezogenen Daten und den dazugehorigen Sachdaten von Objekten in unserer Umwelt her, und ermoglichen somit die Losung spezischer Aufgaben, wie z.B. die raumlichen Beziehungen zwischen zwei bestimmten Objekten zu bestimmen. Das Thema dieser Studienarbeit lautet "Neue MDL-Funktionen unter MicroStation GeoGraphics\. MicroStation GeoGraphics ist ein Geoinformationssystem der Firma Bentley Systems und basiert auf dem bekannten CAD-Paket MicroStation des gleichen Anbieters. Unter MicroStation kann ein Benutzer eigene Anwendungen durch Programmierung mit der systemeigenen Sprache MDL (MicroStation Developement Language) gestalten und erweitern. MDL besitzt einen C-ahnlichen Sprachumfang mit einer groen Vielzahl an speziellen Funktionen zur Manipulation graphischer Objekte u.v.m.. Zur Anwendungsprogrammierung in MicroStation GeoGraphics kann ebenfalls mit MDL gearbeitet werden. Hierzu stellt das Geoinformationssystem weitere neue MDL-Funktionen bereit, die die Realisierung spezieller GIS-Aufgaben unterstutzen. In dieser Studienarbeit sollen die durch MicroStation GeoGraphics neu verfugbaren MDL-Funktionen untersucht und kategorisiert werden. Im speziellen werden die topologischen MDL-Funktionen unter die Lupe genommen. Anschlieend wird eine eigene MDL-Applikation erstellt, die es ermoglicht die raumliche Beziehung zwischen zwei Polygonen, z.B. Flachen, zu ermitteln. In Kapitel 2 werden Begrie wie Geoinformationssystem, raumbezogenes Objekt und Topologie erklart. Auerdem werden topologisch strukturierte Daten und die dazugehorigen Begrie wie Knoten, Kante, Masche und die Nachbarschaftsbeziehungen Adjazenz und Inzidenz erlautert. Danach wird auf die topologischen Relationen zwischen zwei Objekten eingegangen, und das Programm MicroStation GeoGraphics der Firma Bentley Systems beschrieben. In Kapitel 3 wird die Erstellung eines topologischen Layers beschrieben und dabei die Datenstruktur TOPOLOGY, welche bei der Erstellung eines topologischen Layers aufgebaut wird, erklart. Ihr Aufbau und die implementierten Strukturen werden dargestellt und erklart. 5 KAPITEL 1. EINLEITUNG 6 Die topologischen MDL-Funktionen aus MicroStation GeoGraphics sind in Kapitel 4 aufgefuhrt und ihre Funktionsweise wird dort beschrieben. Desweiteren werden sie zur besseren U bersicht in Funktionskategorien eingeteilt. Im abschlieenden 5. Kapitel wird dann die neu erstellte MDL-Applikation Relationentest vorgestellt und ihre Funktionsweise anhand von Beispielen beschrieben. Dabei wird die Erstellung eines Topologie-Layers und die Durchfuhrung eines Relationentests erklart. Kapitel 2 Grundlagen In diesem Kapitel werden die Begrie Geoinformationssystem, raumbezogenes Objekt und Topologie deniert. Auerdem werden topologisch strukturierte Daten erlautert, topologische Relationen erklart, und das Programm MicroStation GeoGraphics der Firma Bentley Systems vorgestellt. 2.1 Begriserklarungen 2.1.1 Geoinformationssystem Der Einsatz eines Geoinformationssystems ist fur einen Anwender dann von Nutzen, wenn er raumbezogene Daten hinsichtlich ihrer Lage und Eigenschaften untersuchen mochte. Denition: Geoinformationssystem (Bill/Fritsch, 1994) Ein Geo-Informationssystem ist ein rechnergestutztes System, das aus Hardware, Soft"ware, Daten und den Anwendungen besteht. Mit ihm konnen raumbezogene Daten digital erfat und redigiert, gespeichert und reorganisiert, modelliert und analysiert sowie alphanumerisch und graphisch prasentiert werden.\ 2.1.2 Raumbezogene Objekte Raumbezogene Daten bzw. Informationen werden in einem Geoinformationssystem in Form von raumbezogenen Objekten abgespeichert. Denition: Raumbezogenes Objekt (Bill/Fritsch, 1994) Ein raumbezogenes Objekt oder kurz Objekt ist eine konkrete physisch, geometrisch oder "begriich begrenzte Einheit der Natur und besitzt eine individuelle Identitat.\ Abbildung 2.1 (aus Bill/Fritsch, 1994) verdeutlicht die Denition eines raumbezogenen Objekts. Jedes Objekt kann einer ubergeordneten Objektklasse angehoren, was bei groeren Datensatzen von Vorteil ist, da eine bessere U bersicht und Gliederung des Datensatzes gewahrleistet ist. Zu jedem Objekt gehort zum einen die Thematik, d.h. die beschreibenden Attribute, also Sachdaten wie z.B. Straenname, Hausnummer, Einwohner usw., 7 KAPITEL 2. GRUNDLAGEN 8 Objektklasse Thematik Objekt Vektor Geometrie Raster Abbildung 2.1: Raumbezogenes Objekt (aus Bill/Fritsch, 1994) sowie die Geometrie, d.h. Lage und Ausdehnung des Objekts in Form von Vektor- oder Rastergraphik, welche den Raumbezug des Objekts herstellt. 2.1.3 Topologie Denition: Topologie (Bill/Fritsch, 1994) Die Topologie beschaftigt sich mit den nichtmetrischen raumlichen und strukturellen "Beziehungen beliebiger Elemente in abstrakten Raumen. Sie kann in eine algebraische und eine mengentheoretische Topologie unterteilt werden. Innerhalb der ersteren versucht man, mit algebraischen Hilfsmitteln konkrete Fragen des euklidischen Raumes zu klaren wie z.B. Verschlingungen und Verkettungen von Knoten und Kanten - letztere untersucht spezielle Abbildungen in allgemeinen Raumen, um eine Klassizierung von Figuren zu ermoglichen.\ 2.2 Topologisch strukturierte Daten Unter topologisch strukturierten Daten versteht man die Speicherung von Objekten in Form von Knoten (Punkte), Kanten (Linien) und Maschen (Flachen). Denition: Knoten (Bill/Fritsch, 1994) Als Knoten wird die Stelle bezeichnet, in der eine Kante beginnt oder endet, oder in der "sich mehrere Kanten treen konnen.\ Denition: Kante (Bill/Fritsch, 1994) Eine Kante stellt die Verbindung zwischen zwei Knoten dar. Jede Kante besitzt einen "Anfangsund einen Endknoten.\ Abbildung 2.2 (aus Bill/Fritsch, 1994) veranschaulicht die drei topologischen Grundelemente Knoten (Punkte 1 bis 6), Kante (Linien a bis g) und Masche (Flache A und Flache B) anhand eines geometrischen Graphens. Zur Beschreibung der topologischen Beziehungen in einem Graph werden die Begrie Adjazenz und Inzidenz verwendet. KAPITEL 2. GRUNDLAGEN 9 Denition: Adjazenz (Bill/Fritsch, 1994) Mit Adjazenz wird das Aneinandergrenzen oder auch Beruhren gleichartiger Struk"turelemente bezeichnet. Adjazenz liegt dann vor, wenn zwei Knoten uber eine Kante miteinander verbunden sind. Daruber hinaus ist Adjazenz bei in einem Knoten endenden Kanten gegeben. Somit bezeichnet Adjazenz die Beziehungen zwischen gleichartigen Elementen eines Graphen.\ Denition: Inzidenz (Bill/Fritsch, 1994) Inzidenz bezeichnet das Ineinanderfallen oder Ineinanderverschachtelt sein der Elemente "eines Graphen, d.h. eine Kante inzidiert mit ihrem Anfangs- und Endknoten. Umgekehrt sind alle von einem Knoten abgehenden Kanten mit diesem inzident. Somit bezeichnet Inzidenz die Beziehungen zwischen verschiedenartigen Elementen eines Graphen.\ Die Adjazenz bezeichnet demnach die Beziehung zwischen Knoten und Knoten, Kanten und Kanten sowie Maschen und Maschen. Die Inzidenz bezeichnet dagegen die Beziehung zwischen Knoten und Kanten, Knoten und Maschen sowie Kanten und Maschen. 1 b a Fläche A 4 f 5 g 6 c 2 Fläche B d e 3 Abbildung 2.2: Geometrischer Graph (aus Bill/Fritsch, 1994) 2.3 Topologische Relationen Die Topologie wird innerhalb von Geoinformationssystemen zur Bestimmung der topologischen Relation zwischen zwei Objekten verwendet. Dabei konnen acht verschiedene topologische Relationen auftreten (Institut fur Photogrammetrie, 1996), die anhand der Abbildung 2.3 erklart werden. Dabei sind die gemeinsamen Randpunkte beider Objekte grun hervorgehoben. Relation CONTAINS: Ein Objekt enthalt das gesamte andere Objekt, ohne da sich ihre Rander schneiden oder beruhren. Schreibweise: A CONTAINS B (Objekt A enthalt Objekt B). Relation DISJOINT: Beide Objekte sind komplett voneinander getrennt, d.h. es existiert kein gemeinsamer Punkt. Schreibweise: A DISJOINT B (Objekt A getrennt von Objekt B). KAPITEL 2. GRUNDLAGEN 10 Relation INSIDE: Ein Objekt bendet sich komplett im Innern des anderen Objekts, ohne da sich ihre Rander schneiden oder beruhren. Schreibweise: A INSIDE B (Objekt A im Innern von Objekt B). Relation INTERSECT: Beide Objekte schneiden sich in mindestens zwei Punkten und uberlappen sich in einem bestimmten Bereich. Schreibweise: A INTERSECT B (Objekt A schneidet Objekt B). Relation COVERS: Ein Objekt bedeckt das andere Objekt vollstandig. Die Rander beruhren sich an den Randern in einem oder mehreren Punkten, jedoch schneiden sich die Rander nicht. Schreibweise: A COVERS B (Objekt A bedeckt Objekt B). Relation COVERED BY: Ein Objekt wird vollstandig vom anderen Objekt bedeckt. Die Rander beruhren sich an den Randern in einem oder mehreren Punkten, jedoch schneiden sich die Rander nicht. Schreibweise: A COVERED BY B (Objekt A wird bedeckt von Objekt B). Relation EQUAL: Beide Objekte sind in ihrer Lage und Figur vollkommen identisch. Schreibweise: A EQUAL B (Objekt A identisch Objekt B). Relation MEET: Beide Objekte beruhren sich an den Randern in einem oder mehreren Punkten, jedoch liegt eine U berlappung zwischen den beiden Objekten nicht vor. Schreibweise: A MEET B (Objekt A beruhrt Objekt B). A B A B B B A CONTAINS B A DISJOINT B A A COVERS B A A INSIDE B B B A A A INTERSECT B B A B A A COVERED_BY B A EQUAL B Abbildung 2.3: Relationen zwischen zwei Objekten A MEET B KAPITEL 2. GRUNDLAGEN 11 Bei naherer Betrachtung der acht Relationen erkennt man, da vier Relationen paarweise invers und vier Relationen symmetrisch sind: Paarweise inverse Relationen: A CONTAINS B A INSIDE B A COVERS B A COVERED BY B Symmetrische Relationen: A DISJOINT B A EQUAL B A INTERSECT B A MEET B B INSIDE A B CONTAINS A B COVERED BY A B COVERS A B DISJOINT A B EQUAL A B INTERSECT A B MEET A In der Literatur (Institut fur Photogrammetrie, 1996) ndet sich auch noch folgende Schreibweise der topologischen Relationen: A CONTAINS B = CONTAINS (A,B) A DISJOINT B = DISJOINT (A,B) A INSIDE B = INSIDE (A,B) A INTERSECT B = INTERSECT (A,B) A COVERS B = COVERS (A,B) A COVERED BY B = COVERED BY (A,B) A EQUAL B = EQUAL (A,B) A MEET B = MEET (A,B) 2.4 Programmbeschreibung - MicroStation GeoGraphics MicroStation GeoGraphics ist ein Programm der Firma Bentley Systems, mit dem raumbezogene Daten (Raster- oder Vektordaten) eingegeben, validiert, analysiert oder graphisch darstellt werden konnen. Es basiert auf dem Programm MicroStation 95 und benotigt das Betriebsystem Windows 95, um installiert werden zu konnen. Die fur ein Geoinformationssystem notwendige Kombination von raumbezogenen Daten mit den dazugehorigen Sachdaten ist mit MicroStation GeoGraphics problemlos moglich. Die Sachdaten konnen entweder programmintern oder mit Hilfe des Programms Microsoft Access verwaltet werden. Die Verknupfung erfolgt mit der ODBC-Schnittstelle aus Windows 95. Die Verwaltung der Schnittstelle ubernimmt der Datenquellen-Administrator. Er bildet die Schnittstelle zwischen MicroStation GeoGraphics und Microsoft Access (Abbildung 2.4). *.dgn-File odbc-Treiber *.mdb-File MicroStation Design-File Geometriedaten ODBC-DatenquellenAdministrator in Windows 95 Microsoft Access Datenbank-File Sachdaten Abbildung 2.4: Verknupfungsprinzip KAPITEL 2. GRUNDLAGEN 12 MicroStation GeoGraphics verfugt uber ein MDL-Toolkit, das es dem Anwender ermoglicht, eigene Programme in die Oberache einzufugen und Aufgaben aus dem Bereich der Geoinformationssysteme zu losen. Dies wird in Kapitel 5 anhand der erstellten MDL-Applikation verdeutlicht. In MicroStation GeoGraphics werden Kartographiedaten in Projekten organisiert. Ein Projekt ist eine Ansammlung von Objektarten (Features), Kategorien (Gruppe zusammengehoriger Features), Karten (Zeichnungsdateien) und Attributdenitionen. Der Aufbau eines Projekts ist in Abbildung 2.5 (aus Bentley Systems, MicroStation GeoGraphics Benutzerhandbuch) verdeutlicht: Projekt Kategorien Karten Features Benutzerdaten Befehle Abbildung 2.5: Projektaufbau Eine Kategorie, oder auch Thema, ist eine Ansammlung von ahnlichen Objektarten, z.B. von Strassen, die oftmals hierarchisch angeordnet sind. Die dazugehorigen Objektarten sind beispielsweise Autobahnen, Bundesstrassen, Landstrassen, Feldwege, usw.. Durch den objekt-basierten Entwurf von MicroStation GeoGraphics konnen alle Kartenobjekte sowohl graphische Eigenschaften als auch nicht-graphische Attribute besitzen. Die Feature-Gruppen-Funktion erlaubt dem Anwender die Features hierarchisch zu organisieren und in Gruppen einzuteilen. Dies erleichert die spatere Auswahl von gewunschten Elementen in dem Kartenfenster. Die Visualisierung von achenhaften Objekten erfolgt in MicroStation GeoGraphics entweder durch Shape-Elemente oder durch ein Zentroid und die dazugehorige Begrenzungslinie (Abbildung 2.6): Shape-Element Zentroid und Begrenzungslinie Abbildung 2.6: Visualisierung von Flachen Kapitel 3 Datenstruktur TOPOLOGY Die in MicroStation GeoGraphics implementierte Applikation \Topologieanalyse" dient dazu, einen topologischen Layer aus den geometrischen Elementen und den Attributverknupfungen eines Design-Files zu erzeugen. Dabei steht die in der Programmiersprache C verfasste Datenstruktur TOPOLOGY zur Verfugung, welche in maptopo.h deniert ist. Sie speichert und strukturiert eine vom Anwender vorgegebene Menge an geometrischen Daten aus dem Design-File bei der Erzeugung eines topologischen Layers in topologischer Form. Im Gegensatz zum Design-File, bei dem die Elemente nacheinander, also sequentiell, gespeichert werden, sind die Elemente im Topologie-Layer topologisch strukturiert, d.h. sie sind in Knoten-, Kanten- und Flachenelemente aufgeteilt und getrennt voneinander in den jeweiligen Tabellen abgespeichert. Topologische Layer konnen auf verschiedene Art und Weise weiterverarbeitet und untersucht werden. Man kann mit ihnen auch graphische Elemente modizieren, loschen und neue graphische Elemente erzeugen. Topologische Layer werden zur Weiterverarbeitung im Arbeitsspeicher des Rechners abgelegt, konnen jedoch nicht abgespeichert werden, d.h. sie mussen nach jedem Programmstart neu erstellt werden. 3.1 Die Datenstruktur TOPOLOGY 3.1.1 Struktur Denition: Struktur (Berrendorf, 1995) Struktur ist eine Ansammlung von mehreren Variablen unter einem Namen. Die "inEine einer Struktur zusammengefaten Variablen werden als Komponenten bezeichnet. Die Typen der Komponenten einer Struktur konnen unterschiedlich sein. Allgemein werden Strukturen auch als Datensatze bezeichnet. Benotigt werden Strukturen im allgemeinen um komplizierte Daten zu organisieren.\ 3.1.2 Beschreibung der Datenstruktur TOPOLOGY typedef struct _topology { CENTROIDTBL ctrdTbl; BOUNDARYTBL bdryTbl; AREATBL areaTbl; 13 KAPITEL 3. DATENSTRUKTUR TOPOLOGY NODETBL TOPOCFG } TOPOLOGY; 14 nodeTbl; cfg; Strukturen konnen Strukturen als Komponenten enthalten. Dies ist bei der TOPOLOGYStruktur der Fall. Sie besteht aus funf weiteren Strukturen. Die Abbildung 3.1 verdeutlicht den Aufbau der TOPOLOGY-Struktur: GTKFCB TOPOLOGY CENTROIDTBL CENTROID TOPOPROPS BOUNDARYTBL BOUNDARY TOPONODE TOPOPROPS AREATBL AREA BOUNDARY CENTROID TOPOPROPS NODETBL TOPONODE TOPOPROPS TOPOCFG Abbildung 3.1: TOPOLOGY-Strukturaufbau Alle vier Tabellen-Strukturen - ctrdTbl, bdryTbl, areaTbl, nodeTbl - sammeln Elemente des jeweiligen Typs. CENTROIDTBL-Struktur: Die CENTROIDTBL-Struktur wird hauptsachlich dafur genutzt, Punktelemente zu laden und zu verandern: Zellen, Punkte, Text-Knoten und Text. Sie verweist mittels eines Vektors auf die CENTROID-Struktur. CENTROID-Struktur: Die CENTROID-Struktur enthalt die Koordinaten der Zentroide und verweist mittels eines Vektors auf die dazugehorigen Flachen. BOUNDARYTBL-Struktur: Die BOUNDARYTBL-Struktur wird hauptsachlich dafur genutzt, lineare Elemente zu laden und zu verandern: Linien, Linienzuge, Kurven und komplexe Linienzuge. Sie verweist mittels eines Vektors auf die BOUNDARY-Struktur. BOUNDARY-Struktur: Die BOUNDARY-Struktur enthalt den Vektor von Koordinaten der Begrenzungslinie. Auf die dazugehorige linke und rechte Flache der Begrenzungslinie wird ebenso verwiesen, wie auf die Knoten in der TOPONODE-Struktur, in denen die Begrenzungslinie beginnt und endet (Start- und Endknoten). AREATBL-Struktur: Die AREATBL-Struktur wird fur die Erstellung von Flachen aus der Zentroid-Tabelle und der Begrenzungslinien-Tabelle genutzt, und wird mit einfachen und komplexen Flachen gefullt. Sie verweist mittels eines Vektors auf die AREA-Struktur. AREA-Struktur: Die AREA-Struktur enthalt den Vektor von Koordinaten von Flachen und den Verweis auf KAPITEL 3. DATENSTRUKTUR TOPOLOGY 15 eventuell darin bendliche Locher. Ebenso wird mit Vektoren auf die Begrenzungslinien der Flache in der BOUNDARY-Struktur und die Zentroide der Flachen in der CENTROIDStruktur verwiesen. NODETBL-Struktur: Die NODETBL-Struktur wird auf dieselbe Art und Weise wie die AREATBL-Struktur erstellt und mit den Elementen des Typs Knoten gefullt. Sie verweist mittels eines Vektors auf die TOPONODE-Struktur. TOPONODE-Struktur: Die TOPONODE-Struktur enthalt die Koordinaten der Knoten und den Vektor von Pointern auf die Begrenzungslinien. Alle Strukturen sind samt ihrer Komponenten im Anhang A - Programmlistings aufgefuhrt. Da bei den geometrischen Elementtypen auch komplexe Elemente und nicht nur einfache Punkte, Linien und Flachen vorkommen, werden hier zunachst einmal die einzelnen Typen vorgestellt (aus Bentley Systems, MicroStation GeoGraphics Benutzerhandbuch): Zentroide (Centroid): Ein Zentroid ist ein Punktelement mit einer Datenbankver- knupfung. Ein Punktelement ist eine Nullangen-Linie, eine Zelle oder hauger eine Textzeichenfolge oder ein Textknoten. Zentroide werden als Beschriftungen oder Kennzeichnung von Flachen verwendet und benden sich immer innerhalb der topologischen Flachen. Eine groe Bedeutung besitzen die Zentroide bei der Markierung von Flachen. Ein geschlossener Bereich ohne Zentroid ist keine Flache. Im einfachsten Fall bendet sich in jeder Flache ein Zentroid mit der Datenbankverknupfung fur die Flache. Wenn es fur eine Flache mehrere Zentroide gibt, mu jeder Zentroid denselben Datenbanksatz haben. Diese Typen werden in die Zentroid-Tabelle ctrdTbl geladen. Begrenzungslinien (Boundary): Eine Begrenzungslinie ist ein lineares Element mit zwei Endpunkten und einer beliebigen Zahl von Ecken zwischen diesen beiden Endpunkten. Eine Begrenzungslinie trennt zwei U berlagerungsachen voneinander oder eine U berlagerungsache vom umgebenden Null- oder Leerdatensatz. In der Topologie bilden die Begrenzungslinien ein geschlossenes Liniennetz. Aus diesen geschlossenen Netzwerken konnen sich Flachen ergeben. Diese Typen werden in die Boundary-Tabelle bdryTbl geladen. Flachen (Area): Eine Flache ist ein geschlossenes Element oder ein Polygon. Flachen konnen einfache oder komplexe Polygonachen oder abgeleitete Polygone sein. Abgeleitete Polygone setzen sich aus Begrenzungslinien zusammen. Im allgemeinen werden in MicroStation GeoGraphics abgeleitete Flachen verwendet. Die tatsachlichen Flachenelemente werden jedoch fur thematische Karten und haug auch als temporare Arbeitselemente zum Erstellen der Topologie benotigt. Wenn die tatsachlichen Flachenelemente verwendet werden, ist fur die Bezeichnung der Flache kein Zentroid erforderlich. Ohne Zentroid wird die Datenbankverknupfung zum Flachenelement hergestellt. Diese Typen werden in die Flachen-Tabelle areaTbl geladen. KAPITEL 3. DATENSTRUKTUR TOPOLOGY 16 Knoten (Node): Ein Knoten ist ein Schnittpunkt von zwei oder mehreren Linienelementen und somit ein Punktelement. Diese Typen werden in die Knoten-Tabelle nodeTbl geladen. Die TOPOCFG-Struktur verwaltet den Ablauf, wie die vier Tabellen ctrdTbl, bdryTbl, areaTbl und nodeTbl mit den topologischen Elementen gef ullt werden. Ein Zentroid und ein Knoten entspricht dabei dem topologischen Elementtyp Knoten, eine Begrenzungslinie dem einer Kante und eine Flache dem einer Masche (Abbildung 3.2). Zentroid, Knoten = Knoten , Begrenzungslinie = Kante, Fläche = Masche Abbildung 3.2: Topologische Elementtypen Im Anhang ndet sich auch noch eine weitere wichtige Datenstruktur: die GTKFCB-Struktur. Der MicroStation GeoGraphics Feature Control Block (FCB) ermoglicht dem Anwender den Zugri auf alle wichtigen Datenstrukturen innerhalb GeoGraphics. Dies geschieht durch den externen Pointer (*fcb). Der FCB ist extern in geograph.h mittels der Struktur GTKFCB deniert. Da die Struktur in geograph.d deklariert ist, mu geograph.d in den *.mc-Files eingebunden werden (siehe Relation.mc). Kapitel 4 Topologische MDL-Funktionen MicroStation GeoGraphics bietet dem Anwender eine Vielzahl von Funktionen, in Form von MDL-Funktionen (MDL: MicroStation Developement Language mit C-ahnlichem Sprachumfang), mit denen er Aufgaben aus dem Bereich der Geoinformationssysteme innerhalb eigener Programmapplikationen in MicroStation GeoGraphics losen kann. Davon werden in dieser Arbeit aber nur die topologischen Funktionen behandelt. Bei naherer Betrachtung lassen sich diese 50 Funktionen in 5 Kategorien einteilen (Abbildung 4.1): Kategorie 1: Analysefunktionen Diese Kategorie bilden Funktionen, mit denen eine Punkt-in-Polygon-Analyse, eine Nachbarschaftsanalyse zwischen Flachen, und Verschneidungen zwischen verschiedenen Elementthemen durchgefuhrt werden konnen. Kategorie 2: Erzeugungs- und Visualisierungsfunktionen Bei diesen Funktionen handelt es sich entweder um reine Erzeugungs- oder reine Visualisierungsfunktionen, es gibt aber auch die Kombination zwischen beiden Funktionen. Mit ihnen kann man Elemente erzeugen und visualisieren, Element-Tabellen erzeugen, kopieren und erweitern, und gemeinsame Objektartenverweise extrahieren. Zentroide werden Flachen zugewiesen, Flachen werden aus Zentroiden und Begrenzungslinien erstellt, und fur Flachen werden dazugehorige Zentroide erstellt. Kategorie 3: Managementfunktionen Sollen Elemente geloscht, Topologie-Layer kopiert und initialisiert werden, dann benutzt man die Funktionen aus dieser Kategorie. Auerdem kann man mit diesen Funktionen auch den Ladevorgang beim Fullen der Element-Tabelle steuern und andern. Kategorie 4: Pruunktionen Mit diesen Funktionen konnen die Element-Tabellen eines Topologie-Layers auf verschiedene Bedingungen hin uberpruft werden. Es konnen Flachen mit mehreren Zentroiden, Flachen ohne Zentroid, Zentroide ohne Flachen, usw. gesucht werden. Desweiteren kann ein Topologie-Layer auf ungultige topologische Elemente uberpruft werden. 17 KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 18 PRÜFFUNKTIONEN ANALYSEFUNKTIONEN mdlMapArea_containsPoint mdlMapAreaTable_getAdjacent mdlMapTLayer_linePolyIntersect mdlMapTLayer_overlay mdlMapTLayer_pointPolyIntersect mdlMapAreaTable_multipleCentroids mdlMapAreaTable_noCentroid mdlMapCentroidTable_multipleAreas mdlMapCentroidTable_noArea mdlMapCentroidTable_noLinkage mdlMapTLayer_validate MANAGEMENTFUNKTIONEN mdlMapNodeTable_getNext mdlMapTLayer_copy mdlMapTLayer_init mdlMapTLayer_removeDeletes Topologische MDL-Funktionen ERZEUGUNGS- UND VISUALISIERUNGSFUNKTIONEN SPEICHERVERWALTUNGSFUNKTIONEN mdlMapArea_extractPoints mdlMapAreaTable_add mdlMapAreaTable_display mdlMapBoundary_commonLinks mdlMapBoundary_extractPoints mdlMapBoundaryTable_add mdlMapBoundaryTable_display mdlMapCentroidTable_add mdlMapCentroidTable_display mdlMapNodeTable_add mdlMapNodeTable_display mdlMapTLayer_add mdlMapTLayer_associateCentroids mdlMapTLayer_buildAreas mdlMapTLayer_createCentroids mdlMapTLayer_display mdlMapTLayer_loadDscr mdlMapTLayer_spatialJoin mdlMapAreaTable_addBlankMember mdlMapAreaTable_allocate mdlMapAreaTable_extend mdlMapAreaTable_free mdlMapBoundaryTable_addBlankMember mdlMapBoundaryTable_allocate mdlMapBoundaryTable_extend mdlMapBoundaryTable_free mdlMapCentroidTable_addBlankMember mdlMapCentroidTable_allocate mdlMapCentroidTable_extend mdlMapCentroidTable_free mdlMapNodeTable_addBlankMember mdlMapNodeTable_allocate mdlMapNodeTable_extend mdlMapNodeTable_free mdlMapTLayer_free Abbildung 4.1: MDL-Funktionskategorien KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 19 Kategorie 5: Speicherverwaltungsfunktionen Wie der Name schon sagt, kann man mit diesen Funktionen den Speicher verwalten, d.h. es wird Speicherplatz bereitgestellt, realloziiert, initialisiert und geloscht. Die in Kapitel 5 innerhalb der MDL-Applikation genutzte MDL-Funktion mdlMapGeom shapeInShape ist hier in keiner der 5 Kategorien aufgefuhrt, da sie zu den geometrischen MDL-Funktionen gehort, die in dieser Arbeit nicht behandelt werden. Sie ist aber aufgrund ihrer Funktionsweise, worauf in Kapitel 5 naher eingegangen wird, der Kategorie der Analysefunktionen zuzuordnen. 4.1 Bezeichnungen In den Funktionsbeschreibungen werden Bezeichnungen benutzt, die in diesem Abschnitt erklart werden. Ursprungstabelle: Als Ursprungstabelle wird eine Tabelle bezeichnet, die bei der Erzeugung eines Topologie-Layers erstellt/angelegt und mit den jeweiligen geometrischen Primitiven Centroid, Boundary, Area und Node gefullt wird. Diese Ursprungstabellen werden von den MDL-Funktionen benutzt, erweitert und modiziert. Es gibt 4 Ursprungstabellen: die Flachen-Ursprungstabelle (aTblP), die BegrenzungslinienUrsprungstabelle (bTblP), die Zentroid-Ursprungstabelle (cTblP) und die KnotenUrsprungstabelle (nTblP). Ursprungslayer: Als Ursprungslayer wird ein Layer bezeichnet, der bei der Topologieerstellung entsteht. Diese Layer werden dann ebenso von den MDL-Funktionen benutzt, erweitert und modiziert. Topologie-Layer: Ein Topologie-Layer ist ein Modell im Speicher, das die aus der Eingabegeometrie konstruierten raumlichen Beziehungen enthalt. Eine vom Anwender vorgegebene Menge an geometrischen Daten aus dem Design-File ist dort topologisch strukturiert. Element: Ein Element ist eine Speicherstruktur fur ein geometrisches Element. Element-Descriptor: Ein Element-Descriptor ist eine Speicherstruktur fur GeoGraphicsElemente. Ein Element-Descriptor enthalt mindestens ein einfaches geometrisches Element, z.B. einen Linienzug, er kann aber auch beliebig komplex sein, d.h. aus mehreren Elementen und Descriptoren bestehen. mslink: In Tabellen wird dieses Feld als laufende Nummer bei Elementattributverknupfungen und als eindeutige Eintragsnummer verwendet. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 20 4.2 Funktionsbeschreibungen 4.2.1 Analysefunktionen 4.2.1.1 mdlMapArea containsPoint #include <maptopo.fdf> #include <mapdefs.h> int mdlMapArea_containsPoint ( Dpoint3d *pt, /* zu uberpr ufender Punkt */ AREA *area, /* zu uberpr ufende Fl ache */ boolean allowHoles /* falls allowHoles=TRUE, werden L ocher in der Fl ache beachtet */ ); Beschreibung: mdlMapArea containsPoint uberpruft, ob sich ein Punkt innerhalb einer Flache bendet, die Funktion entspricht also der bekannten Punkt-in-Polygon Analyse. Funktionsruckgabe: INTERIOR, der Punkt bendet sich innerhalb der Flache, oder EXTERIOR, der Punkt bendet sich auerhalb der Flache, oder BOUNDARY, der Punkt bendet sich auf der Begrenzungslinie der Flache, oder IN HOLE, der Punkt bendet sich im Loch, falls allowHoles=TRUE gesetzt wurde. 4.2.1.2 mdlMapAreaTable getAdjacent #include <maptopo.fdf> int mdlMapAreaTable_getAdjacent ( AREA ***areaAP, /* Pointer auf ein Feld von Fl achen-Pointern */ int *nAreaP, /* Anzahl der benachbarten Fl achen */ AREA *areaP, /* zu untersuchende Fl ache */ AREATBL *aTblP /* zu untersuchende Fl achen-Ursprungstabelle */ boolean byNode /* falls byNode=TRUE, werden Fl achen als Nachbar angesehen, wenn sie nur einen gemeinsamen Knoten besitzen */ ); Beschreibung: mdlMapAreaTable getAdjacent vollzieht eine Nachbarschaftanalyse. Sie erzeugt in areaAP ein Feld von Flachen-Pointern. Diese Flachen-Pointer zeigen auf Flachen in aTblP, die angrenzende (benachbarte) Flachen in areaP besitzen. Die Anzahl der benachbarten Flachen wird in nAreaP zuruckgegeben. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 21 4.2.1.3 mdlMapTLayer linePolyIntersect #include <maptopo.fdf> int mdlMapTLayer_linePolyIntersect ( TOPOLOGY *newP, /* entstehender Topologie-Layer */ TOPOLOGY *leftP, /* Linien-Topologie-Layer */ TOPOLOGY *rightP, /* Polygon-Topologie-Layer */ int keep, /* keep-Parameter */ BoolInt holes, /* L ocher miteinbeziehen oder nicht (TRUE oder FALSE) */ BoolInt copyDBLinks, /* kopiere Datenbankverkn upfungen */ UShort *future, /* reserviert f ur sp ateren Gebrauch */ ULong future /* reserviert f ur sp ateren Gebrauch */ ); Beschreibung: mdlMapTLayer linePolyIntersect verschneidet ein Linienthema mit einem Flachenthema und erzeugt dabei aus zwei alten Topologie-Layern, einem Linien-Layer und einem Polygon-Layer, einen neuen Topologie-Layer. Der Anwender mu den fur den neuen Topologie-Layer benotigten Speicherplatz alloziieren und initialisieren. Der Parameter keep setzt sich aus einer Kombination von TOPO KEEP LEFT, TOPO KEEP RIGHT mit TOPO KEEP INSIDE, TOPO KEEP OUTSIDE und TOPO KEEP OVERLAP zusammen. Funktionsruckgabe: ERROR falls die Eingabe-Topologien nicht den in leftP!cfg.type und rightP!cfg.type denierten Typen entsprechen, oder SUCCESS. 4.2.1.4 mdlMapTLayer overlay #include <maptopo.fdf> int mdlMapTLayer_overlay ( TOPOLOGY **tLayerPP, /* Pointer auf neuen Topologie-Layer */ TOPOLOGY **tLayerAP, /* Feld von Pointern auf die Topologie-Ursprungslayer */ int nLayers, /* Anzahl der Topologie-Ursprungslayer */ int operator, /* Uberlagerungsoperator (TOPO_AND, TOPO_OR oder TOPO_XOR) */ int doAttr /* NO_ATTR, SOME_ATTR oder ALL_ATTR */ ); Beschreibung: mdlMapTLayer overlay fuhrt eine Flachenverschneidung durch und erzeugt dabei einen neuen Topologie-Layer mit den Ergebnissen aus der U berlagerung zweier oder mehrerer Topologie-Ursprungslayer. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 22 Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.1.5 mdlMapTLayer pointPolyIntersect #include <maptopo.fdf> int mdlMapTLayer_pointPolyIntersect ( TOPOLOGY *newP, /* entstehender Topologie-Layer */ TOPOLOGY *leftP, /* Punktelement-Topologie-Layer */ TOPOLOGY *rightP, /* Polygon-Topologie-Layer */ int keep, /* keep-Parameter */ BoolInt holes, /* L ocher miteinbeziehen oder nicht (TRUE oder FALSE) */ BoolInt copyDBLinks, /* kopiere Datenbankverkn upfungen */ UShort *future, /* reserviert f ur sp ateren Gebrauch */ ULong future /* reserviert f ur sp ateren Gebrauch */ ); Beschreibung: mdlMapTLayer pointPolyIntersect verschneidet ein Punktthema mit einem Flachenthema und erzeugt dabei aus zwei alten Topologie-Layern, einem Punktelement-Layer und einem Polygon-Layer, einen neuen Topologie-Layer. Der Parameter keep setzt sich aus einer Kombination von TOPO KEEP LEFT, TOPO KEEP RIGHT mit TOPO KEEP INSIDE, TOPO KEEP OUTSIDE und TOPO KEEP OVERLAP zusammen. Der Anwender mu den fur den neuen Topologie-Layer benotigten Speicherplatz alloziieren und initialisieren. Funktionsruckgabe: ERROR falls die Eingabe-Topologien nicht den in leftP!cfg.type und rightP!cfg.type denierten Typen entsprechen, oder SUCCESS. 4.2.2 Erzeugungs- und Visualisierungsfunktionen 4.2.2.1 mdlMapArea extractPoints #include <maptopo.fdf> int mdlMapArea_extractPoints ( AREA *area /* Pointer auf eine Fl achen-Struktur */ ); Beschreibung: mdlMapArea extractPoints kopiert das Feld der DPoint3d-Strukturen, d.h. alle Punkte von Begrenzungslinien, aus area!bdry (Flachen-Boundary-Tabelle) nach area!pts (Flachen-Punkte-Tabelle) und setzt den Wert area!nPts (Anzahl der Punkte in der Flachen-Punkte-Tabelle) auf die Anzahl der kopierten Punkte. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 23 Funktionsruckgabe: SUCCESS, d.h. der Kopiervorgang wurde erfolgreich beendet, oder MDL INSFMEMORY, d.h. aufgrund von Speicherproblemen konnte der Vorgang nicht durchgefuhrt werden. 4.2.2.2 mdlMapAreaTable add #include <maptopo.fdf> #include <mapdefs.h> #include <msdefs.h> #include <maptopo.h> int mdlMapAreaTable_add ( AREATBL *aTblP, /* Fl achen-Ursprungstabelle */ MSElement *shapeP, /* Muster-Element */ MSElement *lineP, /* Muster-Element */ MSElement *pointP, /* Muster-Element */ int drawMode, /* Anzeigemodus (NORMAL, ERASE, HILITE) */ BoolInt useShape, /* TRUE: Shapes, FALSE: Zentroide und Boundaries */ int doAttr, /* NO_ATTR, SOME_ATTR oder ALL_ATTR */ DBKey *keyA, /* Feld von Entity-mslink-Paaren */ int nKey /* Anzahl der Eintr age im keyA-Feld */ ); Beschreibung: mdlMapAreaTable add fugt alle Flachen der aktiven Flachen-Tabelle dem Design-File zu. Dabei konnen die Flachen optional als Shape-Elemente, oder als Zentroide mit den dazugehorigen Begrenzungslinien hinzugefugt werden. Werden die Flachen als ShapeElemente hinzugefugt, dann wird mittels *shapeP die Farbe, Linienstarke, Fullung, usw. abgespeichert. Wenn sie als Zentroide und Begrenzungslinien hinzugefugt werden, geschieht dies mittels *lineP und *pointP. Desweiteren konnen die Flachen entweder mit all ihren, mit keinen oder mit einigen Attributen abgespeichert werden. Funktionsruckgabe: ERROR falls die Eingaben fehlerhaft sind, anderenfalls SUCCESS. 4.2.2.3 mdlMapAreaTable display #include <maptopo.fdf> #include <msdefs.h> int mdlMapAreaTable_display ( AREATBL *aTblP, /* Fl achen-Ursprungstabelle */ MSElement *shapeP, /* Muster-Element */ MSElement *lineP, /* Muster-Element */ MSElement *pointP, /* Muster-Element */ int drawMode, /* Anzeigemodus (NORMAL, ERASE, HILITE) */ BoolInt useShape, /* TRUE: Shapes, FALSE: Zentroide und Boundaries */ int view /* Ansicht-Nr. oder -1 */ KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 24 ); Beschreibung: mdlMapAreaTable display visualisiert alle Flachen einer bestimmten Flachen-Tabelle. useShape steuert dabei die Visualisierung der Flachen. Werden sie als Shape-Elemente visualisiert, erfolgt dies mit dem Muster *shapeP fur Farbe, Linienstarke, Fullung, usw. Werden sie als Zentroide und Begrenzungslinien visualisiert, dann erfolgt dies mit den Mustern *lineP und *pointP. Desweiteren gibt der Parameter view an, in welcher Ansicht die Flachen visualisiert werden. Nimmt view den Wert -1 an, werden die Flachen in allen Ansichten visualisiert. Funktionsruckgabe: ERROR falls die Eingaben fehlerhaft sind, anderenfalls SUCCESS. 4.2.2.4 mdlMapBoundary commonLinks #include <maptopo.fdf> int mdlMapBoundary_commonLinks ( short *attr, /* Attribut-Ausgabepuffer */ int *atWds, /* Anzahl der W orter im Ausgabepuffer */ BOUNDARY **bdry, /* Feld von Pointern auf Begrenzungslinien */ int nBdry /* Anzahl der Begrenzungslinien in bdry */ ); Beschreibung: mdlMapBoundary commonLinks extrahiert die gemeinsamen Objektartenverweise aus der Begrenzungslinien-Ursprungstabelle. Funktionsruckgabe: Anzahl der gleichen Datenbankverknupfungen oder ERROR. 4.2.2.5 mdlMapBoundary extractPoints #include <maptopo.fdf> int mdlMapBoundary_extractPoints ( Dpoint3d **pPts, /* Extrahierte Anfangs- und Endpunkte aus der Menge der Begrenzungslinien */ int *pNpts, /* Anzahl der Anfangs- und Endpunkte aus der Menge der Begrenzungslinien */ Dpoint3d range[2], /* Minimum- und Maximumwert der Punktkoordinaten */ BOUNDARY **bdry, /* Feld von Pointern auf Begrenzungslinien */ char *reverse, /* falls TRUE, wird die Punktreihenfolge umgekehrt */ int numBdry /* Anzahl der Begrenzungslinien im Feld */ ); KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 25 Beschreibung: mdlMapBoundary extractPoints erzeugt Punktvektoren aus den BegrenzungslinienElementen. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDL INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. 4.2.2.6 mdlMapBoundaryTable add #include <maptopo.fdf> #include <msdefs.h> int mdlMapBoundaryTable_add ( BOUNDARYTBL *bTblP, /* Begrenzungslinien-Ursprungstabelle */ MSElement *elP, /* Symbolik-Muster-Element */ int drawMode, /* Anzeigemodus (NORMAL, ERASE, HILITE) */ int doAttr, /* NO_ATTR, SOME_ATTR oder ALL_ATTR */ DBKey *keyA, /* Feld von Entity-mslink-Paaren */ int nKey /* Anzahl der Eintr age im keyA-Feld */ ); Beschreibung: mdlMapBoundaryTable add erzeugt und visualisiert Linienelemente aus der Begrenzungslinien-Ursprungstabelle bTblP und fugt sie dem aktiven Design-File hinzu. elP wird als Muster-Element zur Bestimmung der Symbolik (Farbe, Groe und Linienart) der neuen Elemente benutzt. doAttr bestimmt dabei in welchem Ausma die Attribute an die neuen Elemente angehangt werden. Es konnen keine, alle oder nur einige Attribute aus der Ursprungstabelle angehangt werden. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.2.7 mdlMapBoundaryTable display #include <maptopo.fdf> #include <msdefs.h> int mdlMapBoundaryTable_display ( BOUNDARYTBL *bTblP, /* Pointer auf Begrenzungslinien-Ursprungstabelle */ MSElement *elP, /* Symbolik-Muster-Element */ int drawMode, /* Anzeigemodus (NORMAL, ERASE, HILITE) */ int view /* Ansicht-Nr. oder -1 */ ); Beschreibung: mdlMapBoundaryTable display erzeugt und visualisiert die Linienelemente der KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 26 Begrenzungslinien-Ursprungstabelle bTblP. elP wird als Muster-Element zur Bestimmung der Symbolik (Farbe, Groe und Linienart) der neuen Elemente benutzt. Desweiteren gibt der Parameter view an, in welcher Ansicht die Elemente visualisiert werden. Nimmt view den Wert -1 an, werden die Elemente in allen Ansichten visualisiert. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.2.8 mdlMapCentroidTable add #include <maptopo.fdf> #include <msdefs.h> int mdlMapCentroidTable_add ( CENTROIDTBL *cTblP, /* Pointer auf Zentroid-Ursprungstabelle */ MSElement *elP, /* Muster-Element */ int drawMode, /* Anzeigemodus (NORMAL, ERASE, HILITE) */ char *string, /* Zeichenkette f ur Textelemente */ int doAttr, /* NO_ATTR, SOME_ATTR oder ALL_ATTR */ DBKey *keyA, /* Feld von Entity-mslink-Paaren */ int nKey /* Anzahl der Eintr age im keyA-Feld */ ); Beschreibung: mdlMapCentroidTable add erzeugt und visualisiert die Graphik-Elemente aus der Zentroid-Ursprungstabelle cTblP und fugt sie dem aktiven Design-File hinzu. doAttr bestimmt dabei in welchem Ausma die Attribute an die neuen Elemente angehangt werden. Es konnen keine, alle oder nur einige Attribute aus der Ursprungstabelle angehangt werden. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.2.9 mdlMapCentroidTable display #include <maptopo.fdf> #include <msdefs.h> int mdlMapCentroidTable_display ( CENTROIDTBL *cTblP, /* Pointer auf Zentroid-Ursprungstabelle */ MSElement *elP, /* Muster-Element */ int drawMode, /* Anzeigemodus (NORMAL, ERASE, HILITE) */ int view, /* Ansicht-Nr. oder -1 */ char *string /* Zeichenkette f ur Zentroid-Element-Text */ ); Beschreibung: mdlMapCentroidTable display erzeugt und visualisiert Graphik-Elemente aus der KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 27 Zentroid-Ursprungstabelle cTblP. elP wird als Muster-Element zur Bestimmung der Symbolik (Farbe und Groe) der neuen Elemente benutzt. Desweiteren gibt der Parameter view an, in welcher Ansicht die Elemente visualisiert werden. Nimmt view den Wert -1 an, werden die Elemente in allen Ansichten visualisiert. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.2.10 mdlMapNodeTable add #include <maptopo.fdf> #include <msdefs.h> int mdlMapNodeTable_add ( NODETBL *nTblP, /* Pointer auf Knoten-Ursprungstabelle */ MSElement *elP, /* Symbolik-Muster-Element */ int drawMode, /* Anzeigemodus (NORMAL, ERASE, HILITE) */ char *string, /* Zeichenkette f ur Textelemente */ int doAttr, /* NO_ATTR, SOME_ATTR oder ALL_ATTR */ DBKey *keyA, /* Feld von Entity-mslink-Paaren */ int nKey /* Anzahl der Eintr age im keyA-Feld */ ); Beschreibung: mdlMapNodeTable add erzeugt und visualisiert die Graphik-Elemente der KnotenUrsprungstabelle und fugt sie dem aktiven Design-File hinzu. doAttr bestimmt dabei in welchem Ausma die Attribute an die neuen Elemente angehangt werden. Es konnen keine, alle oder nur einige Attribute aus der Ursprungstabelle angehangt werden. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.2.11 mdlMapNodeTable display #include <maptopo.fdf> #include <msdefs.h> int mdlMapNodeTable_display ( NODETBL *nTblP, /* Pointer auf Knoten-Ursprungstabelle */ MSElement *elP, /* Symbolik-Muster-Element */ int drawMode, /* Anzeigemodus (NORMAL, ERASE, HILITE) */ int view, /* Ansicht-Nr. oder -1 */ char *string /* Zeichenkette */ ); Beschreibung: mdlMapNodeTable display erzeugt und visualisiert Graphik-Elemente aus der KnotenUrsprungstabelle. elP wird als Muster-Element zur Bestimmung der Ebene und Symbolik KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 28 der neuen Elemente benutzt. Desweiteren gibt der Parameter view an, in welcher Ansicht die Elemente visualisiert werden. Nimmt view den Wert -1 an, werden die Elemente in allen Ansichten visualisiert. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.2.12 mdlMapTLayer add #include <maptopo.fdf> #include <msdefs.h> FunctionDLM int mdlMapTLayer_add ( TOPOLOGY *tLayerP, /* Pointer auf Topologie-Layer */ int type, /* AREAS oder BOUNDARIES_AND_CENTROIDS */ int doAttr /* NO_ATTR, SOME_ATTR oder ALL_ATTR */ ); Beschreibung: mdlMapTLayer add fugt die Elemente des Topologie-Layers tLayerP dem aktiven DesignFile hinzu. Je nachdem ob Flachen oder Linien und Zentroide gewahlt sind, werden die entsprechenden Tabellen durchlaufen und die gewunschten Elemente dem Design-File hinzugefugt. Dabei werden Flachen als Shape-Elemente, und Begrenzungslinien sowie Zentroide als Linien-Kette und Nullangen-Linie hinzugefugt. Die Elemente werden mit der aktiven MicroStation Symbolik erzeugt. Funktionsruckgabe: ERROR falls die Parameter nicht vollstandig sind, anderenfalls SUCCESS. 4.2.2.13 mdlMapTLayer associateCentroids #include <maptopo.fdf> int mdlMapTLayer_associateCentroids ( TOPOLOGY *tLayer /* Pointer auf zu andernden Topologie-Layer */ ); Beschreibung: mdlMapTLayer associateCentroids weist einem Zentroid aus dem Zentroid-Satz die dazugehorige Flache aus dem Flachen-Satz im Topologie-Layer tLayer zu. Die Zentroide mussen innerhalb Flachen zum liegen kommen, damit sie berucksichtigt werden. Liegt ein Zentroid auf einer Begrenzungslinie oder fallt es mit einem Endpunkt oder Punkt zusammen, wird es nicht berucksichtigt. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 29 4.2.2.14 mdlMapTLayer buildAreas #include <maptopo.fdf> int mdlMapTLayer_buildAreas ( TOPOLOGY *tlayer, /* zu erzeugender Topologie-Layer */ boolean common, /* Wert wird gesetzt, falls gemeinsame Datenbankverkn upfungen notwendig sind */ boolean holes /* falls TRUE, dann Untersuchung im Hinblick auf L ocher */ ); Beschreibung: mdlMapTLayer buildAreas erstellt Flachen aus Zentroiden und Begrenzungslinien. Dabei werden mittels der Informationen aus den Begrenzungslinien- und Zentroid-Tabellen eine Knoten- und eine Flachen-Tabelle der gegebenen Topologie erzeugt. Funktionsruckgabe: SUCCESS falls die Operation vollstandig erfolgte, anderenfalls einer der MDLERR ... Fehler-Codes. 4.2.2.15 mdlMapTLayer createCentroids #include <maptopo.fdf> int mdlMapTLayer_createCentroids ( TOPOLOGY *tLayer /* Pointer auf zu ver andernden Topologie-Layer */ ); Beschreibung: mdlMapTLayer createCentroids erzeugt fur jede Flache in der Flachen-Ursprungstabelle ein dazugehoriges Zentroid, welches in der Zentroid-Ursprungstabelle abgespeichert wird. Alle schon existierenden Zentroide und Querverweise zwischen der Zentroid- und Flachen-Tabelle werden geloscht. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.2.16 mdlMapTLayer display #include <maptopo.fdf> #include <msdefs.h> FunctionDLM int mdlMapTLayer_display ( TOPOLOGY *tLayerP, /* Pointer auf darzustellenden Topologie-Layer */ int type, /* AREAS oder BOUNDARIES_AND_CENTROIDS */ int drawMode, /* Anzeigemodus (NORMAL, HILITE, ERASE) */ int view /* Ansicht-Nr. oder -1 */ ); KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 30 Beschreibung: mdlMapTLayer display visualisiert alle Elemente des Topologie-Layers ohne das DesignFile zu verandern. Je nachdem ob Flachen oder Begrenzungslinien und Zentroide gewahlt sind, werden die entsprechenden Tabellen durchlaufen und die gewunschten Elemente visualisiert. Dabei werden Flachen als Shape-Elemente ohne Zentroide, und Begrenzungslinien sowie Zentroide als Linien-Kette und Nullangen-Linien visualisiert. Die Elemente werden mit der aktiven MicroStation Symbolik erzeugt. Funktionsruckgabe: ERROR falls die Parameter nicht vollstandig sind, anderenfalls SUCCESS. 4.2.2.17 mdlMapTLayer loadDscr #include <maptopo.fdf> int mdlMapTLayer_loadDscr ( MSElement *elP, /* Pointer auf aktives Element */ TOPOLOGY *tLayerP, /* Pointer auf den aktiven Layer */ int fileNo, /* File-Nr. des aktiven Elements */ MSElementDescr *edP, /* Pointer auf aktiven Element-Descriptor */ MSElementDescr **edPP /* Pointer auf neuen Element-Descriptor (unben utzt) */ ); Beschreibung: mdlMapTLayer loadDscr wird als Funktionsargument fur das interaktive Erstellen eines Topologie-Layers genutzt und erzeugt TOPOLOGY aus Descriptor-Elementen. Die Funktion regelt den Ablauf, wie die geometrischen Elemente in den zu bearbeitenden Topologie-Layer geladen werden. Dabei werden sie gema den Einstellungen in der TOPOCFG-Struktur in den Topologie-Layer geladen. Funktionsruckgabe: Immer MODIFY STATUS NOCHANGE. 4.2.2.18 mdlMapTLayer spatialJoin #include <maptopo.fdf> MdlFunctionP mdlMapTLayer_spatialJoin ( TOPOLOGY **newTLayerPP, /* Neuer Topologie-Layer */ TOPOLOGY *tLayerP, /* zu verkn upfender Topologie-Layer */ char *joinTableNameP, /* Name der Verkn upfungstabelle */ short *entityNumP, /* Feld der zu verkn upfenden EntityNummern (Tabellen) */ int *numEntities, /* Anzahl der Entities im Feld */ char *joinTableColPP, /* Entity-Spalte in der Verkn upfungstabelle */ boolean newLinks /* TRUE, wenn neuer Layer erzeugt und mit der Verkn upfungstabelle verbunden wird */ KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 31 ); Beschreibung: mdlMapTLayer spatialJoin erzeugt in der Datenbank eine Querverweis-Tabelle von den Verknupfungen der Elemente des Topologie-Layers tLayerP. Im Falle eines LinienTopologie-Layers wird fur jede Begrenzungslinie eine Zeile in der Verbindungstabelle erstellt. Das selbe geschieht fur ein Zentroid im Falle eines Punkt-Topologie-Layers und fur eine Flache im Falle eines Polygon-Topologie-Layers. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich war. 4.2.3 Managementfunktionen 4.2.3.1 mdlMapNodeTable getNext #include <maptopo.fdf> int mdlMapNodeTable_getNext ( int *nxtNodeI, /* Index des n achsten Knotens */ int *nxtBdryI, /* Index der n achsten Begrenzungslinie */ int curNodeI, /* Index des momentanen Knotens in nodes */ int curBdryI, /* Index der momentanen Begrenzungslinie in curNode */ NODETBL *nodeTbl /* Feld mit Knoten */ ); Beschreibung: mdlMapNodeTable getNext wird durch die Funktion mdlMapTLayer add aufgerufen. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.3.2 mdlMapTLayer copy #include <maptopo.fdf> FunctionDLM int mdlMapTLayer_copy ( TOPOLOGY *destTopoP, /* Ziel der zu kopierenden Topologie */ TOPOLOGY *srcTopoP, /* Pointer auf zu kopierende Topologie */ char *copyNameP /* Name der zu kopierenden Topologie */ ); Beschreibung: mdlMapTLayer copy kopiert Topologie-Layer, d.h. alle angewiesenen Datenstrukturen werden von srcTopoP nach destTopoP kopiert. Die kopierten Begrenzungslinien, Zentroide, Flachen und Knoten sowie deren Attribute werden in destTopoP alloziiert. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 32 Funktionsruckgabe: GTERR INSFINFO falls einer der durchlaufenen Parameter NULL ist, MDLERR INSFMEMORY falls wegen fehlendem Speicher nichts zugewiesen werden konnte, oder SUCCESS. 4.2.3.3 mdlMapTLayer init #include <maptopo.fdf> int mdlMapTLayer_init ( TOPOLOGY *tLayerP, /* zu initialisierende Topologie-Struktur */ TOPOCFG *cfgP, /* Konfigurationseinstellungen */ int alloc, /* Anzahl der zu alloziierenden Eintr age in jeder Untertabelle */ int incr /* Anzahl der zu inkrementierenden Tabelleneintr age */ ); Beschreibung: mdlMapTLayer init loscht den Inhalt von tLayerP und deniert die Parameter der TOPOCFG-Struktur in tLayerP. Diese eigene TOPOCFG-Struktur in tLayerP bestimmt die Art und Weise, wie graphische Elemente in die Topologie-Struktur geladen werden. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDL INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. 4.2.3.4 mdlMapTLayer removeDeletes #include <maptopo.fdf> int mdlMapTLayer_removeDeletes ( TOPOLOGY *tLayer /* zu ver andernder Topologie-Ursprungslayer */ ); Beschreibung: mdlMapTLayer removeDeletes loscht samtliche Begrenzungslinien eines bestimmten Typs aus der Begrenzungslinien-Tabelle des Topologie-Ursprungslayers, wenn das \geloscht"Bit in den Eigenschaften gesetzt ist. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.4 Pruunktionen 4.2.4.1 mdlMapAreaTable multipleCentroids #include <maptopo.fdf> int mdlMapAreaTable_multipleCentroids ( KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN MSElementDescr **edPP, int *countP, AREATBL *aTblP, CENTROIDTBL *cTblP, char *string, int entNum ); /* /* /* /* /* /* 33 Element-Descriptor */ Anzahl der Textelemente in edPP */ Fl achen-Ursprungstabelle */ Zentroid-Ursprungstabelle */ Zeichenkette f ur Fehlertext */ optionale Entity-Nummer */ Beschreibung: mdlMapAreaTable multipleCentroids pruft, ob eine Flache mehrere Zentroide enthalt. Ist dies der Fall, dann wird ein Element-Descriptor mit Textelementen erzeugt, der solche Flachen markiert. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.4.2 mdlMapAreaTable noCentroid #include <maptopo.fdf> int mdlMapAreaTable_noCentroid ( MSElementDescr **edPP, /* Element-Descriptor */ int *countP, /* Anzahl der Textelemente in edPP */ AREATBL *aTblP, /* Fl achen-Ursprungstabelle */ CENTROIDTBL *cTblP, /* Zentroid-Ursprungstabelle */ char *string, /* Zeichenkette f ur Fehlertext */ int entNum /* optionale Entity-Nummer */ ); Beschreibung: mdlMapAreaTable noCentroid pruft, ob Flachen existieren, die kein Zentroid enthalten. Ist dies der Fall, dann wird ein Element-Descriptor mit Textelementen erzeugt, der solche Flachen markiert. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.4.3 mdlMapCentroidTable multipleAreas #include <maptopo.fdf> int mdlMapCentroidTable_multipleAreas ( MSElementDescr **edPP, /* Element-Descriptor */ int *countP, /* Anzahl der Textelemente in edPP */ CENTROIDTBL *cTblP, /* Pointer auf Zentroid-Ursprungstabelle */ AREATBL *aTblP, /* Pointer auf Fl achen-Ursprungstabelle */ char *string /* Zeichenkette f ur Fehlertext */ ); KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 34 Beschreibung: mdlMapCentroidTable multipleAreas pruft, ob ein Zentroid in mehreren Flachen liegt. Ist dies der Fall, dann wird ein Element-Descriptor mit Textelementen erzeugt, der dieses Zentroid markiert. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.4.4 mdlMapCentroidTable noArea #include <maptopo.fdf> int mdlMapCentroidTable_noArea ( MSElementDescr **edPP, /* Element-Descriptor */ int *countP, /* Anzahl der ung ultigen Zentroide */ CENTROIDTBL *cTblP, /* Pointer auf Zentroid-Ursprungstabelle */ AREATBL *aTblP, /* Pointer auf Fl achen-Ursprungstabelle */ char *string /* Zeichenkette f ur Fehlertext */ ); Beschreibung: mdlMapCentroidTable noArea pruft, ob Zentroide existieren, die in keiner Flache liegen. Ist dies der Fall, dann wird ein Element-Descriptor mit Textelementen erzeugt, der diese Zentroide markiert. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.4.5 mdlMapCentroidTable noLinkage #include <maptopo.fdf> int mdlMapCentroidTable_noLinkage ( MSElementDescr **edPP, /* Element-Descriptor */ int *countP, /* Anzahl der Textelemente in edPP */ CENTROIDTBL *cTblP, /* Pointer auf Zentroid-Ursprungstabelle */ char *string /* Zeichenkette f ur Fehlertext */ int entNum /* Entity-Nr. */ ); Beschreibung: mdlMapCentroidTable noLinkage pruft, ob Zentroide ohne Objektartverweis existieren. Ist dies der Fall, dann wird ein Element-Descriptor mit Textelementen erzeugt, der diese Zentroide markiert. entNum bestimmt dabei, welche Entity nach Verknupfungen auf Zentroide durchsucht werden soll. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 35 4.2.4.6 mdlMapTLayer validate #include <maptopo.fdf> int mdlMapTLayer_validate ( MSElementDescr **cnaEdPP, int *cnaNumP, MSElementDescr **cnlEdPP, int *cnlNumP, MSElementDescr **cmaEdPP, int *cmaNumP, MSElementDescr **ancEdPP, int *ancNumP, MSElementDescr **amcEdPP, int *amcNumP, int entNum, TOPOLOGY *tLayerP ); /* /* /* /* /* /* /* /* /* /* /* /* Zentroide die nicht in Fl achen liegen */ Anzahl dieser Zentroide */ Zentroide ohne Verkn upfungen */ Anzahl dieser Zentroide */ Zentroide innerhalb mehrerer Fl achen */ Anzahl dieser Zentroide */ Fl achen ohne Zentroide */ Anzahl dieser Fl achen */ Fl achen mit mehreren Zentroiden */ Anzahl dieser Fl achen */ Entity-Nr. */ Topologie-Ursprungslayer */ Beschreibung: mdlMapTLayer validate erzeugt einen Satz von Element-Descriptoren, welche die x,yPositionen von Textelementen beinhalten, die auf ungultige topologische Objekte des Topologie-Ursprungslayers hinweisen. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.5 Speicherverwaltungsfunktionen 4.2.5.1 mdlMapAreaTable addBlankMember #include <maptopo.fdf> int mdlMapAreaTable_addBlankMember ( AREATBL *areaTbl /* Pointer auf Fl achen-Tabelle */ ); Beschreibung: mdlMapAreaTable addBlankMember hangt eine leere Flachen-Struktur an das Ende der Flachen-Tabelle areaTbl an und erhoht die Anzahl der Eintrage areaTbl!num um 1. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDL INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. 4.2.5.2 mdlMapAreaTable allocate #include <maptopo.fdf> int mdlMapAreaTable_allocate KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 36 ( AREATBL *areaTbl, /* Alloziierter Speicherplatz f ur Fl achen-Tabelle */ int alloc, /* urspr ungliche Menge an alloziierten Fl achen */ int incr /* Realloziierungsinkrement */ ); Beschreibung: mdlMapAreaTable allocate alloziiert den Speicherplatz fur eine neue Flachen-Tabelle. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.5.3 mdlMapAreaTable extend #include <maptopo.fdf> int mdlMapAreaTable_extend ( AREATBL *areaTbl /* Pointer auf Fl achen-Tabelle */ ); Beschreibung: mdlMapAreaTable extend realloziiert den von der Flachen-Ursprungstabelle verwendeten Speicherplatz mit dem Wert des Inkrements areaTbl!incr. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDLERR INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. 4.2.5.4 mdlMapAreaTable free #include <maptopo.fdf> void mdlMapAreaTable_free ( AREATBL *areaTbl /* Pointer auf Fl achen-Tabelle */ ); Beschreibung: mdlMapAreaTable free gibt den von der Flachen-Ursprungstabelle verwendeten Speicherplatz frei. Funktionsruckgabe: Es werden keine Resultatwerte zuruckgegeben, da die Funktion vom Typ void ist. 4.2.5.5 mdlMapBoundaryTable addBlankMember #include <maptopo.fdf> int mdlMapBoundaryTable_addBlankMember ( KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 37 BOUNDARYTBL *bdryTbl /* Pointer auf Begrenzungslinien-Tabelle */ ); Beschreibung: mdlMapBoundaryTable addBlankMember hangt eine leere Begrenzungslinien-Struktur an das Ende der Begrenzungslinien-Tabelle bdryTbl an und erhoht den Wert bdryTbl!num um 1. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDL INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. 4.2.5.6 mdlMapBoundaryTable allocate #include <maptopo.fdf> int mdlMapBoundaryTable_allocate ( BOUNDARYTBL *bdryTbl, /* Alloziierter Speicherplatz f ur Begrenzungslinien-Tabelle */ int alloc, /* urspr ungliche Menge an alloziierten Begrenzungslinien */ int incr /* Realloziierungsinkrement */ ); Beschreibung: mdlMapBoundaryTable allocate reserviert Speicherplatz fur eine BegrenzungslinienTabelle. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.5.7 mdlMapBoundaryTable extend #include <maptopo.fdf> int mdlMapBoundaryTable_extend ( BOUNDARYTBL *bdryTbl /* Pointer auf Begrenzungslinien-Tabelle */ ); Beschreibung: mdlMapBoundaryTable extend realloziiert den von der BegrenzungslinienUrsprungstabelle verwendeten Speicherplatz mit dem Wert des Inkrements bdryTbl!incr. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDLERR INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 38 4.2.5.8 mdlMapBoundaryTable free #include <maptopo.fdf> void mdlMapBoundaryTable_free ( BOUNDARYTBL *bdryTbl /* Pointer auf Begrenzungslinien-Tabelle */ ); Beschreibung: mdlMapBoundaryTable free gibt den von der Begrenzungslinien-Ursprungstabelle verwendeten Speicherplatz frei. Funktionsruckgabe: Es werden keine Resultatwerte zuruckgegeben, da die Funktion vom Typ void ist. 4.2.5.9 mdlMapCentroidTable addBlankMember #include <maptopo.fdf> int mdlMapCentroidTable_addBlankMember ( CENTROIDTBL *cntrTbl /* Pointer auf Zentroid-Tabelle */ ); Beschreibung: mdlMapCentroidTable addBlankMember hangt eine leere Zentroid-Struktur an das Ende der Zentroid-Tabelle cntrTbl an und erhoht den Wert cntrTbl!num um 1. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDL INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. 4.2.5.10 mdlMapCentroidTable allocate #include <maptopo.fdf> int mdlMapCentroidTable_allocate ( CENTROIDTBL *cntrTbl, /* Alloziierter Speicherplatz f ur ZentroidTabelle */ int alloc, /* urspr ungliche Menge an alloziierten Zentroiden */ int incr /* Realloziierungsinkrement */ ); Beschreibung: mdlMapCentroidTable allocate reserviert Speicherplatz fur eine Zentroid-Tabelle. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 39 4.2.5.11 mdlMapCentroidTable extend #include <maptopo.fdf> int mdlMapCentroidTable_extend ( CENTROIDTBL *cntrTbl /* Pointer auf Zentroid-Tabelle */ ); Beschreibung: mdlMapCentroidTable extend realloziiert den von der Zentroid-Ursprungstabelle benutzten Speicherplatz mit dem Wert cntrTbl!incr. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDLERR INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. 4.2.5.12 mdlMapCentroidTable free #include <maptopo.fdf> void mdlMapCentroidTable_free ( CENTROIDTBL *cntrTbl /* Pointer auf Zentroid-Tabelle */ ); Beschreibung: mdlMapCentroidTable free loscht den von der Zentroid-Ursprungstabelle benutzten Speicherplatz. Die Daten, die auf die Pointer in der Zentroid-Tabelle verweisen, werden nicht geloscht. Funktionsruckgabe: Es werden keine Resultatwerte zuruckgegeben, da die Funktion vom Typ void ist. 4.2.5.13 mdlMapNodeTable addBlankMember #include <maptopo.fdf> int mdlMapNodeTable_addBlankMember ( NODETBL *nodeTbl /* Pointer auf Knoten-Tabelle */ ); Beschreibung: mdlMapNodeTable addBlankMember hangt eine leere Knoten-Struktur an das Ende der Knoten-Tabelle nodeTbl an und erhoht den Wert nodeTbl!num um 1. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDL INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 40 4.2.5.14 mdlMapNodeTable allocate #include <maptopo.fdf> int mdlMapNodeTable_allocate ( NODETBL *nodeTbl, /* Alloziierter Speicherplatz f ur Knoten-Tabelle */ int alloc, /* urspr ungliche Menge an alloziierten Knoten */ int incr /* Realloziierungsinkrement */ ); Beschreibung: mdlMapNodeTable allocate reserviert Speicherplatz fur eine Knoten-Tabelle. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls ERROR. 4.2.5.15 mdlMapNodeTable extend #include <maptopo.fdf> int mdlMapNodeTable_extend ( NODETBL *nodeTbl /* Pointer auf Knoten-Tabelle */ ); Beschreibung: mdlMapNodeTable extend realloziiert den von der Knoten-Ursprungstabelle benutzten Speicherplatz mit dem Wert nodeTbl!incr. Funktionsruckgabe: SUCCESS falls die Funktion erfolgreich beendet wurde, anderenfalls MDLERR INSFMEMORY wenn nicht genugend Speicherplatz zur Verfugung steht. 4.2.5.16 mdlMapNodeTable free #include <maptopo.fdf> void mdlMapNodeTable_free ( NODETBL *nodes /* Pointer auf Knoten-Tabelle */ ); Beschreibung: mdlMapNodeTable free loscht den von der Knoten-Ursprungstabelle benotigten Speicherplatz. 4.2.5.17 mdlMapTLayer free void mdlMapTLayer_free ( TOPOLOGY *topo /* Pointer auf zu l oschende Topologie */ ); KAPITEL 4. TOPOLOGISCHE MDL-FUNKTIONEN 41 Beschreibung: mdlMapTLayer free loscht den gesamten von der aktiven Topologie-Tabelle genutzten Speicher. Funktionsruckgabe: Es werden keine Resultatwerte zuruckgegeben, da die Funktion vom Typ void ist. Kapitel 5 MDL-Applikation Relationentest Die Bestimmung der topologischen Relation zwischen zwei Objekten ist eine der Aufgaben der Topologie innerhalb von Geoinfomationssystemen. Die dabei auftretenden Relationen wurden bereits in Kapitel 2 erklart. Da die zu entwickelnde MDL-Applikation sich nur auf die generelle relative Lage zweier achenformiger Objekte beschranken soll, werden auch nur die vier Relationen CONTAINS, DISJOINT, INSIDE und INTERSECT verwendet, da diese den Rand der Objekte nicht beachten. 5.1 Programmbeschreibung Die MDL-Applikation sieht einen Relationentest zwischen den Flachen zweier topologischer Layer vor. Um diesen Test zu realisieren und die jeweilige Relation zu bestimmen, wird folgende MDL-Funktion aus den geometrischen MDL-Funktionen im Programm Relation.mc genutzt: mdlMapGeom shapeInShape #include <mapdefs.h> #include <mapgeom.fdf> long mdlMapGeom_shapeInShape ( Dpoint3d *xy1, /* Punkte des ersten Polygons */ Dpoint3d *xy2, /* Punkte des zweiten Polygons */ int nv1, /* Anzahl der Punkte des ersten Polygons */ int nv2, /* Anzahl der Punkte des zweiten Polygons */ Dpoint3d *rr1, /* Minimal einschlieendes Rechteck des ersten Polygons */ Dpoint3d *rr2 /* Minimal einschlieendes Rechteck des zweiten Polygons */ ); Diese Funktion bestimmt die topologische Relation des ersten Polygons zum zweiten Polygon. Die minimal einschlieenden Rechtecke (MER) sind dabei nicht erforderlich, sie beschleunigen aber den Algorithmus, wenn sie vorhanden sind. Die Funktion mdlMapGeom shapeInShape liefert als Ergebnis die Werte INTERIOR, EXTERIOR oder OVERLAP (Abbildung 5.1). 42 KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 43 A B B A INTERIOR B A EXTERIOR OVERLAP Abbildung 5.1: Funktionsergebnis Dabei entspricht INTERIOR der Relation A INSIDE B, EXTERIOR der Relation A DISJOINT B und OVERLAP der Relation A INTERSECT B. Es fehlt demnach die Relation A CONTAINS B. Gehen wir von dem Fall aus, man wahlt A als erstes und B als zweites Polygon, so kann man als Ergebnis die drei Relationen A INSIDE B, A DISJOINT B und A INTERSECT B erhalten. Die beiden symmetrischen Relationen DISJOINT und INTERSECT sind unabhangig von der Untersuchungsreihenfolge, A DISJOINT B entspricht B DISJOINT A und A INTERSECT B entspricht B INTERSECT A. Sie stellen also kein Problem dar. Sollte aber die Relation zwischen den beiden Polygonen A CONTAINS B sein, liefert die Funktion nicht sofort ein Ergebnis. Die Funktion mu deshalb mit vertauschter Polygonreihenfolge durchlaufen werden, um die Relation B INSIDE A zu erhalten, welche der Relation A CONTAINS B entspricht. In Relation.mc werden die Punkte des ersten Polygons als shapeA und die Punkte des zweiten Polygons als shapeB deklariert. Die Anzahl der Punkte der Polygone werden mit numPtsA und numPtsB bezeichnet. Auf die minimal einschlieenden Rechtecke wird verzichtet, da sie nicht erforderlich sind, d.h. merA und merB werden NULL gesetzt. Im Anhang A - Programmlistings sind alle Programme der MDL-Applikation Relationentest aufgefuhrt. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 44 5.2 Programmablauf Im folgenden wird der Ablauf eines Relationentests beschrieben. 1.Schritt: MicroStation GeoGraphics onen Zuerst wird das Programm MicroStation GeoGraphics aufgerufen. Ist dies geschehen erscheint der \MicroStation-Manager" (Abbildung 5.2). Abbildung 5.2: Dialogfeld \MicroStation-Manager" Hier wahlt man im Feld \Dateien" die MicroStation-Zeichnungsdatei \work.dgn" und bestatigt die Eingabe mit \OK". Es erscheint die GeoGraphics-Oberache mit der Zeichnungsdatei. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 45 2.Schritt: Projekt onen Das Projekt wird geonet, indem man aus dem Menu \Projekt" den Menupunkt \O nen" wahlt, und somit das Dialogfeld \Projekt onen" aufruft (Abbildung 5.3). Abbildung 5.3: Dialogfeld \Projekt onen" Im Gruppenfeld \Projekt" wird im Feld \Verzeichnis" der Pfad gewahlt und anschlieend die Optionen \Datenbankverbindung" und \Datenbank laden" im Gruppenfeld \Datenbank" angeklickt. Im Feld \Anmelden" wird noch das notwendige Pawort eingegeben, und mit \OK" das Projekt geonet. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 46 3.Schritt: Topologie-Layer erstellen Jetzt kann mit der Erstellung der Topologie-Layer begonnen werden. Dazu mu die MDLApplikation \Topology Analysis" geladen werden. Im Menu \Extras" bendet sich zwar der Menupunkt \Topologieanalyse", mit dem auch die MDL-Applikation \Topologieanalyse" geladen werden kann, da diese Applikation jedoch einen Fehler aufweist, sollte mit ihr nicht gearbeitet werden. Der Fehler auert sich darin, da der Verweis fcb->tlayer auf den MicroStation GeoGraphics Feature Control Block (FCB) bei der Erstellung eines Topologie-Layers nicht erzeugt wird. Somit ist dann auch der Zugri auf die TOPOLOGYStruktur nicht moglich und die MDL-Funktionen in MicroStation GeoGraphics konnen nicht auf die abgespeicherten Elemente zugreifen. Deshalb wahlt man im Menu \Extras" den Menupunkt \MDL-Applikationen". Es onet sich das Dialogfeld \MDL" (Abbildung 5.4). Abbildung 5.4: Dialogfeld \MDL" Im Gruppenfeld \Geladene Applikationen" erkennt man die bereits von GeoGraphics automatisch geladenen Applikationen, und im Gruppenfeld \Verfugbare Applikationen" kann man mittels Task-ID und Dateiname die gewunschte Applikationen auswahlen und dazuladen. Die fehlerfreie Applikation besitzt das Task-ID TOPO ENG und den Dateinamen topo eng.ma. Nachdem man sie ausgew ahlt hat, wird sie mit \Laden" zu den geladenen Applikationen hinzugefugt und es erscheint das Dialogfeld \Topology Analysis" (Abbildung 5.5). KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 47 Abbildung 5.5: Dialogfeld \Topology Analysis" Um die Topologie-Layer zu erzeugen, klickt man im Ansichtenfeld Nr.1 auf den Button \Ansicht einpassen" und die relevanten Objekte werden im Kartenfeld sichtbar gemacht (Abbildung 5.6). Abbildung 5.6: Kartenfeld \Ansicht 1" Um die Topologie-Layer \TopoLayerA" und \TopoLayerB" fur den spateren Relationentest zu erzeugen, mu zunachst der \Anzeige-Manager" aufgerufen werden. Dies geschieht indem der Menupunkt \Anzeige-Manager" im Menu \Extras" gewahlt wird. Das Dialogfeld \Anzeige-Manager" erscheint (Abbildung 5.7). KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 48 Abbildung 5.7: Dialogfeld \Anzeige-Manager" Der \Modus" wird von \Ebene" auf \Feature" gestellt und im Listenfeld \Feature" die Objektart \Flache A" der Kategorie \Flachen" markiert. Mit dem Button \Ein" wird das Feature ausgewahlt und mit dem Button \Aktualisieren" wird die Kartenanzeige aktualisiert. Es sind jetzt nur noch die blauen Flachen der Objektart \Flache A" sichtbar. Um diese vier Flachen wird nun ein Zaun mittels der Funktion \Zaun plazieren" in der Hauptsymbolleiste, plaziert. Nun wird in das Dialogfeld \Topology Analysis" gewechselt und im Menu \Settings" die Optionen \Holes" (Locher in Flachen berucksichtigen) und \Shapes as Areas" (Topologie-Layer aus einfachen Polygonachen und komplexen Polygonachenelementen bilden) angeklickt. Im Textfeld wird der Name des zu erstellenden Topologie-Layers eingegeben, hier \TopoLayerA". Das Feld \Type" bleibt mit der Einstellung \Polygon" unverandert und der Topologie-Layer besitzt damit den Typ Polygon. Die Einstellung \Polygon" lat Flachenbegrenzungen und Zentroide sowie einfache oder komplexe Polygonachen als Elementtypen zur Erzeugung eines Topologie-Layers zu. Desweiteren konnen noch die Einstellungen \Punkt" (TopologieLayer-Typ: Punkt. Zulassige Elementtypen: Textknoten, Nullange-Linien, Punkte und normale Zellen) oder \Linie" (Topologie-Layer-Typ: Linie. Zulassige Elementtypen: Linien, Linienzuge, komplexe Linienzuge) gewahlt werden. Nach dem Drucken des Buttons \Create" wird man aufgefordert, in dem Ansichtenfenster einen Punkt innerhalb des Zaunes anzuklicken. Ist dies geschehen, erscheint der Topologie-Layer \TopoLayerA" des Typs \Polygon" im Listenfeld, und die Erstellung des Topologie-Layers ist beendet. Der zweite Topologie-Layer \TopoLayerB" wird auf dieselbe Art und Weise mit den roten Flachen des Features \Flache B" der Kategorie \Flachen" erstellt. Ist auch der zweite Topologie-Layer erstellt, konnen wieder samtliche Features mittels des \Anzeige-Manager" sichtbar gemacht werden und der Relationentest kann beginnen. Danach kann der \Anzeige-Manager" geschlossen werden, da er nicht mehr benotigt wird. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 49 4.Schritt: Relationentest starten Man wechselt wieder in das Dialogfeld \MDL", und ladt die fur den Relationentest benotigte MDL-Applikation \Relationentest". Man erkennt sie an dem Task-ID RELATION und dem Dateinamen relation.ma. Nachdem dies geschehen ist erscheint das gewunschte Dialogfeld \Relationentest" (Abbildung 5.8). Abbildung 5.8: Dialogfeld \Relationentest" Hier kann nun mittels eines Option-Buttons die gewunschte topologische Relation aus den vier Relationen A CONTAINS B, A DISJOINT B, A INSIDE B und A INTERSECT B ausgewahlt werden (Abbildung 5.9). Abbildung 5.9: OptionButton Mit dem \Start Test"-Button wird der Relationentest mit der ausgewahlten Relation gestartet. Der \Cancel Test"-Button schliet das Dialogfeld und entladt es aus dem Speicher. Fur einen erneuten Relationentest mu das Dialogfeld wie oben beschrieben nochmals geladen werden. Das \MicroStation Text Window" onet sich im Hintergrund sobald der \Start Test"- oder \Cancel Test"-Button gedruckt wird. In diesem Fenster wird der gesamte Programmablauf sowie das Ergebnis des Relationentests aufgefuhrt. Anhand der folgenden Beispiele wird fur jede der vier Relationen das Ergebnis dargestellt. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 50 5.2.1 Beispiel der Relation CONTAINS Abbildung 5.10: Relation A CONTAINS B Abbildung 5.6 zeigt die acht Polygone der beiden Features \Flache A" (blaue Polygone) und \Flache B" (rote Polygone) in ihrer Ausgangssituation. Wird jetzt im Dialogfeld \Relationentest" die Relation A CONTAINS B gewahlt und der \Start Test"-Button gedruckt, somit der Relationentest gestartet, dann werden die Flachen der beiden Topologie-Layer \TopoLayerA" und \TopoLayerB" gelb dargestellt, welche die Relation A CONTAINS B besitzen (Abbildung 5.10). Im \MicroStation Text Window" wird der Ablauf des Relationentests dokumentiert und die Polygone, welche die gewunschte Relation aufweisen, ausgedruckt. Auerdem werden noch diejenigen Polygone in Form von Textnachrichten aufgefuhrt, welche die Relation A CONTAINS B nicht erfullen. Hier ist auch zu erkennen, wie die einzelnen Polygone aus den beiden Topologie-Layern im Hinblick auf die Relation CONTAINS untersucht werden. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 51 5.2.2 Beispiel der Relation DISJOINT Abbildung 5.11: Relation A DISJOINT B Bei dieser Relation kommt eine Besonderheit zum Tragen. Werden hier wie bei allen anderen Beispielen die Topologie-Layer \TopoLayerA" und \TopoLayerB" verwendet, die alle vier Polygone eines Features beinhalten, dann werden alle acht Polygone gelb dargestellt. Dies ist der Fall, da alle Polygone der beiden Topologie-Layer der Reihe nach auf die Relation A DISJOINT B hin uberpruft werden und das erste Polygon des \TopoLayerA" mit dem zweiten, dritten und vierten Polygon des \TopoLayerB" die Relation A DISJOINT B aufweist. Das zweite Polygon des \TopoLayerA" weist mit allen Polygonen des \TopoLayerB" die Relation A DISJOINT B auf, usw.. Am Ende sind dann alle Polygone gelb dargestellt. Um diesen Fall zu umgehen, werden mit dem zweiten blauen Polygon ein neuer TopologieLayer \TopoTeilLayerA" und dem zweiten roten Polygon ein neuer Topologie-Layer \TopoTeilLayerB" wie vorher beschrieben erstellt. Jetzt konnen die beiden Polygone durch Auswahlen der Relation A DISJOINT B miteinander verglichen werden und das Ergebnis sieht dann wie in Abbildung 5.11 aus. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 52 5.2.3 Beispiel der Relation INSIDE Abbildung 5.12: Relation A INSIDE B Hier kann wieder mit den alten Topologie-Layern \TopoLayerA" und \TopoLayerB" gearbeitet werden. Nachdem die Relation A INSIDE B gewahlt und der \Start Test"-Button gedruckt wurde, erscheint das in Abbildung 5.12 aufgefuhrte Ergebnis. Es werden die Polygone mit der gewunschten Relation gelb dargestellt und im \MicroStation Text Window" werden die Ergebnisse nochmals dokumentiert. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 53 5.2.4 Beispiel der Relation INTERSECT Abbildung 5.13: Relation A INTERSECT B Zum Schlu zeigt Abbildung 5.13 noch das Ergebnis des Relationentests mit der ausgewahlten Relation A INTERSECT B. Die ursprunglichen Topologie-Layer \TopoLayerA" und \TopoLayerB" konnen auch hier ohne weiteres verwendet werden. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 54 5.3 Anwendungsbeispiel Bei diesem Beispiel wird der Relationentest dazu verwendet, aus einem Satz von Flurstucken diejenigen herauszultern, die innerhalb einer U berutungszone zum liegen kommen und somit bei Hochwasser uberutet werden. Dazu verwendet man die Design-Files Flurstuecke.dgn und WasserZone.dgn, die sich auf der beiliegenden Programmdiskette im Verzeichnis DgnFiles benden. Ersten Topologie-Layer aus Design-File \Flurstuecke.dgn" erstellen Um die gewunschten Flurstucke herauszultern, onet man zuerst das Design-File Flurstuecke.dgn (Abbildung 5.14), welches samtliche Flurstucke des zu untersuchenden Datensatzes enthalt, und erstellt daraus, wie im vorangegangenen Beispiel beschrieben, einen Topologie-Layer (hier: \Flurstucke"). Abbildung 5.14: Design-File \Flurstucke" Ist dies geschehen, kann das Design-File Flurstuecke.dgn wieder geschlossen werden. KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 55 Zweiten Topologie-Layer aus Design-File \WasserZone.dgn" erstellen Das Design-File WasserZone.dgn (Abbildung 5.15) wird geonet, es enthalt die U berutungszone bei Hochwasser, und man erstellt daraus den zweiten Topologie-Layer (hier: \U berutungszone"). Abbildung 5.15: Design-File \U berutungszone" KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 56 Selektierung der gewunschten Flurstucke Nachdem man die beiden fur den Relationentest notwendigen Topologie-Layer erstellt hat, beginnt man damit, die vom Hochwasser betroenen Flurstucke aus dem Satz der Flurstucke herauszultern. Zur besseren U bersicht werden die beiden Topologie-Layer nochmals dargestellt, indem im Gruppenfeld \Ausgabeeinstellungen" der Modus \Areas" gewahlt wird und die Topologie-Layer durch Drucken des Buttons \Display" mit den gewahlten Einstellungen dargestellt werden (Abbildung 5.16). Abbildung 5.16: U bersicht der Topologie-Layer Es werden jetzt alle Flurstucke selektiert, die innerhalb der U berutungszone liegen und die U berutungszone schneiden. Der Relationentest mu demnach mit den folgenden Relationen ausgefuhrt werden: A INSIDE B = Flurstucke INSIDE U berutungszone A INTERSECT B = Flurstucke INTERSECT U berutungszone KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 57 Flurstucke INSIDE U berutungszone Begonnen wird mit der Relation A INSIDE B. Dazu wird diese Relation im Dialogfeld \Relationentest" ausgewahlt und der Relationentest gestartet. Alle Flurstucke, die dieser Relation entsprechen, werden gelb dargestellt. Abbildung 5.17 zeigt das Ergebnis der Relation A INSIDE B, also alle Flurstucke die sich innerhalb der U berutungszone benden. Abbildung 5.17: Flurstucke innerhalb des U berutungsbereichs KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 58 Flurstucke INTERSECT U berutungszone Jetzt wird die Relation A INTERSECT B gewahlt und der Relationentest nochmals gestartet. Das Ergebnis dieser Relation zeigt die Abbildung 5.18. Abbildung 5.18: Flurstucke die U berutungsbereich schneiden Durch die Kombination der beiden Relationen INSIDE und INTERSECT sind alle Flurstucke gefunden worden, die innerhalb der U berutungszone liegen und die U berutungszone schneiden (Abbildung 5.19 und Abbildung 5.20). KAPITEL 5. MDL-APPLIKATION RELATIONENTEST Abbildung 5.19: Vom Hochwasser betroene Flurstucke Abbildung 5.20: Vom Hochwasser betroene Flurstucke (Zoom) 59 KAPITEL 5. MDL-APPLIKATION RELATIONENTEST 60 Flurstucke DISJOINT U berutungszone Mochte man alle Flustucke darstellen die vom Hochwasser nicht betroen sind, wahlt man die Relation A DISJOINT B. Das Ergebnis dieser Relation ist in Abbildung 5.21 dargestellt und zeigt alle Flurstucke gelb markiert, die sich auerhalb der U berutungszone benden. Abbildung 5.21: Flurstucke auerhalb des U berutungsbereichs Vergleicht man Abbildung 5.20 mit Abbildung 5.21 erkennt man, da kein Flurstuck in beiden Untersuchungen selektiert wurde, was als Kontrolle der MDL-Applikation \Relationentest" angesehen werden kann. Kapitel 6 Zusammenfassung und Ausblick In dieser Studienarbeit wurden die neuen topologischen MDL-Funktionen des Programms MicroStation GeoGraphics vorgestellt, erklart und in Funktionskategorien eingeteilt. Desweiteren wurde eine eigene MDL-Applikation entwickelt, die es dem Benutzer ermoglicht, topologische Relationen zwischen zwei achenhaften Objekten zu untersuchen. Dabei beschrankte man sich auf jene Relationen, die nur die generelle relative Lage zweier Objekte betrachten und die Rander der Objekte nicht berucksichtigen. In Zukunft ware es sinnvoll, den Ansatz zu verallgemeinern und auch andere Objekttypen in die Untersuchung miteinzubeziehen, wie z.B. linienhafte Objekte. Die geometrischen MDL-Funktionen innerhalb MicroStation GeoGraphics spielen dabei eine groe Rolle, da sie Schnittberechnungen zwischen linienhaften Objekten durchfuhren konnen. Desweiteren ware es interessant und nutzlich, auer den Relationen CONTAINS, DISJOINT, INSIDE und INTERSECT auch die restlichen topologischen Relationen COVERS, COVERED BY, EQUAL und MEET, welche die Rander der Objekte berucksichtigen, in den Relationentest aufzunehmen, um spezielle Objekte aus Topologie-Layern herausltern zu konnen. Die fehlende Moglichkeit der Abspeicherung der Topologie-Layer ist ein Schwachpunkt des Programms MicroStation GeoGraphics, der in Zukunft gelost werden sollte. Dies wurde dem Benutzer vor allem bei groen Datensatzen und mehreren Topologie-Layern viel Zeit und Muhe ersparen, und die Moglichkeit geben, Topologie-Layer fur spatere Analysen zu speichern. 61 Literaturverzeichnis [1] R. Bill / D. Fritsch (1994): Grundlagen der Geo-Informationssysteme Band 1 Hardware, Software und Daten. 2. Auage Wichmann Verlag Heidelberg [2] Institut fur Photogrammetrie (1996): Vorlesungsskript Geoinformationssysteme Universitat Stuttgart (unveroentlicht) [3] Brian W. Kernighan / Dennis M. Ritchie (1990): Programmieren in C. Mit dem C-Reference Manual in deutscher Sprache 2. Ausgabe, ANSI C Carl Hanser Verlag Munchen Wien, Prentice-Hall International Inc. London [4] Dipl.-Inform. R. Berrendorf (1995): Die Programmiersprache C. Ein Nachschlagewerk 7. veranderte Auage, Marz 1995 Regionales Rechenzentrum fur Niedersachsen, Universitat Hannover Zentralinstitut fur angewandte Mathematik Forschungszentrum Julich GmbH [5] Bentley Systems (1995): MicroStation GeoGraphics Benutzerhandbuch, Exton USA [6] Bentley Systems (1995): MicroStation GeoGraphics MDL Programmers Reference, Exton USA [7] Bentley Systems (1995): MicroStation MDL Programmers Guide, Exton USA 62 Anhang A Programmlistings A.1 Komponenten der TOPOLOGY-Struktur A.1.1 CENTROIDTBL-Struktur typedef struct _centroidtbl { int num; /* Anzahl der Tabelleneintr age */ int alloc; /* Anzahl der alloziierten Tabelleneintr age */ int incr; /* Realloziierungsinkrement */ CENTROID *ctrd; /* Vektor von Zentroiden */ void *userData; /* abh angig von der Applikation */ } CENTROIDTBL; A.1.2 CENTROID-Struktur typedef struct _centroid { Dpoint3d xy; /* Koordinaten des Zentroids */ struct _area *area; /* Pointer auf dazugeh orige Fl ache */ ULong mslink; /* Objektartverweis */ int index; /* Index dieses Zentroids in CENTROIDTBL */ ULong pos; /* Position des Zentroids im Design-File */ short *attr; /* Attribut-Buffer */ short atWds; /* Gr oe des Attribut-Buffers */ short file; /* Design-File Nummer des Zentroids */ UShort eType; /* MicroStation-Element-Typ (geometr. Elementtyp) */ TOPOPROPS pr; /* Eigenschaften */ void *userData; /* abh angig von der Applikation */ void *systemData; /* GeoGraphics API scratch area */ } CENTROID; 63 ANHANG A. PROGRAMMLISTINGS 64 A.1.3 BOUNDARYTBL-Struktur typedef struct _boundarytbl { int num; /* Anzahl der Tabelleneintr age */ int alloc; /* Anzahl der alloziierten Tabelleneintr age */ int incr; /* Realloziierungsinkrement */ BOUNDARY *bdry; /* Vektor von Begrenzungslinien */ void *userData; /* abh angig von der Applikation */ } BOUNDARYTBL; A.1.4 BOUNDARY-Struktur typedef struct _boundary { Dpoint3d *pts; /* Vektor von Koordinaten der Begrenzungslinie */ int nPts; /* Anzahl der Koordinaten der Begrenzungslinie */ Dpoint3d range[2]; /* MER der Begrenzungslinie */ double angle; /* Alt! Nicht zu verwenden! F ur L oschfunktionen reserviert */ double length; /* L ange der Begrenzungslinie in UOR */ struct _area *larea; /* Pointer auf dazugeh orige linke Fl ache */ struct _area *rarea; /* Pointer auf dazugeh orige rechte Fl ache */ TOPONODE *tonode; /* Knoten in nodetbl in dem die Begrenzungslinie endet (Endknoten) */ TOPONODE *fromnode; /* Knoten in nodetbl in dem die Begrenzungslinie beginnt (Startknoten) */ double *brks; /* Vektor von Entfernungen zu den Unterbrechungen der Begrenzungslinie */ int nBrks; /* Anzahl der Unterbrechungen der Begrenzungslinie */ int index; /* Index dieser Begrenzungslinie in BOUNDARYTBL */ ULong hdrPos; /* Position der Begrenzungslinie im Design-File (bei komplexem Elementtyp) */ ULong pos; /* Position der Begrenzungslinie im Design-File (bei einfachem Elementtyp) */ short *attr; /* Attribut-Buffer */ short atWds; /* Gr oe des Attribut-Buffers */ short file; /* Design-File Nummer der Begrenzungslinie */ UShort eType; /* MicroStation-Element-Typ (geometr. Elementtyp) */ TOPOPROPS pr; /* Eigenschaften */ void *userData; /* abh angig von der Applikation */ void *systemData; /* GeoGraphics API scratch area */ } BOUNDARY; ANHANG A. PROGRAMMLISTINGS 65 A.1.5 AREATBL-Struktur typedef struct _areatbl { int num; /* Anzahl der Tabelleneintr age */ int alloc; /* Anzahl der alloziierten Tabelleneintr age */ int incr; /* Realloziierungsinkrement */ AREA *area; /* Vektor von Fl achen */ void *userData; /* abh angig von der Applikation */ } AREATBL; A.1.6 AREA-Struktur typedef struct _area { Dpoint3d *pts; int nPts; Dpoint3d range[2]; /* Vektor von Koordinaten der Fl ache */ /* Anzahl der Koordinaten der Fl ache */ /* Koordinaten des umschlieenden achsparallelen Rechtecks (MER) der Fl ache */ double area; /* area in square UORs */ double length; /* length of area's perimeter in UORs */ BOUNDARY **bdry; /* Pointer auf die Begrenzungslinien der Fl ache */ char *bReverse; /* Richtung der Begrenzungslinie */ int nBdry; /* Anzahl der Begrenzungslinienkomponenten */ CENTROID **ctrd; /* Vektor von Zentroid */ int nCtrd; /* Anzahl der Zentroidkomponenten */ struct _area **hole; /* Vektor von L ochern */ int nHole; /* Anzahl der L ocher */ struct _area **toroid; /* Vektor von konvexer Umgebungsfl ache */ int nToroid; /* Anzahl der Toroide (immer 1) */ ULong mslink; /* Objektartverweis */ int index; /* Index dieser Fl ache in AREATBL */ ULong pos; /* Position der Fl ache im Design-File */ short *attr; /* Attribut-Buffer (enth alt Sachdatenverweise) */ short atWds; /* Gr oe des Attribut-Buffers */ short eType; /* MicroStation-Element-Typ (geometr. Elementtyp) */ short file; /* Design-File Nummer der Fl ache */ TOPOPROPS pr; /* Eigenschaften */ void *userData; /* abh angig von der Applikation */ void *systemData; /* GeoGraphics API scratch area */ } AREA; ANHANG A. PROGRAMMLISTINGS 66 A.1.7 NODETBL-Struktur typedef struct _nodetbl { int num; /* Anzahl der Tabelleneintr age */ int alloc; /* Anzahl der alloziierten Tabelleneintr age */ int incr; /* Realloziierungsinkrement */ TOPONODE *node; /* Vektor von Knoten */ void *userData; /* abh angig von der Applikation */ } NODETBL; A.1.8 TOPONODE-Struktur typedef struct _toponode { Dpoint3d xy; struct _boundary **bdry; char *bReverse; int nBdry; int index; ULong pos; short *attr; short atWds; short file; UShort eType; TOPOPROPS pr; void *userData; void *systemData; } TOPONODE; /* /* /* /* /* /* /* /* /* /* /* /* /* Koordinaten des Knotens */ Vektor von Pointern auf Begrenzungslinien */ Vektor der Begrenzungslinie */ Anzahl der Begrenzungslinien im Knoten */ Index dieses Knotens in NODETBL */ Position des Knotens im Design-File */ Attribut-Buffer */ Gr oe des Attribut-Buffers */ Design-File Nummer des Knotens */ MicroStation-Element-Typ (geometr. Elementtyp) */ Eigenschaften */ abh angig von der Applikation */ GeoGraphics API scratch area */ ANHANG A. PROGRAMMLISTINGS 67 A.1.9 TOPOCFG-Struktur typedef struct _topocfg { int loadCtrd; /* Elementtyp des Zentroids das geladen wird */ int loadBdry; /* Elementtyp der Begrenzungslinie die geladen wird */ int loadArea; /* Elementtyp der Fl ache die geladen wird */ int saveAttr; /* falls TRUE, werden die Attribute beim Laden gespeichert */ int noHoles; /* falls TRUE werden die Verkn upfungen zu den L ochern ignoriert */ int filter; /* Elementfilter */ int ctrdEnt; /* Objektart des Zentroid-Elements */ int bdryEnt; /* Objektart des Begrenzungslinien-Elements */ int areaEnt; /* Objektart des Fl achen-Elements */ int type; /* siehe unten (TOPO_TYPE-Definitionen) */ int theme; /* Index der Themen-Tabelle */ char *szName; /* Name des Topologie-Layers */ char *szDesc; /* Beschreibung des Topologie-Layers */ void *userData; /* abh angig von der Applikation */ char *sqlP; /* Speichert SQL-Filter w ahrend der Topologie-Layer geladen wird */ UShort queryEntity; /* Entity-Nr. der Abfrage */ int queryList; /* Abfragelisten f ur SQL-Abfragen verwenden? */ ULong *mslinkListP; /* mslink-Liste falls Abfragelisten gew ahlt */ ULong numMslinks; /* Anzahl der Eintr age in der mslink-Liste */ ULong ctrdFeaType; /* Feature-Typ des ben otigten Zentroids */ ULong bdryFeaType; /* Feature-Typ der ben otigten Begrenzungslinie */ ULong areaFeaType; /* Feature-Typ der ben otigten Fl ache */ } TOPOCFG; TOPO_TYPE-Definitionen: #define TOPO_LOAD_MASTER 0x1 /* Nur Elemente vom Master-File werden geladen */ #define TOPO_LOAD_ALL 0x2 /* Elemente aus allen Files werden geladen */ #define TOPO_NO_COMPONENTS 0x4 /* Komplexe Linienz uge werden als eine Begrenzungslinie geladen */ #define TOPO_LOAD_AREAASBDRY 0x8 /* Fl achen werden als Begrenzungslinie geladen */ ANHANG A. PROGRAMMLISTINGS 68 A.1.10 TOPOPROPS-Struktur typedef struct _topoprops { unsigned mod:1; /* Wert wird gesetzt, wenn Begrenzungslinie ge andert wird */ unsigned used:1; /* Wert wird gesetzt, wenn Begrenzungslinie bearbeitet wird */ unsigned del:1; /* Wert wird gesetzt, wenn Element gel oscht werden soll */ unsigned copy:1; /* Wert wird gesetzt, wenn Original kopiert wird */ unsigned new:1; /* Wert wird gesetzt, wenn neue Begrenzungslinie */ unsigned assoc:1; /* Wert wird gesetzt, wenn Zusammenhang besteht */ unsigned mult:1; /* Wert wird gesetzt, wenn mehrere Zusammenh ange bestehen */ unsigned dup:1; /* Wert wird gesetzt, wenn doppelte Begrenzungslinie */ unsigned seg:1; /* Wert wird gesetzt, wenn Begrenzungslinie in Segmente unterteilt */ unsigned hasDup:1; /* Wert wird gesetzt, wenn Begrenzungslinie ein Duplikat besitzt */ unsigned trav1:1; /* Wert wird gesetzt, wenn Begrenzungslinie vorw arts durchlaufen wird */ unsigned trav2:1; /* Wert wird gesetzt, wenn Begrenzungslinie r uckw arts durchlaufen wird */ unsigned modBeg:1; /* Wert wird gesetzt, wenn erster Endpunt ge andert wurde */ unsigned modEnd:1; /* Wert wird gesetzt, wenn letzter Endpunt ge andert wurde */ unsigned user1:1; /* abh angig von der Applikation */ unsigned user2:1; /* abh angig von der Applikation */ unsigned where:2; /* 0=nicht definiert, 1=auerhalb, 2= uberlappend, 3=innerhalb */ } TOPOPROPS; ANHANG A. PROGRAMMLISTINGS 69 A.2 MicroStation GeoGraphics Feature Control Block (FCB) A.2.1 GTKFCB-Struktur typedef struct _gtkfcb { long size; DSET *dsStack; CATTBL *cattbl; MAPTBL *maptbl; Point2d *polytbl; FEATBL *featbl; CMDTBL *cmdtbl; THETBL *thetbl; THMTBL *thmtbl; DIRStuff *dir; SQLStuff *sqlStuff; THEInfo *theInfo; THEMEInfo *themeInfo; THMInfo *thmInfo; THEStats *theStats; GGLOCKS *locks; STRINGLISTS *sl; TOPOLOGY *tlayer; MslIdxEntry *mslIdxArray; char **tasks; UMask *mselect; UMask *mcand; int (*hotFunc)(); UGLISTBOX lb; ARCHIVE archive; GTCMDS cmd; UGPUB pub; UGA uga; MSLINKLIST ml; VIEWTBL vw[MAXVW]; GRLINKSESSION grLinkSess; ULong faOffset; ULong mnCatMsl; ULong mxCatMsl; ULong mnMapMsl; ULong mxMapMsl; ULong mnFeaMsl; ULong mxFeaMsl; long fPos; /* /* /* /* /* /* /* /* /* Gr oe des FCB in Bytes */ Menge der Datens atze */ Pointer auf Kategorien-Tabelle */ Pointer auf Karten-Tabelle */ Pointer auf Polygon-Tabelle */ Pointer auf Feature-Tabelle */ Pointer auf Kommando-Tabelle */ Pointer auf die Themen-Tabelle */ Pointer auf die Eintr age in der Themen-Tabelle */ /* Information uber aktives Projekt */ /* /* /* /* /* /* /* /* Pointer auf theStats */ GeoGraphics-Sperren */ Cache f ur Text-Liste */ Aktiver Topologie-Layer */ mslink des Index-Feldes */ Liste der registrierten Tasks */ array of indices to selected maps */ array of indices to candidate maps */ /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* Archiv-Parameter */ Standard Command Buffer */ GeoGraphics-Srukturen */ administrator parameters */ mslink-Liste */ Feld von view-Parametern */ xref structures mslinks to elements */ Offset of element to attach feature to */ Kleinste Kategorie.mslink-Nr. */ H ochste Kategorie.mslink-Nr. */ Kleinste Karten.mslink-Nr. */ H ochste Karten.mslink-Nr. */ Kleinste Feature.mslink-Nr. */ H ochste Feature.mslink-Nr. */ rel offset & file of last element */ ANHANG A. PROGRAMMLISTINGS long fNo; long cmdClass; long outputErr; long masterTag; LinkProps linkProps; VIEWARGS varg; DSET ds; FENSTACK fences; MSCAT mscat; GADGET gadget; ULong *grpMbrs; int faIndex; int hotArg1; int hotArg2; int nGrpMbrs; int aGrpMbrs; int isGrpValid; int database; int dsInc; int dssSize; int dssAlloc; int ncat; int nmap; int nfea; int ncmd; int njoin; int npoly; int nthe; int nthm; int nTasks; int nTlayer; int ustnBlock; int ustnAllow; int mapxref[MAX_REFS+1]; int currFeature; int currCommand; int currTheme; int vicinityVno; int vicinityFno; int incrementalUpdate; int feaLBHidden; short mapLev[8][4]; short vicLev[8][4]; char hotTable[36]; char hotColumn[36]; /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* /* 70 located inside a GG primitive */ Klasse des letzten Kommandos */ error level used by gtOutput routines */ assoc tag of master element */ default linkage properties */ arguments to gtView_eachElement */ the active dataset REMOVE ????? */ gespeicherte Z aune */ mscatalog Speicher */ values for gadgets */ assoc tags of members of active group */ mslink of feature to attach */ Second argument to hotFunc */ Third argument to hotFunc */ number of members in grpMbrs */ allocated entries in grpMbrs */ falls TRUE then group is certified valid */ True or False falls database connected */ increment of dataset member list */ number of datasets on the dataset stack */ space available on the dataset stack */ Anzahl der Kategorien in cattbl */ Anzahl der Karten in maptbl */ Anzahl der Features in featbl */ Anzahl der Kommandos in cmdtbl */ Anzahl der Verkn upfungen in jointbl */ Anzahl der Eintr age in polytbl */ Anzahl der Eintr age in thetbl */ Anzahl der Eintr age in thmtbl */ Anzahl der registrierten Aufgaben */ Anzahl der Topologie-Layer in fcb->tlayer */ Block ustn commands by default */ Turn block on after resetAllow commands */ Karten-Indices aller ge offneten Files */ Index-Nr. des aktiven Features */ Index-Nr. des aktiven Kommandos */ Index-Nr. des aktiven Themas */ Anzeige-Nr. der Ubersichtsansicht */ ReferenzFile-Nr. der Ubersichtskarte */ falls TRUE dsp filter to update deltas only */ falls TRUE the list box is Hidden */ mdlView routine paramter for map files, views 1:7/all lvls ON */ /* mdlView routine paramter for vicinity file, view 8/all lvls ON */ /* Target to update by TList hooks */ /* Target to update by CList hooks */ ANHANG A. PROGRAMMLISTINGS char taskId[32]; char version[32]; char szVicinityMap[128]; } GTKFCB; /* Task-ID von GeoGraphics */ /* GeoGraphics-Version */ /* Name der Ubersichtskarte */ 71 ANHANG A. PROGRAMMLISTINGS A.3 MDL-Applikation Relationentest Programmlisting fehlt! Bei Interesse bitte an Institut fur Photogrammetrie wenden! 72 ANHANG A. PROGRAMMLISTINGS 73 A.4 Programmdiskette Auf der beigelegten Programmdiskette benden sich folgende Verzeichnisse und Dateien: Verzeichnis DgnFiles: Flurstuecke.dgn WasserZone.dgn Verzeichnis MDLApps: Relation.ma Topo eng.ma Verzeichnis Projekt: MicroStation GeoGraphics Projekt \StudArb" Verzeichnis Relation: Relation.h Relation.mc Relation.mke Relation.r Relationcmd.r Relationmsg.r Relationrsc.mki Relationtxt.h Relationtyp.mt Make.bat Make.opt