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

Documentos relacionados