1:n Beziehung und Kartographie

Hallo Forum,

ich habe eine Maßnahmendatenbank in Access, die mit einem Polygonthema in AV 3.2 oder 8.3 verknüpft werden soll.

Ein Polygon (1) kann dabei mehrere (n) Maßnahmen haben.

Wie komme ich nun -halbwegs operabel- zu einer Maßnahmenkarte?

Mit Join und Relate kommt man nicht weiter wie es scheint.

Es bliebe das manuelle Attributieren der unterschiedlichen Maßnahmentypen (evetuell >100) in verschiedenen Spalten (bei 10000 Datensätzen keine Freude).

Hat jemand von Euch einen Tip?

Grüße von Jens
Hallo Jens,
das gleiche Problem habe ich auch häufig. Hier zeigt sich halt, dass ArcView3.X keine richtige interne Datenbank hat, 8.3 kenne ich nicht gut genug. Eine einfache Lösung kenne ich nicht. Stattdessen habe ich mir verschiedene Werkzeuge programmiert, die ich dann jeweils an die spezielle Datenbank anpasse. Bei Interesse kann ich Dir meine Lösung vorstellen.

Viele Grüße,
Wolfgang
Guten Morgen Wolfgang,

danke für deine Nachricht. Natürlich würde mich das interessieren.
Vielleicht könntest du hier im Forum in wenigen Stichworten kurz skizzieren wie dein Lösungssansatz aussieht. Ich vermute das Problem haben andere auch.

Gruß von Jens
Hallo Jens,

dein Problem klingt sehr interessant - obgleich mir noch nicht ganz klar wo der Knackpunkt liegt. Kannst Du dein Problem noch ein bisschen weiter vertiefen?

MfG
Andreas
Ich versuche etwas präziser zu formulieren:
Die Geometrien werden in AV 3.2 als Shape gespeichert. Es wird lediglich eine eindeutige ID in der Attributtabelle vergeben. Sachdaten werden komplett in Access gespeichert. Es geht um die Verwaltung von Maßnahmen. Ein Polygon kann dabei mehrere Maßnahmen haben (1:n). Ein Polygon entspricht damit mehreren Datensätzen in der Access Datenbank.
Es wäre nun wünschenswert eine Maßnahmenkarte zu erstellen. Mittels SQL Connect kann eine ACCESS Tabelle angesprochen werden. Die Verbindung zwischen den Polygonen und Sachdaten könnte nun über Join and relate dargestellt werden. Das Problem besteht nun einerseits darin, dass beim Join keine 1:n Beziehung modelliert werden kann. Ein Relate taugt auch nichts, da ich -soweit mir bekannt- keine Möglichlichkeit habe danach ein Kartographie herzustellen.

Die Frage wäre nun, ob es nicht doch einen Weg gibt (siehe Mail Wolfgang) oder eine Hilfskonstruktion zielführend wäre. Z.B. Jede unterschiedliche Maßnahme in eine eigene Tabellenspalte schreiben lassen (geht das?) und dann jedes Shape so oft unterschiedlich darstellen, wie es Maßnahmen gibt?

Bin für alle Tips sehr dankbar.
Gruß von Jens
Hallo Jens,

sieht Deine Sachdatentabelle so aus:

ID; Maßnahme1; Maßnahme2; Maßnahme3; ...
1; TextA; TextB; TextC; ...

?

Willst du dann das eine Polygon, dass gleichzeitig 3 Maßnahmen hat 3mal übereinander darstellen mit kombinierter Symbolik? Oder soll das besagte Polygon dann 3 mal physich aufeinanderliegen?

Gruß Andreas
Hallo Andreas,

>sieht Deine Sachdatentabelle so aus:
>ID; Maßnahme1; Maßnahme2; >Maßnahme3; ...
>1; TextA; TextB; TextC; ...

Nein, die Sachdaten liegen in Access in normalisierten Tabellen vor. Das Shape hat lediglich eine Polygon ID.

Bisher vorgesehen in Access:
Tabelle MPoly (für Verknüpfung von Polygon und Maßnahme)
Spalten: Poly_ID (Polygon ID) und M_ID (Maßnahmennummer).

Die Tabelle Massnahme hat widerum eine Beziehung zum Maßnahmentyp.

>Willst du dann das eine Polygon, >dass gleichzeitig 3 Maßnahmen hat >3mal übereinander darstellen mit >kombinierter Symbolik? Oder soll das >besagte Polygon dann 3 mal physich >aufeinanderliegen?

Ich bin für alle Lösungen offen ;-)
Gruß Jens
Hallo Jens,

Das Problem, dass die Attribut-Tabelle von ArcView keine komplexeren Datenbankstrukturen abbilden kann, hat auch bei mir dazu geführt, diese in einer externen Sachdatenbank abzulegen. Zum Erstellen thematischer Karten, was in ArcView nur in Abhängigkeit von Einträgen einer Spalte der Attribut-Tabelle geht, muss die Information dann aber wieder in AV zur Verfügung stehen. Dieses Problem habe ich bei den von mir bisher realisierten Sachdatenbankanbindungen folgendermaßen gelöst:
Der Benutzer bekommt in AV zunächst eine Maske geliefert, mit deren Hilfe er entscheiden kann, welche Spalte(n) aus der externen Sachdatenbank nun in AV erscheinen sollen. In der Maske kann eventuelle ebenfalls gewählt werden, auf welche Werte die Information eingeschränkt werden soll. Nach dem Bestätigen der Auswahl durch den Benutzer wird der Wunsch des Benutzers in einen SQL-String umgewandelt und per ODBC an die Datenbank übergeben. Als Ergebnis wird eine dbase-Tabelle an ArcView übergeben, die programmiert in das Projekt eingeladen wird. Diese Tabelle wird dann über die gemeinsame Schlüsselspalte an die gewünschte Attribut-Tabelle angejoint.
In Jens` Beispiel besäße die Attribut-Tabelle vorher die Spalten Shape und ID, wobei ID mit nur einmal vergebenen Werten versehen ist (z. B. 1, 2, 3, .....) Die Ergebnis-Tabelle aus der Datenbank besitzt im einfachsten Fall die Spalten ID (hier wird die ID aus AV wiederholt) und einen weitere Spalte Massnahme. Da einer Fläche und damit einer ID mehrere Maßnahmen zugeordnet werden können, gibt es mehrere Zeilen mit der gleichen ID, aber sinnvollerweise verschiedenen Maßnahmen.
Bei meiner Programmierung wird nun die Datenbank-Tabellen an die Attribut-Tabelle angejoint. Dabei wird nur eine Zeile der Datenbank-Tabelle angejoint, auch wenn einer Fläche mehrere Maßnahmen zugeordnet werden. Das ist der Punkt, an dem Jens` Problem beginnt. Meine Programmierung ermittelt nun, ob dieser Fall zutrifft und was die höchste Zahl von Maßnahmen zu einer Geometrie ist. Diese Zahl wird dem Benutzer mitgeteilt. Dann wird programmiert ermittelt, welche der Zeilen der Datenbank-Tabelle bereits angejoint wurden. (Das scheint leider Zufall zu sein, zumindest habe ich kein System gefunden und zwei Versuche ergeben zwei verschiedene Ergebnisse. Wenn mir da jemand helfen könnte?!) Es wird nun eine Kopie der Datenbank-Tabelle erzeugt, aus der genau diese Zeilen herausgelöscht werden. Dies so verkleinerte Tabelle wird erneut an die Attribut-Tabelle angejoint. Dieser Prozeß wird wiederholt bis die Tabelle verbraucht ist.
Es ist nun eine Attribut-Tabelle entstanden, die die Spalten Shape, ID, Massnahme, Massnahme1, Massnahme2... enthält. Außerdem werden automatisch unechte Kopien (also nur im View, nicht auf der Festplatte!) des Themas erzeugt, die ebenfalls diese Spalten enthalten. Jetzt besteht die Möglichkeit im untersten Thema eine Maßnahmen-Legende in Abhängigkeit von der ersten Maßnahmen-Spalte und in den anderen in Abhängigkeit von den anderen Spalten eine Legende anzuwenden. Wenn es sich um eine transparente, überlagerungsfähige Legende handelt, ist nun zu erkennen, welche Maßnahmen wo und in welchen Kombinationen geplant sind.

Das ist, soweit das ohne ProgrammCode möglich ist, mein Vorgehen bei der Anbindung von externen Datenbanken zur Erstellung thematischer Karten. Ein Verfahren, das ohne Programmierung auskommt, kenne ich nicht. Wenn Interesse besteht, kann ich mal schauen, ob ich meine Sachdatenanbindung mal so aufbereite, dass jemand anders etwas damit anfangen und an die eigene Datenbank anpassen kann. Dazu ist aber auf jeden Fall Bastelarbeit notwendig (meinerseits und von Seiten des Anpassers). Gerne wüßte ich aber auch, wie andere mit dem Problem umgegangen sind. Gibt es andere elegantere Lösungen? Geht das mit ArcGis 8.x bzw. 9x besser? (Die meisten scheinen die Datenbank in 8x bzw. 9x nicht wirklich zu nutzen?)



Viele Grüße,
Wolfgang
Hallo Wolfgang,

vielen Dank für die sehr ausführliche Antwort. Für die Umsetzung dieses komplexen Vorgangs mit Avenue ist dir meine uneingeschränkte Bewunderung sicher!
Wenn du Zeit finden würdest deine Lösung aufzubereiten wäre ich natürlich sehr interessiert.

Hat schon mal jemand die ArcScripts durchforstet? Gibt es noch weitere Lösungsansätze?


Zu AV 8.X
Sobald die Funktionen in der Personal Geodatabase "spannend" werden, ist der Kauf von ArcEditor bzw. ArcInfo nötig. Beispielsweise kann ich in AV8.3 keine Relationship-Classes definieren (Topologie etc. sowieso nicht). Eine komplexe Modellierung in AV8.3 ist also auch nicht möglich. Im Prinzip weiss ich nicht so genau was die Personal GB in AV gegenüber dem Shape bringen soll. Das ist aber ein anderes Thema, das hier im Forum mal diskutiert werden könnte.

Gruß von Jens
Hallo,

mich interessiert jetzt aber mal - aus reiner Neugier -, wie das ganze kartographisch enden soll. Wenn AV mehr als zwei Signaturen / Polygone übereinander legt wird es doch ganz schön unübersichtlich, oder?

Abhängig davon, wie viele Maßnahmen-Kombinationen es gibt: Wäre es vielleicht auch eine Lösung bezüglich der Darstellung die Kombinationen gesondert auszuweisen und mit völlig eigenen Symbolen zu belegen?

Jörg
Hallo Jörg,
Ja, ein im Prinzip umständlicher aber gangbarer Weg wäre es wohl in Access für jeden Maßnahmentyp ein eigene Abfrage zu generieren und diese jeweils an n-Kopien des Shapes zu joinen. Meinst du das?
Jens
ich denke nein :-)

Ich betrachte das Problem gerade losgelöst von der technischen Seite, ich habe überlegt, wie man vermeiden kann, dass mehrere Shapes übereinander gelegt werden, was ja dazu führen kann, dass die Karte unlesbar ist.
Wenn es nur eine überschaubare Anzahl an Maßnahmen-Kombinationen gibt, könnten dies Kombinationen als neue Klasse eingeführt werden, so dass ein Thema/Shape mit einer Spalte für die kartogr. Darstellung genügt. Die Attribute-Tabelle würde dann so aussehen (die 1. Spalte 'Shape' lasse ich weg):

Massnahme

A
A
B
c
A
AB
CB
...

das geht natürlich nur, wenn nicht viele Kombinationen vorkommen.

Jörg
Wenn ich jetzt alles gehörte mal zusammenwerfe v.a. auch den Beitrag von Jörg. Dann kommt mir der Gedanke, dass dies mit einer Kreuztabellenabfrage in Access bewältigt werden könnte. Die Abfrage wird nach Polgon_ID und Maßnahmentypen gekreuzt. In die Datenfelder könnten dann ja/nein - Felder oder sinnvolle Aggregierungen geschrieben werden. Die Tabelle kann an die ID´s des Shape gejoint werden. Im Prinzip erhält man den Stand, den Jörg in seiner letzten Antwort beschrieben hat. Wie man daraus eine sinnvolle Kartographie entwickelt bleibt noch eine andere Frage.

Jens
Wie wäre es mit einer automatischen Labelgenerierun im View?

<< 0. >>

alle Labels löschen

<< 1. >>

2 foreach-Schleifen um für jedes Polygon die entsprechenden Maßnahmen-Nr. herauszufiltern

<< 2. >>

Maßnahmennummer in der foreach-Schleife zusammenstellen (ein String, entsprechend formatiert, z.B. mit Zeilenumbruch nach jeder Maßnahmennummer o.a)

<< 3. >>

für entsprechendes Polygon diesen Text als Label setzen

<< im Layout >>
Maßnahmenliste z.B. als Tebelle einbinden

Grüße Heinz