GGMan   -  Testen und Manipulieren von Geograf-Daten

Skript   Factories   Filter   Grabber   Funktionen   Macros   Utils   Files   GUI   Typen   Elemente  

Factories

Allgemeines
Datenmanagement
Typen der Factories
Parameter
Variablen
Anweisungen
Prozess
Factories allgemein
verfügbare Factories

Allgemeines

Die eigentliche Arbeit erledigen unter GGMan die Factories. Jede einzelne Factory ist für ein bestimmtes Aufgabengebiet konzipiert. Das Spektum reicht von sehr allgemeinen Augaben, wie das Lesen oder Erzeugen von Geografelementen bishin zu sehr spezialisierten Lösungen, wie das Formatieren von ALK-Objektnamen.

Factories werden im Skript vereinbart.


new Factory ReaderFactory
   .
   .
end

Neue Factories werden mit den Schlüsselwörten new Factory eingeleitet und mit end abgeschlossen. Innerhalb des Factory-Körpers (hier mit .. gekennzeichnet) werden Parameter übergeben und die Ausführung von Funktionen vereinbart.

Die Factories werden wie im Skript angegeben der Reihenfolge nach abgearbeitet. GGMan zeigt bei der Programmausführung die aktuelle Anzahl der abgearbeiteten Factories an und protokolliert durch die Factories erzeugte Fehler und Warnungen.

Datenmanagement

Daten

Je nach Arbeitsaufgabe der einzelnen Factory werden Geografdaten gelesen und/oder neu erzeugt. Dies geschieht in einer Datenbank, hier als Data bezeichnet. GGMan legt bein Start eine Datenbank an, sie enthält nach dem Programmstart die Gegraf-Daten aus der Eingabedatei. Es können aber auch neue Datenbanken angelegt werden:

// neue Datenbank wird angelegt
$saveData = new Data GGData
   name = "Sicherungsdaten"
end
Nach dem Anlegen einer Datenbank ist diese zunächst leer. Sie kann mit Hilfe von erzeugenden Factories (z.B.: Creator) gefüllt werden.

Pipline

Für den Datentransport in die Factories sind Piplines zuständig. Eine Pipline hält zwei Datenbanken (Data), eine zum lesenden und eine zum schreibenden Zugriff. Angelegt wird eine Pipline wie folgt:

// neuer Datenstrom wird unter dem Namen $pip1 vereinbart
$pip1 = new Pipline GeografPipline($in, $out)
   name = "SicherungsPipline"
end

Der obigen Pipline wurden zwei Datenbanken übergegen, zum Lesen ($in) und zum Schreiben ($out). Die Factory ElementCopier mit dieser Pipline angelegt, würde GeografElemente aus der $in-Datenbank in die zweite $out kopieren. Eine Pipline kann auch mit der gleichen Datenbank vereinbart werden:

// neuer Datenstrom wird unter dem Namen $pip2 vereinbart
$pip1 = new Pipline GeografPipline($data, $data)
   name = "SicherungsPipline"
end

Lesender und Schreibender Zugriff durch eine Factory geschieht bei dieser Pipline auf der selbigen Datenbank $data.

GGMan legt beim Programmstart eine solche Pipline an. Ein- und Ausgabedatenbank ist die, die aus der Quelldatei gelesen wurde.

Beim Anlegen einer Factory kann eine Pipline übergeben werden:

// neue Datenbank wird angelegt
$saveData = new Data GGData
   name = "Sicherungsdaten"
end

// neuer Datenstrom wird unter dem Namen $out vereinbart
//Das * zeigt die StandardDaten aus der Eingabedatei an
$savePip = new Pipline GeografPipline(*, $saveData)
   name = "Pipline zur Sicherung von Daten"
end

// der Datenstrom $savePip wird der Factory angezeigt
new Factory ElementCopier($savePip)
   .
   .
end

// die kopierten Daten werden in eine Out-Datei geschrieben
new Writer GeografOutWriter("Sicherung.out", $saveData)
   name = "SicherungsWriter"
   spec = "Schreibt die gesicherten Elemente in die Datei 'Sicherung.out'"
end

Mir den obigen Vereinbarungen kopiert der ElementCopier Daten aus der Eingabedatei in eine zweite Datenbank. Diese kann später mit einem GeografOutWriter in eine externe Out-Datei geschrieben werden.

Wenn einer Factory keine besondere Pipline angezeigt wird, benutzt GGMan die zum Progammstart angelegte.

Typen der Factories

GGMan kennt einige Grundtypen von Factories. Die Factories zeigen durch ihren Typ dem Programmsystem ihre grundlegende Arbeitsaufgabe an.

Jede Factory stammt von einem oder von mehreren Grundtypen ab.

Parameter der Factories

Zur Steuerung der Ausführung können den Factories Parameter übergeben werden. Diese Parameter werden innerhalb des Factory-Körpers vereinbart.

new Factory ReaderFactory
   // Parameterübergabe mit 'Name = Wert'
   spec = "eine lesende Factory"
   .
end

Die Parameterübergabe geschieht über dem Parameternamen und einem Wert, beide getrennt durch den Wertzuweisungsoperator (=). Die Parameternamen sind von der jeweiligen Factory fest vorgegeben, die möglichen Parameternamen entnehmen Sie bitte der Dokumentation zu den einzelnen Factories.

Die Parameter erwarten als Wert einen der Typen. Die Typen können wie in obigen Beispiel fest vorgegeben werden, sie können aber auch aus einer Skriptvariable übergeben werden.

// Vereinbarung einer Skripvariablen mir Wertübergabe
$spezifikation = "eine lesende Factory"

new Factory ReaderFactory
   // Parameterübergabe mit 'Name = Wert aus $Variable'
   spec = $spezifikation
   .
end

So kann auf einfache Art und Weise gewährleistet werden, dass mehrere Factories gleiche Parameter benutzen.

Die Werte können aber auch zur Laufzeit durch Funktionen erzeugt werden.

new Factory ReaderFactory
   // Parameterübergabe mit 'Name = Wert aus @Function'
   spec = @Concat("eine ", "lesende ", "Factory")
   .
end

Das macht besonders Sinn, wenn ein Parameter abhängig von zu lesenden Geografelementen eingestellt werden soll.

/*
 * Es wird eine Map erzeugt.
 * Diese ordnet einer Geograf-Art eine gewünschte Rechteckbreite zu
 */
$dist_tab = new Map LongMap
   entry = 700, 1.0
   entry = 701, 2.0
end

/*
 * diese Factory erzeugt aus einer Linie ein Rechteck
 */
new Factory LineToRectanglePolygonFactory
   // Die gewünschte Breite wird aus der vorher vereinbarten Map $dist_tab geholt.
   dist = @Map($dist_tab, @Get(&in, art))
end

Die Function @Get holt aus der gelesenen Geograf-Linie die Artnummer. Diese Artnummer wird der Function @Map übergeben, die aus der oben vereinbarten Map die der Art zugeordnete Breite holt. Die so erzeugte Breite wird dem Parameter dist übergeben. Die Factory erzeugt damit aus einer Linie ein Rechteck. Aus einer Linie mit der Art 700 wird also ein 1.0m breites Rechteck, aus der Art 701 folgt ein 2.0m breites.

Einige Parameter verlangen nicht nur einfache Werte, sondern komplexe Objekte. So benutzen die ReaderFactories den Parameter filter, um die von der Factory zu bearbeitenden Geografelemente einzuschränken. Die komplexen Objekte können bei der Parameterübergabe definiert werden.

new Factory ReaderFactory
   // Parameterübergabe mit 'Name = Wert'
   spec = "eine lesende Factory"
   // Parameterübergabe mit 'Name = Wert' (hier komplexes Objekt)
   filter = new Filter ArtFilter
      list = 701, 801
   end
   .
end

In dem obigen Beispiel wird der ReaderFactory mit dem Parameter filter ein Filter übergeben, der nur Geografelemente mit den Arten 701 oder 801 entgegennimmt. Der Filter wird hier bei der Parameterübergabe definiert.

Wenn komplexe Objekte mehrfach benutzt werden sollen, können diese auch außerhalb einer Factory definiert werden.

/*
 * Es wird ein Filter erzeugt und der Skriptvariablen f zugewiesen.
 */
$f = new Filter ArtFilter
   list = 701, 801
end

/*
 * diese Factory wertet alle Arten 701 und 801 aus
 */
new Factory ReaderFactory
   // Parameterübergabe mit 'Name = Skriptvariable' (hier komplexes Objekt)
   filter = $f
end

Hier wird ein Filter erzeugt und der Skriptvariablen $f zugewiesen. Dieser Filter kann dann im mehreren Factories verwendet werden.

Alle Parameter werden in einer Factory als Factorievariable vorgehalten. Sie können zur Laufzeit mit Hilfe von Funktionen abgefragt und auch verändert werden.

/*
 * diese Factory erzeugt aus einer Linie ein Rechteck
 */
new Factory LineToRectanglePolygonFactory
   // Die Rechteckbreite wird vereinbart.
   dist = 1.0
   // Für jedes erzeugte Rechteck wird eine Ausgabe in der Logdatei erzeugt.
   function = @Log("Ein Rechteck mit der Breite &dist erzeugt")
end

Obige Factory erzeugt aus Einzellinien neue Rechtecke mit einer Breite von 1.0m. Für jedes erzeugte Rechteck wird ein Text in die Logdatei geschrieben. Dabei wird die benutzte Breite des Parameters dist dokumentiert. In der Logdatei würde folgender Text erscheinen:

   Ein Rechteck mit der Breite 1.0 erzeugt

Variablen der Factories

Je nach Typ lesen bzw. erzeugen Factories neue Geografelemente. Diese Geografelemente, aber auch Parameter und andere Zwischenwerte, speichern die Factories in Factorievariablen zwischen. Auf diese Elemente bzw. Werte kann mit Hilfe von Funktionen zugegriffen werden.

So ist es oft wichtig, Attribute von einem gelesenen Geografelement abzufragen. Dazu benutzen wir eine ReaderFactory. Sie liest, soweit nicht durch einen Filter eingeschränkt, alle Geografelemente. Jedes gelesene Geografelement speichert die ReaderFactory in der Factorievariablen &in zwischen und stellt es damit zur weiteren Auswertung zur Verfügung.

/*
 * diese Factory wertet alle Arten 701 und 801 aus
 */
new Factory ReaderFactory
   // ein Filter
   filter = new Filter ArtFilter
      list = 701, 801
   end
   // eine Auswertung des gelesenen Elements
   function = @Log( @Concat("Eine Element mit der Art " , @Get(&in, art) , " gefunden." ) )
end

Diese Factory liest aufgrund des Filters alle Geografelemente mit der Art 701 oder 801. Die jeweils vorgefundene Art wird mit der Funktion @Log in der Logdatei dokumentiert. Die Meldung wird dabei mit der Funktion @Concat aus drei Teilen zusammengesetzt. Der erste Teil besteht aus der Textkonstanten "Eine Element mit der Art ". Der zweite Teil wird wiederum mit einer Funktion, hier der Funktion @Get erzeugt. Der dritte und letzte Teil ist wieder eine Textkonstante: " gefunden.".

Die Funktion @Get holt aus dem gelesenen Geografelement das Attribut art, so dass ein Text mit der Geografart zusammengebaut wird:

   Eine Element mit der Art 701 gefunden.

Wie in dem Beispiel ersichtlich, beginnen Factorievariablen immer mit dem Zeichen &.

Anweisungen an Factories

Wie schon aus den bisherigen Beispielen ersichtlich, können mit Hilfe von Funktionen Eingabe-, Zwischenwerte und Ergebnisse abgefragt bzw. beeinflusst werden. Funktionen werden innerhalb des Factorykörpers vereinbart.

new Factory ReaderFactory
   .
   function = @Log("Ein Text für das LogFile")
end

Die Vereinbarung geschieht über die drei Schlüsselwörter initiate, function und finally.

Funktionen, die mit dem Schlüsselwort initiate vereinbart werden, führt eine Factory einmalig beim Starten, also vor dem Auswerteprozess aus. An dieser Stelle werden die Funktionen in der Regel bestimmte Parameter bzw. Variablen setzten, die dann über dem gesamten Auswerteprozess benutzt werden.

Mit dem Schlüsselwort function vereinbarte Funktionen werden nach jeder Einzelauswertung, in der Regel also mehrfach ausgeführt. Eine ReaderFactory führt diese Funktionen z.B. nach jedem gelesenen Geografelement aus. Der Zeitpunkt der Funktionsaufrufe ist abhängig von der speziellen Aufgabe jeder Funktion, die Dokumentation gibt hierüber näher Auskunft.

Die mit finally vereinbarten Funktionen werden beim Beenden der Factory gestartet. In der Regel werden hier Statistiken zum Auswerteprozess zusammengestellt und in die LogDatei geschrieben.

new Factory ReaderFactory
   // Zähler initialisieren
   initiate = @Store(&countElem, 0)
   // Zähler aufaddieren
   function = @Store( &countElem, @L( @Add(&countErrors, 1) ) )
   // Zähler ausgeben
   finally  = @Log("&countElem Elemente gelesen")
end

Jedes Schlüsselwort kann innerhalb einer Factory beliebig oft verwendet werden. Zu jedem Schlüsselwort werden die Funktionen nach der im Skript vereinbarten Reihenfolge gestartet.

Prozess

Die Factories werden in der Reihenfolge des Skripts erzeugt. Die Parameter werden bei der Auswertung des Skriptes gesetzt, eventuell auftretende Fehler werden sofort gemeldet, die Auswertung wird erst nach fehlerfreier Erzeugung aller Factories gestartet.

Den Ablauf einer Factory kann man sich wie folgt vorstellen:
Als erstes wird die Initialisierung durchgeführt. Es werden alle Funktionen gestartet, die mit initiate vereinbart wurden. Danach beginnt der eigentliche Verarbeitungsprozess. Die Factory bekommt, soweit vom Typ Reader, nacheinander alle Elemente geliefert, die nicht durch den gesetzten Filter abgelehnt werden. Nach der Factory eigenen Auswertung werden die Variablen gesetzt um daraufhin die mit function vereinbarten Funktionen zu starten. Dieser Prozess wird solange ausgeführt, wie Elemente geliefert werden.

Zum Abschluss werden die mit finally vereinbarten Funktionen gestartet, in der Regel werden diese Meldungen in das LogFile absetzen. Danach wird die Factory beendet, es kann die nächste Factory angestartet werden.

Factories allgemein

Alle Factories

Einige Parameter und Variablen sind in allen Factories verfügbar. Diese werden an dieser Stelle kurz erläutert.

StringValue name: Der Factory kann ein Namen vergeben werden. Dieser Name wird in der Logdatei dokumentiert, er soll grob die Funktionalität anzeigen.

StringValue spec: Dieser Parameter wird ebenfalls in der Logdatei dokumentiert. Hier sollte die Aufgabe der Factory kurz erläutert werden, um den Anwender die Interpretation von Auswerteergebnissen zu erleichtern.

ObjectValue filter: Es wird ein ObjektValue vom Typ Filter erwartet. Mit dem Filter kann eine Auswahl der zu lesenden Geografelemente getroffen werden. Die Ausführung der Factory wird nur gestartet, wenn ein Geografelement den Filter durchläuft.
Viele Factories filtern die zu lesenden Elemente schon selbst. Ein LineLengthCalculator (berechnet die Länge von Linien) nimmt z.B. nur Linien entgegen. Eine dementsprechende Filterung ist also nicht notwendig.

ObjectValue grabber: Es wird ein ObjektValue vom Typ Grabber erwartet. Ein Grabber ermöglicht einen Zugriff auf abhängige Elemente eines Geografelements. So liest z.B. der LinePointGrabber aus dem Eingabestrom die Linien und gibt den Anfangs- und Endpunkt der Linie an die Factory weiter. Der Filter der Factory wird erst nach dem Grabberaufruf ausgewertet. Es werden also die vom Grabber gelieferten Geografelemente gefiltert.

ObjectValue &[filter].in: Das Eingabeelement des Filters. Ist ein Filter gesetzt, ermöglicht dieser den Zugriff auf das gelesene Element. Für [filter] muss der Klassenname des Filters angegeben werden, z.B. bei der Verwendung eines ArtFilters über &ArtFilter.in . Soweit mit dem Filterparameter 'name' eine individueller Namenangabe erfolgte, erfolgt der Zugriff über diesen Namen, z.B. &meinFilterName.in

ObjectValue &[grabber].out: Das Eingabeelement des Grabbers. Ist ein Grabber gesetzt, ermöglicht dieser den Zugriff auf das gelesene Element. Für [grabber] muss der Klassenname des Grabber angegeben werden, z.B. bei der Verwendung eines LinePointGrabber über &LinePointGrabber.in . Soweit mit dem Grabberparameter 'name' eine individueller Namenangabe erfolgte, erfolgt der Zugriff über diesen Namen, z.B. &meinGrabberName.in .

new Factory ReaderFactory
   name = ArtLeser
   spec = Dokumentiert alle Elemente der Art 501
   filter = new Filter ArtFilter
      list = 501
   end
   function = @Log(&in)
end

verfügbare Factories

AreaTester

Reader

Diese Factory liest ein flächenförmiges Objekt.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung Der Filter gibt die zu lesende Objekt an.

ObjectValue points: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt an, welche im Objekt enthaltenen Punkte gelesen werden sollen.

ObjectValue lines: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt an, welche im Objekt enthaltenen Linien gelesen werden sollen.

ObjectValue texts: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt an, welche im Objekt enthaltenen Texte gelesen werden sollen.

ObjectValue &in: Das auszuwertende Objekt.

StringValue &name: Enthält den Objektnamen.

StringValue &fullName: Enthält gesamten mit Hilfe der Oberobjekte zusammengesetzten Objektnamen.

LongValue &count: Die aktuelle Anzahl ausgewerteten Objekte.

LongValue &pCount: Anzahl im Objekt enthaltenen Punkte.

LongValue &lCount: Anzahl im Objekt enthaltenen Linien.

LongValue &tCount: Anzahl im Objekt enthaltenen Texte.

ArrayValue &inPoints: Enthält die im Objekt enthaltenen Punkte.

ArrayValue &inLines: Enthält die im Objekt enthaltenen Linien.

ArrayValue &inTexts: Enthält die im Objekt enthaltenen Texte.

DoubleValue &length: Die Summe der Linienlängen.

DoubleValue &area: Die Fläche des Objekts.

BooleanValue &isArea: Gibt an, ob ein flächenförmiges Objekt vorliegt.

BooleanValue &isComplex: Gibt an, ob das Objekt En- oder Exklaven enthält.

BooleanValue &hasEnclaves: Gibt an, ob das Objekt Enklaven enthält.

BooleanValue &hasExclaves: Gibt an, ob das Objekt Exklaven enthält.

BooleanValue &hasArcs: Gibt an, ob das Objekt Kreisbögen im Umring enthält.

BooleanValue &hasAnchors:Gibt an, ob das Objekt Ankerlinien enthält.

Die Funktionen werden auf jedes gelesene Objekt angewendet.

new Factory AreaTester
   name = "FlächenBerechner"
   filter = new Filter ArtFilter
      list = 100
   end
   initiate = @Store(&summe, 0.0)
   function = @Store(&summe, @Add(&summe, &area))
   finally  = @Log("Fläche &summe")
end

AreaToHatchCopier

Reader

Diese Factory erzeugt aus einem flächenförmigen Objekt eine Schraffur.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung Der Filter gibt die zu lesende Objekt an.

zusätzlich können die Parameter der Factory AreaTester angegeben werden.

ObjectValue &in: Das auszuwertende Objekt.

DoubleValue &area: Die Fläche des Objekts.

BooleanValue &isArea: Gibt an, ob ein flächenförmiges Objekt vorliegt.

ObjectValue &out: Die erzeugte Schraffur. Der Wert kann leer sein, wenn kein flächenförmiges Objekt vorlag. Funktionen sollten beim Zugriff die Variable &isArea prüfen.

zusätzlich können die Variablen der Factory AreaTester verwendet werden.

Die Funktionen werden auf Objekt angewendet (auch wenn keine Schraffur erzeugt werden konte).

new Factory AreaToHatchCopier
   name = "SchraffurErzeuger"
   filter = new Filter EbeneFilter
      list = 11,84
   end
   function = @If(@Not(&isArea), @Log("ERROR", &in, "konnte Schraffur nicht erzeugen"), @Break())
   function = @If(&hasArcs, @Log("WARNING", &out, "Schraffur besitzt Bögen, bitte neu erzeugen"))
   finally  = @Log("&sCount Schraffuren erzeugt")
end

AreaTester

CollectionReader

Calculator, Creator

Der CollectionReader schreibt in einer Collection enthaltene GeografElemente in die Ausgabedaten der Pipline.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue collection: Die Collection, aus der die Elemente gelesen werden.

ObjectValue &in: Das gelesene Elemente

LongValue &count: Die aktuelle Anzahl der gelesenen Elemente

auf jedes kopierte Element

new Factory CollectionReader
   filter = new Filter ArtFilter
      list = 501
   end
   collection = $list
   finally  = @Log("&count Elemente gelesen")
end

DatasetToObjectCopier

Reader, Creator

Diese Factory erzeugt aus einer Menge ein Objekt.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

BooleanValueadLORU: Gibt an, ob zusätzlich eine Linie von LinksOben nach RechtsUnten erzeugt werden soll

BooleanValueadLURO: Gibt an, ob zusätzlich eine Linie von LinksUnten nach RechtsOben erzeugt werden soll

BooleanValueadName: Gibt an, ob der Dokumentname als Text erzeugt werden soll

ObjectValue &in: Das zu verarbeitete Dokument.

ArrayValue &outPoints: Die am Rahmen beteiligten Punkte.

ArrayValue &outLines: Die am Rahmen beteiligten Linien.

ObjectValue &outText: Der Dokumentname als Textelement.

LongValue &count: Die aktuelle Anzahl verarbeiteten Dokumente.

auf jedes verarbeitete Dokument

new Factory DocumentBorderCreator
   addLORU = true
   addLURO = false
   addName = true
   finally  = @Log("&count Dokumentrahmen erzeugt")
end

DocumentBorderCreator

Reader, Creator

Die Factory DocumentBorderCreator erzeugt aus der Georeferenzierung der Dokumente einen Rahmen aus Linien. Diese können mit Hilfe von Funktionsaufrufen verändert werden.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Das gelesene QuellElement

ArrayValue &outPoints: Das kopierte ZielElement

LongValue &count: Die aktuelle Anzahl der kopierten Elemente

auf jedes kopierte Element

new Factory ReaderFactory
   filter = new Filter ArtFilter
      list = 501
   end
   function = @Set(&in, "art", 601)
   finally  = @Log("&count Elemente von Art 501 auf Art 601 kopiert")
end

ElementCopier

Reader, Creator

Die Factory ElementCopier erzeugt Kopien von Geograf-Elementen. Es werden sämtliche Attribute des Quellelements übernommen. Diese können mit Hilfe von Funktionsaufrufen verändert werden.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Das gelesene QuellElement

ObjectValue &out: Das kopierte ZielElement

LongValue &count: Die aktuelle Anzahl der kopierten Elemente

auf jedes kopierte Element

new Factory ReaderFactory
   filter = new Filter ArtFilter
      list = 501
   end
   function = @Set(&in, "art", 601)
   finally  = @Log("&count Elemente von Art 501 auf Art 601 kopiert")
end

ElementLabelTester

Reader, MultiExecute

Die Factory testet, ob Elemente mit Pflicht- bzw. optionalen Texten beschriftet sind.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue require: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt Textbeschriftungen an, die zwingend dem Eingabeelement zugeordnet sein müssen. Der Parameter 'require' kann mehrmals angegeben werden. Die Factory gibt Fehlermeldungen aus, wenn ein require-Filter nicht erfüllt ist.

ObjectValue optional: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt Textbeschriftungen an, die dem Eingabeelement zugeordnet sein können. Es können mehrere optional-Filter angegeben werden.
Für alle Beschriftungen, die nicht die require- und optional-Filter erfüllen, werden Fehlermeldungen dokumentiert.

StringValue requiredMessageTyp: Typ der Fehlermeldung, die ausgegeben wird, wenn der require-Filter nicht erfüllt ist. Die zulässigen Typen sind bei der Funktion @Log dokumentiert.

StringValue optionalMessageTyp: Typ der Fehlermeldung, die ausgegeben wird, wenn der Beschriftungen außerhalb des optional-Filters nicht enthalten sind. Die zulässigen Typen sind bei der Funktion @Log dokumentiert.

ObjectValue &in: Das beschriftete Element

LongValue &count: Die aktuelle Anzahl der beschrifteten Elemente

LongValue &eCount: Die aktuelle Anzahl der fehlerhaft bzw. nicht beschrifteten Elemente

BooleanValue &isErr: Markiert ein fehlerhaft bzw. nicht beschriftetes Element

ArrayValue &labels: Die Beschriftungstexte, die dem Element zugeordnet sind.

"Element [elem] besitzt keine Beschriftung [filter.name] !

"Element [elem] ist mit dem unzulässigen Text [te] beschriftet!"

auf jedes geprüfte Element

Diese Factory testet alle Punkte der Art 600, ob sie mit der TextArt 601 beschriftet sind.

new Factory ElementLabelTester
   filter = new MultiFilter
      mode = and
      filter = new ElementIdFilter
         id = pk
      end
      filter = new Filter ArtFilter
         list = 600
      end
   end
   require = new Filter ArtFilter
      list = 601
   end
   finally  = @Log("&eCount fehlerhafte Punktbeschriftungen")
end

ElementObjectTester

Reader, MultiExecute

Die Factory testet, ob Elemente in Pflicht- bzw. optionalen Objekten enthalten sind.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue require: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt Objekte an, in denen zwingend das Eingabeelement enthalten sein muss. Der Parameter 'require' kann mehrmals angegeben werden. Die Factory gibt Fehlermeldungen aus, wenn ein require-Filter nicht erfüllt ist.

ObjectValue optional: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt Objekte an, in denen das Eingabeelement enthalten sein kann. Es können mehrere optional-Filter angegeben werden.
Für alle Beschriftungen, die nicht die require- und optional-Filter erfüllen, werden Fehlermeldungen dokumentiert.

ObjectValue objects: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser grenzt die zu untersuchenden Objekte ein. Es kann zum Beispiel sinnvoll sein, Beschriftungsobjekte (art = 9999) auszuschließen.

StringValue requiredMessageTyp: Typ der Fehlermeldung, die ausgegeben wird, wenn der require-Filter nicht erfüllt ist. Die zulässigen Typen sind bei der Funktion @Log dokumentiert.

StringValue optionalMessageTyp: Typ der Fehlermeldung, die ausgegeben wird, wenn der Beschriftungen außerhalb des optional-Filters nicht enthalten sind. Die zulässigen Typen sind bei der Funktion @Log dokumentiert.

ObjectValue &in: Das beschriftete Element

LongValue &count: Die aktuelle Anzahl der Objekte

LongValue &eCount: Die aktuelle Anzahl der fehlerhaften

BooleanValue &isErr: Markiert ein fehlerhaftes Objekt

"Element [elem] ist in keinem Pflichtobjekt [filter.name] enthalten!"

"Element [elem] ist in dem unzulässigen Objekt [oox] enthalten!"

auf jedes geprüfte Element

Diese Factory testet alle Linien der Art 600, ob sie in einem Objekt der Art 601 enthalten sind.

new Factory ElementLabelTester
   filter = new MultiFilter
      mode = and
      filter = new ElementIdFilter
         id = li
      end
      filter = new Filter ArtFilter
         list = 600
      end
   end
   require = new Filter ArtFilter
      list = 601
   end
   finally  = @Log("&eCount Linien ohne zugehöriges Objekt")
end

ElementRemover

Remover

Die Factory ElementRemover löscht Geografelemente aus dem Datenstrom.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Das zu löschende Element

LongValue &count: Die aktuelle Anzahl der gelöschten Elemente

auf jedes zu löschende Element

new Factory ElementRemover
   filter = new MultiFilter
      mode = and
      filter = new ElementIdFilter
         id = li
      end
      filter = new Filter ArtFilter
         list = 600
      end
   end
   function = @Log("Lösche: &in")
   finally  = @Log("&count Linien der Art 600 gelöscht")
end

KoordinateToTextCopier

Reader, Creator

Diese Factory erzeugt auf der Koordinate eines Elements einen neuen Text. Entgegengenommen werden alle Elemente, die ein Koordinatenpaar besitzen (Punkte, Texte, Objekte)

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Das auszuwertende Element.

ObjectValue &out: Die erzeugte Text.

LongValue &count: Die aktuelle Anzahl erzeugten Texte.

Die Funktionen werden auf alle neu erzeugten texte angewendet.

new Factory KoordinateToTextCopier
   filter = new Filter ArtFilter
      list = 501
   end
   function = @Set(&out, ebene, 7, art, 700, pos, 4, rahmen, 0, frei, 0, text, "Grünland")
   finally  = @Log("&count Texte erzeugt")
end

PointToTextCopier

LabelReader

Reader

Diese Factory liest alle Beschriftungen und startet die Funktionen auf jeden Beschriftungstext.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung
Der Filter fragt nach dem beschrifteten Element.

ObjectValue labels: Es wird ein ObjektValue vom Typ Filter erwartet.
Der Filter gibt Beschriftungstexte an, die gelesen werden sollen.

ObjectValue &obj: das Beschriftungsobjekt (Objekt der Art 9999)

ObjectValue &in: Das beschriftete Element

ObjectValue &label: Die einzelne Beschriftung (Element TE)

LongValue &count: Die aktuelle Anzahl der beschrifteten Elemente (Beschriftungsobjekte)

LongValue &lCount: Die aktuelle Anzahl der Beschriftungstexte pro Beschriftungselement

auf jeden Beschriftungstext

Folgende Factory gibt eine Fehlermeldung aus, wenn ein Element der Art 600 mit einem Text 'TTT' beschriftet ist.

new Factory LabelReader
   filter = new Filter ArtFilter
      list = 600
   end
   function = @If(@Equals(@Get(&label, "text"), "TTT"), @Log(ERROR, &obj, "Fehler im Beschriftungstext"))
   finally  = @Log("&count Labels getestet")
end

LineCleaner

Reader, Remover, Creator, MultiExecute

Diese Factory verbindet Linien über unbedeutenden Brechpunkten. Die maximale Abweichung aus der Geraden kann angegeben werden. Es wird eine neue Linie erzeugt. Soweit der Parameter 'removeLines' gesetzt ist, werden die verknüpften Linien gelöscht, so dass nur noch die Verbindungslinie in den Daten vorhanden ist.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

DoubleValue maxDistance: Gibt die maximale Distanz an, die ein Brechpunkt aus der geraden Verbindung vom vorhergehenden zum nächsten Punkt liegen darf, damit die Linie verknüpft wird.

ObjectValue splitter: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser Filter kann Punkte angeben, an denen Linien nicht verknüpft werden sollen. Die hier angegebenen Punkte bleiben also in jedem Fall als Brechpunkte erhalten.

BooleanValue cleanMultiArt: Gibt an, ob Linien mit unterschiedlichen Arten verknüpft werden sollen.

BooleanValue removeLines: Gibt an, ob die verknüpften Linien gelöscht werden sollen.

ObjectValue &in: enthält die letzte zu verknüpfende Einzellinie.

ObjectValue &out: enthält die neue verknüpfte Linie.

LongValue &count: Die aktuelle Anzahl der neu erzeugten Linien an.

Die Funktionen werden auf jede neu erzeugte Linie aufgerufen.

new Factory LineCleaner
   filter = new Filter ArtFilter
      list = 233
   end
   filter = new Filter ArtFilter
      list = 117,118,119,8117,8118,8119
   end
   removeLines = true
   minDist     = 0.03
   function    = @Set(&out, ebene, 9998, art, 9998)
   finally     = @Log("&count Linien erzeugt")
end

LineIntersectionFactory

Reader, Creator, MultiExecute

Prüft Linien auf Verschneidung.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung, Der Eingabefilter bestimmt die Referenzlinien, die gegen die im Filter candidates enthaltenden Linien auf Verschneidung geprüft werden.

ObjectValue candidates: Der Filter mit den Linien, die gegen die Referenzlinien verschnitten werden.

BooleanValue selfsect: Wenn dieser Schalter auf 'true' gesetzt wird, werden die Referenzlinien auch untereinander auf Verschneidung getestet.

BooleanValue safePoint: Wenn dieser Schalter auf 'true' gesetzt wird, werden die Schnittpunkte gespeichert.

ObjectValue &in: Enthält die ausgewerte Referenzlinie.

LongValue &count: Die aktuelle Gesamtanzahl der untersuchten Referenzlinien.

LongValue &lCount: Gesamtanzahl der Kandidatenlinien.

LongValue &sCount: Die aktuelle Anzahl Schnittpunkte der einzelnen Referenzlinie.

LongValue &pCount: Die aktuelle Gesamtanzahl der Schnittpunkte.

ObjectValue &l1: Enthält die ausgewerte Referenzlinie.

ObjectValue &l1pa: Enthält den Anfangspunkt der Referenzlinie.

ObjectValue &l1pe: Enthält den Endpunkt der Referenzlinie.

DoubleValue &l1da: Enthält die Distance zum Anfangspunkt der Referenzlinie.

DoubleValue &l1de: Enthält die Distance zum Endpunkt der Referenzlinie.

ObjectValue &l2: Enthält die ausgewerte Kandidatenlinie.

ObjectValue &l2pa: Enthält den Anfangspunkt der Kandidatenlinie.

ObjectValue &l2pe: Enthält den Endpunkt der Kandidatenlinie.

DoubleValue &l2da: Enthält die Distance zum Anfangspunkt der Kandidatenlinie.

DoubleValue &l2de: Enthält die Distance zum Endpunkt der Kandidatenlinie.

ObjectValue &out: Enthält den Schnittpunkt.

Die Funktionen werden auf jeden gefundenen Schnittpunkt angewendet.

new Factory LineIntersectionFactory
   filter = new Filter ArtFilter
      range = 0-9999
   end
   selfsect  = true
   function = @Log(ERROR, &out, "ungültiger Linienschnitt")
end

LineLengthCalculator

Reader

Berechnet die Längen von Linien. Da eine maximale auszuwertende Linienlänge angegeben werden kann, kann diese Factory vorallem zum Suchen von zu kurzen Linienstücken dienen.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

DoubleValue maxLength: Gibt die maximale Länge an. Längere Linien werden nicht ausgewertet.

ObjectValue &in: Enthält die ausgewerte Linie

LongValue &count: Die aktuelle Anzahl der insgesamt gelesenen Linien.

LongValue &lCount: Die aktuelle Anzahl der Linien an, die unter die Schranke 'maxLength' fallen.

DoubleValue length: Gibt die Länge der Linie in m an.

Die Funktionen werden auf jede Linie angewendet, die unter die Schranke 'maxLength' fällt.

new Factory LineLengthCalculator
   filter = new Filter EbeneFilter
      list =  42
   end
   maxLength = 0.10
   function = @Log(WARNING, &in, @Concat("kurze Linie: L=", @Format("#0.000", &length)))
   finally  = @Log("&count Linien untersucht, &lCount kritische Linien gefunden")
end

LinePointDistanceCalculator

Reader, MultiExecute

Berechnet die orthogonalen Abstände von Einzelpunkten zu Linien. Es kann eine maximal zu untersuchender Abstand angegeben werden. Diese Factory soll dazu dienen, Linien zu finden, die auf Sollbrechpunkten nicht geteilt wurden.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung Der Filter gibt die in die Suche einzuschließenden Linien an.

ObjectValue points: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt die in die Suche einzuschließenden Punkte an.

DoubleValue maxDistance: Gibt den maximalen Abstand an. Punkte mit größeren Abstand zu der nahesten Linie werden nicht ausgewertet.

ObjectValue &in: Enthält die ausgewerte Linie.

LongValue &count: Gesamtanzahl der untersuchten Linien.

LongValue &dCount: Gesamtanzahl der gefundenen Abstände.

ObjectValue &distancePoint: Enthält den gefundenen Punkt.

ObjectValue &startPoint: Enthält den Anfangspunkt der gefundenen Linie.

ObjectValue &endPoint: Enthält den Endpunkt der gefundenen Linie.

DoubleValue &distance: Abstand des gefundenen Punktes zur Linie.

Die Funktionen werden auf jeden gefundenen Punkt angewendet.

new Factory LinePointDistanceCalculator
   filter = new Filter EbeneFilter
      list =  42
   end
   filter = new Filter ArtFilter
      list = 0,118,119,5118,5119
   end
   maxDistance = 0.5
   function = @Log(WARNING, &distancePoint, @Concat("Punkt nahe einer Schätzungsgrenze, Linie teilen, Abstand: ", @Format("#0.000", &distance)))
   finally  = @Log("&count Linien untersucht, &dCount liniennahe Punkte gefunden")
end

LineReader

Reader

Die ReaderFactory liest Linien und stellt Anfangs- und Enpunkt der Linie in Variablen zur Verfügung.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Enthält die gelesene Linie.

ObjectValue &pa: Enthält den Anfangspunkt der Linie.

ObjectValue &pe: Enthält den Endpunkt der Linie.

LongValue &count: Die aktuelle Anzahl der gelesenen Linien.

Auf jede gelesene Linie.

new Factory LineReader
   filter = new Filter ArtFilter
      range = 452
   end
   function = @Set(&pa, "art", 1000)
   function = @Set(&pe, "art", 1000)
   finally  = @Log("&count Arten gesetzt")
end

ReaderFactory

LineToRectangleFactory

Reader, Creator

Diese Factory erzeugt über einer geraden Linie ein Rechteck mit einer vorgebbaren Breite. Das Polygon kann als Objekt gespeichert werden. Die Ausgangslinie kann gelöscht werden, so dass praktisch eine Umwandlung geschieht.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung Der Filter gibt die in die Suche einzuschließenden Linien an.

LongValue pnr: Startnummer, mit der die neuen Punkte erzeugt werden.

DoubleValue dist: Breite des Erzeugten Rechtecks in m

BooleanValue removeLine: Gibt an, ob die Eingabelinie gelöscht werden soll.

BooleanValue createObject: Gibt an, ob aus den Ausgabelinien ein Objekt erzeugt werden soll.

BooleanValue addPoints: Gibt an, ob die neu erzeugten Punkte dem Objekt hinzugefügt werden sollen.

LongValue oTyp: Geometrietyp der Objektlinien, 1=Definition, 2=Ausgestaltung

ObjectValue &in: Enthält die ausgewerte Linie.

ObjectValue &inp1: Enthält den Anfangspunkt der ausgewerte Linie.

ObjectValue &inp2: Enthält den Endpunkt der ausgewerten Linie.

ArrayValue &outPoints: Enthält die vier Ausgabepunkte.

ArrayValue &outLines: Enthält die vier Ausgabelinien.

ObjectValue &outObject: Enthält das Ausgabeobjekt.

LongValue &count: Die Anzahl der verarbeiteten Linien.

LongValue &pCount: Aktuelle Anzahl der erzeugten Punkte.

LongValue &lCount: Aktuelle Anzahl der erzeugten Linien.

LongValue &oCount: Aktuelle Anzahl der erzeugten Objekte.

LongValue &dlCount: Aktuelle Anzahl der gelöschten Eingabelinien.

Die Funktionen werden auf jedes neu erzeugte Polygon angewendet.

new Factory LineToRectangleFactory
   filter = new Filter ArtFilter
      range = 2004-2005
   end
   dist = 1.0
   createObject = true
   finally   = @Log("&oCount Linien in Rechtecke umgewandelt")
end

MultibleLineFinder

Reader

Diese Factory findet übereinander liegende Linien in den Daten. Mit speziellen Filtern können Grundlinien und zu suchende doppelte Linien eingegrenzt werden.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue filter1: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt die zu suchenden Grundlinien an.

ObjectValue filter2: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt die zu suchenden Doppellinien an.

BooleanValue selfFind: Wenn dieser Schalter auf true gesetzt ist, findet der MultibleLineFinder auch doppelte Linien, die beide den filter1 erfüllen.

ObjectValue &in: Enthält die ausgewerte Grundlinie.

ArrayValue &out: Enthält die gefundenen doppelten Linien. Wenn keine doppelte Linie gefunden wurde, ist der Array leer.

LongValue &count: Aktuelle Anzahl der gefundenen Grundlinien.

LongValue &lCount: Anzahl der gefundenen doppelten Linien pro Grundlinie.

LongValue &dCount: Aktuelle Anzahl der Grundlinien, für die mehrfache Linien gefunden wurden.

Die Funktionen werden auf jede gefundene Grundlinie angewendet, auch wenn keine doppelten Linien gefunden wurde. Der Wert &lCount ist dann 0.

new Factory MultibleLineFinder
   filter1 = new Filter ArtFilter
      range = 3104
   end
   filter2 = 3105
   function = @If(@Equals(&lCount, 0), @Log(WARNING, &in, "Linie 3104 ohne darüberliegende 3105 gefunden"))
end

MultibleObjectElementFinder

Reader, Calculator

Diese Factory findet Elemente, die in einem oder mehreren Objekten enthalten sind. Es werden alle Objektinhalte durchlaufen, beim Funktionsaufruf steht die Anzahl der Objekte und die Objekte selbst zur Verfügung.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue elements: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter schränkt die zu untersuchenden Objektinhalte ein.

ObjectValue &in: Enthält das Element.

ArrayValue &objects: Enthält die Objekte, in denen das Element &in enthalten ist.

LongValue &oCount: Anzahl der Objekte, in denen das Element &in enthalten ist.

LongValue &count: Aktuelle Anzahl der untersuchten Elemente.

Die Funktionen werden auf jedes Element angewendet, dass in mindestens einem Objekt enthalten ist.

new Factory MultibleObjectElementFinder
   filter = new Filter EbeneFilter
      list = 42
   end
   elements = new Filter ElementIdFilter
      list = te
   end
   function = @If(@Gt(&oCount, 1), @Log(ERROR, &in, @Concat("Text ", @Get(&in, "allText"), " ist in mehreren Objekten enthalten")))
   finally  = @Log(@Concat(&count, " Texte untersucht"))
end

ObjectContentRemover

Reader

Die Factory entfernt Referenzen auf Elemente aus Objekten.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue remove: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt Elemente an, die aus dem Objekt gelöscht werden sollen.

ObjectValue &in: Das auszuwertende Objekt.

LongValue &count: Die aktuelle Anzahl ausgewerteten Objekte.

LongValue &rCount: Die Anzahl der gelöschten Elemente des aktuellen Objekts.

ArrayValue &rElems: Ein Array, der die gelöschten Elemente des aktuellen Objekts enthält.

LongValue &aCount: Die aktuelle Gesamtanzahl der gelöschten Elemente.

Die Funktionen werden auf jedes bearbeitete Objekt angewendet.

new Factory ObjectContentRemover
   filter = new Filter ArtFilter
      list = 264
   end
   remove = new Filter ElementIdFilter
      id = pk
   end
   finally  = @Log("&aCount Punkte aus &count Obekten entfernt")
end

ObjectContentTester

Reader

Die Factory testet, ob Objekte mit Pflicht- bzw. optionalen Elementen ausgestattet sind. Dabei wird auch der Objektname aus Oberobjekten zusammengesetzt und steht zur Prüfung mittels Funktionen zur Verfügung.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue require: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt Elemente an, die zwingend dem Objekt enthalten sein müssen. Der Parameter 'require' kann mehrmals angegeben werden. Die Factory gibt Fehlermeldungen aus, wenn ein require-Filter nicht erfüllt ist.

ObjectValue optional: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt Elemente an, die in dem Objekt enthalten sein können. Es können mehrere optional-Filter angegeben werden.
Für alle Elemente, die nicht die require- und optional-Filter erfüllen, werden Fehlermeldungen dokumentiert.

StringValue delim: Trennzeichen, mit dem der Objektname aus Oberobjekten zusammengesetzt wird. Die Vorbelegung ist ein leerer StringValue, der Objektname wird also ohne Trennzeichen zusammengesetzt.

ObjectValue &in: Das auszuwertende Objekt.

StringValue &name: Enthält den Objektnamen.

StringValue &fullName: Enthält gesamten mit Hilfe der Oberobjekte zusammengesetzten Objektnamen.

LongValue &count: Die aktuelle Anzahl ausgewerteten Objekte.

LongValue &[filterName].count: Über den Filternamen der Parameter require und optional kann auf die Anzahl der den Filter erfüllenden Objektelemente zurückgegriffen werden.

"Pflichtinhalt [require] nicht im Objekt enthalten"

"Ungültiger Objektinhalt"

Die Funktionen werden auf jedes geprüfte Objekt angewendet.

new Factory ObjectContentTester
   filter = new Filter ArtFilter
      list = 264
   end
   require = new Filter ElementIdFilter
      name = f1
      id = te
   end
   function = @If(@Not(@Equals(&f1.count, 1)), @Log(ERROR, &in, "Nur ein Text ist pro Objekt zulässig"))
   function = @If(@Lt(@Length(&fullName), 8), @Log(ERROR, &in, "Objektname &fullName zu kurz"))
   finally  = @Log("&count Obekte getestet")
end

ObjectElementTester

Reader

Der ObjectElementTester dient der Tiefenprüfung der enhaltenen Elemente. Die Funktionen werden hier auf jedes im Objekt enthaltene Element aufgerufen.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue elements: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt Inhalts-Elemente des Objektes an, die untersucht werden sollen.

StringValue delim: Trennzeichen, mit dem der Objektname aus Oberobjekten zusammengesetzt wird. Die Vorbelegung ist ein leerer StringValue, der Objektname wird also ohne Trennzeichen zusammengesetzt.

ObjectValue &in: Das auszuwertende Objekt.

StringValue &name: Enthält den Objektnamen.

StringValue &fullName: Enthält gesamten mit Hilfe der Oberobjekte zusammengesetzten Objektnamen.

ObjectValue &elem: Das im Objekt enthaltene Einzelelement.

LongValue &count: Die aktuelle Anzahl ausgewerteten Objekte.

auf jedes Einzelelement des zu prüfenden Objekts

new Factory ObjectTester
   filter = new Filter ArtFilter
      list = 264
   end
   function = @If(@Equals(@Get(&elem, "art"), 1001)), @Log(ERROR, &in, "Art 1001 ist im Objekt nicht zulässig"))
   finally  = @Log("&count Obekte getestet")
end

ObjectHierarchyTester

Reader

Der ObjectHierarchyTester testet die korrekte Zuordnung von Oberobjekten. Dabei stellt er wie alle Objekttester der vollständigen Objektnamen bereit.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue require: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt das Oberobjekt an, das zwingend das Objekt zugeordnet sein muss. Die Factory gibt Fehlermeldungen aus, wenn der require-Filter nicht erfüllt ist.

ObjectValue optional: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt das Oberobjekt an, das dem Objekt zugeordnet sein kann.

StringValue delim: Trennzeichen, mit dem der Objektname aus Oberobjekten zusammengesetzt wird. Die Vorbelegung ist ein leerer StringValue, der Objektname wird also ohne Trennzeichen zusammengesetzt.

ObjectValue &in: Das auszuwertende Objekt.

StringValue &name: Enthält den Objektnamen.

StringValue &fullName: Enthält gesamten mit Hilfe der Oberobjekte zusammengesetzten Objektnamen.

LongValue &count: Die aktuelle Anzahl ausgewerteten Objekte.

"Objekt fehlt das Pflicht-Oberobjekt"

"Objekt hat ungültiges Oberobjekt"

Die Funktionen werden auf jedes geprüfte Objekt angewendet.

new Factory ObjectHierarchyTester
   filter = new Filter ArtFilter
      list = 225, 227, 264, 265
   end
   require = new Filter ArtFilter
      list = 263
   end
end

ObjectTester

Reader

Der ObjectTester ist dient dem allgemeinen Test der Objekte.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Das auszuwertende Objekt.

StringValue &name: Enthält den Objektnamen.

StringValue &fullName: Enthält gesamten mit Hilfe der Oberobjekte zusammengesetzten Objektnamen.

LongValue &count: Die aktuelle Anzahl ausgewerteten Objekte.

Die Funktionen werden auf jedes geprüfte Objekt angewendet.

new Factory ObjectTester
   filter = new Filter ArtFilter
      list = 1001
   end
   function = @If(@Not(@Equals(&name, "Haus")), @Log(ERROR, &in, "Falscher Objektname &name"))
end

PointDistanceSetFinder

Reader, MultiExecute

Sucht Punkte in der Nähe eines Referenzpunktes und stellt sie in einem Array zur Verfügung.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung Der Filter gibt den Referenzpunkt an, in dessen Nähe Punkte (Kandidaten) gesucht werden.

ObjectValue points: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt die in die Suche einzuschließenden Punkte (Kandidaten) an.

DoubleValue maxDistance: Gibt den maximalen Abstand an. KandidatenPunkte mit größeren Abstand zum Referenzpunkt werden nicht ausgewertet.

ObjectValue &in: Enthält den Referenzpunkt.

LongValue &count: Gesamtanzahl der untersuchten Referenzpunkte.

LongValue &dCount: Anzahl der zum ReferenzPunkt gefundenen Kandidatenpunkte.

ArrayValue &distancePoints: Enthält die gefundenen KandidatenPunkte. Die Punkte sind aufsteigend nach Abstand sortiert, d.h. der erste Punkt im Array hat den kürzesten Abstand zum Referenzpunkt.

Die Funktionen werden auf jeden ReferenzPunkt angewendet.

new Factory PointDistanceSetFinder
   filter = new Filter ArtFilter
      list = 2050, 2051, 2150, 2151, 2250, 2251
   end
   points = new Filter ArtFilter
      list = 450, 451
   end
   maxDistance = 0.50
   function = @If(@Equals(&dCount, 1), @Log(ERROR, &in, "Punkte in der Nähe des Kandidaten gefunden"))
end

LinePointDistanceCalculator

PointLinesCounter

Reader, Calculator

Diese Factory zählt die an einem Punkt anschließenden Linien. Die Linienauswahl kann mit einem Filter eingeschränkt werden.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung, Auswahl der zu untersuchenden Punkte.

ObjectValue lines: Es wird ein ObjektValue vom Typ Filter erwartet. Mit diesem Filter können die zu zählenden Linien eingeschränk werden. Ohne diese Angabe werden alle Linien gezählt.

ObjectValue &in: Der auszuwertende Punkt.

LongValue &count: Die aktuelle Anzahl ausgewerteten Punkte.

ArrayValue &outLines: Ein Array mit den am Punkt hängenden Linien.

LongValue &lCount: Die Anzahl der am Punkt hängenden Linien.

Die Funktionen werden auf jeden zu untersuchenden Punkt angewendet.

new Factory PointLinesCounter
   filter = new Filter ArtFilter
      range = 460-469
   end
   function = @If(@Not(@Equals(&lCount, 1)), @Log(WARNING, &in, "Punkt &in hat &lCount Linien, zulässig: 1"))
   finally  = @Log("&count Punkte getestet")
end

PointMerger

Reader, Calculator, Remover, MultiExecute

Der PointMerger verschmilzt mehrere in der Nähe liegende Punkte zu einem Punkt. Es muss ein Referenzunkt anhand der Punktparameter definiert werden. Alle anderen Punke werden zu dem Referenzpunkt zusammengeführt und danach gelöscht. Die Höhe kann aus den zu löschenden Punkten übernommen bzw. gemittelt werden. Linien, Beschriftungen und Objekte der Kandidaten werden zum Referenzpunkt zusammenngeführt.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue masters: Filter, der die Referenzpunkte spezifiziert. Der masters-Filter muss eine Untermenge des allgemeinen Filters filter sein.

DoubleValue mergeDistance: Der Radius, innerhalb dessen um jeden Referenzpunkt Kandidatenpunkte gesucht werden. Der Wert mergeMatch wird abgefragt. Damit kann die Verschmelzung in Einzelfällen unterbunden werden.

DoubleValue searchDistance: Ein Radius, für den um jeden Referenzpunkt weitere Referenzpunkte gesucht werden. Liegt ein weiterer Referenzpunkt in der Nähe, ist die Zuordnung der Kandidaten nicht eindeutig. In diesem Fall fragt der PointMerger den Wert searchMatch ab.

BooleanValue mergeMatch: Dieser BooleanValue enthält sinnvollerweise eine Funktion, die Anhand der Werte &in und &slavePoint klarstellt, ob beide Punkte verschmelzbar sind. Als Standard ist true voreingestellt.

BooleanValue searchMatch: Dieser BooleanValue wird abgefragt, wenn innerhalb des Radius searchDistance weitere Referenzpunkte vorliegen. Sinnvollerweise wird mit einer Funktion abgefragt, ob der Kandidatenpunkt dem jeweiligen Referenzpunkt zugeordnet werden kann. Mit searchMatch zwischen jedem Kandidaten- und Referenzpunkt abgefragt. Als Standard ist false voreingestellt.

BooleanValue match3d: Dieser BooleanValue der angibt, ob die Höhe des Referenzpunktes gemittelt aus den Kandidatenpunkten erzeugt werden soll.

DoubleValue match3dDistance: Maximaler Höhenunterschied zwischen Kandidaten- und Referenzpunkten, bis zu die neue Höhe gemittelt wird.

ObjectValue &in: Die Referenzpunkt, zu dem Kandidaten vorliegen. Der Wert steht auch zur Abfrage mit mergeMatch und searchMatch zur Verfügung.

ObjectValue &slavePoint: Ein Kandidatenpunkt zum Referenzpunkt. Der Wert steht zur Abfrage mit mergeMatch und searchMatch zur Verfügung.

LongValue &slaveCount: Die Anzahl der zum Referenzpunkt gefundenen Kandidaten.

ArrayValue &slavePoints: Die zum Referenzpunkt gefundenen Kandidaten.

BooleanValue &isMatch3d: Gibt an, ob die Höhe des Referenzpunktes erzeugt oder verändert wurde.

DoubleValue &match3dValue: Die neue Höhe des Referenzpunktes.

DoubleValue &match3dMinimum: Die minimale Höhe der Kandidaten- und des Referenzpunktes.

DoubleValue &match3dMaximum: Die maximale Höhe der Kandidaten- und des Referenzpunktes.

Punkt [Kandidat] ist nicht eindeutig einem der Referenzpunkte zuordenbar: [Referenzpunkt], [Referenzpunkt]

Punkte [Kandidat],[...] überschreiten die zulässige Höhendifferenz von [match3dDistance], Differenz: [match3dMaximum-match3dMinimum]

Vorhandene Linie zwischen den zwei Kandidaten [Kandidat], [Kandidat] für Referenzpunkt [Referenzpunkt], Verschmelzung gelöscht

Vorhandene Linie zwischen Referenzpunkt [Referenzpunkt] und Kandidat [Kandidat], Verschmelzung gelöscht

Die Funktionen werden nach der erfolgreichen Verschmelzung jedes Referenzpunktes aufgerufen.

new Factory PointMerger
   name = "PunktVerschmelzer"
   spec = "Verschmilzt die amtlichen Grenzpunkte"
   filter = new Filter EbeneArtFilter
      range = 1 100-199
      range = 46 4600-4699
      range = 48-49 4800-4999
   end
   masters = new Filter MultiFilter
      mode = and
      filter = new Filter EbeneArtFilter
         range = 1 100-199
      end
      filter = new Filter FunctionFilter
         function = @Equals(@Length(@Get(&in, "name")), 14)
      end
   end
   mergeDistance   = 0.05
   searchDistance  = 0.15
   match3dDistance = 0.010
   searchMatch = @Equals(@Substring(@Get(&in, "name"), -5), @Substring(@Get(&slavePoint, "name"), -5))
   function    = @Log(DETAIL, @Concat("Verschmelzung: ", @Get(&in, "name"), " (", &slaveCount, ") : ", &names))
   finally     = @Log("&count GrenzPunkte verschmolzen")
end

PointReferenzFactory

Reader

Geograf speichert in der Regel in den Linien Referenzschlüssel auf den Anfangs- und Endpunkt der Linie. Mit der PointReferenzFactory können diese Schlüssel durch die originale Punktnummer ersetzt werden.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Die auszuwertende Linie.

LongValue &count: Die aktuelle Anzahl ausgewerteten Linien.

Die Funktionen werden auf alle Linien angewendet, die Referenzschlüssel besitzen.

new Factory PointReferenzFactory
   finally  = @Log("&count Linien umgewandelt")
end

PointToTextCopier

Reader, Creator

Diese Factory erzeugt auf der Koordinate eines Punktes einen neuen Text.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Der auszuwertende Punkt.

ObjectValue &out: Die erzeugte Text.

LongValue &count: Die aktuelle Anzahl erzeugten Texte.

Die Funktionen werden auf alle neu erzeugten Texte angewendet.

new Factory PointToTextCopier
   filter = new Filter ArtFilter
      list = 501
   end
   function = @Set(&out, ebene, 7, art, 700, pos, 4, rahmen, 0, frei, 0, text, "Grünland")
   finally  = @Log("&count Texte erzeugt")
end

KoordinateToTextCopier

PolygonCombiner

Reader, MultiExecute, Calculator, Remover

Diese Factory verknüpft als Objekte vorliegende Polygone. Die Verknüpfungslinien und -punkte können spezifiziert werden.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue combinePoints: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter spezifiziert die Punkte, an denen Polygone verknüpft werden können.

ObjectValue combineLines: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter spezifiziert die Linien, an denen Polygone verknüpft werden können.

DoubleValue minAngle: Polygone werden in einem Punkt nicht verknüpft, wenn der Brechungswinkel kleiner ist als diese Angabe.

ArrayValue &in: Ein Array aus den verwendeten Polygonen (Objekten).

ObjectValue &out: Das verknüpfte Polygon.

LongValue &count: Gesamtanzahl der verwendeten Polygone.

LongValue &oCount: Gesamtanzahl der verknüpften Polygone.

LongValue &eCount: Anzahl der zu einem Polygon verknüpften Polygone.

Die Funktionen werden auf jedes verknüpfte Polygon.

new Factory PolygonCombiner
   filter = new Filter ArtFilter
      list = 2000,2100,2200
   end
   combinePoints = new Filter ArtFilter
      list = 2055,2155,2255
   end
   minAngle = 190
   finally  = @Log("&oCount Polygone aus &count Einzelstücken erzeugt")
end

PolygonArtSearchFactory

Reader, Creator

Die PolygonFilterSearchFactory sucht zusammenhängende Linien und bildet daraus Polygone (Objekte). Diese Factory spezialisiert die PolygonFilterSearchFactory, sie bildet die Polygone aus Linien mit selber Art. Das neue Objekt erhält die Art der ausgewählten Linien.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue splitter: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser Filter kann Punkte angeben, an denen Linien nicht verknüpft werden sollen. Die hier angegebenen Punkte splitten also die zu erzeugenden Polygone.

ObjectValue lineText: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser Filter kann Texte angeben, die in das Objekt übernommen werden, wenn Linien damit beschriftet sind.

BooleanValue singleLine: Gibt an, ob auch aus einzelenen Linien ein Objekt erzeugt werden soll.

DoubleValue minAngle: Es kann ein Brechungswinkel angegeben werden. Wird dieser Winkel an einem Zwischenpunkt überschritten, wird das zu erzeugende Polygon an diesem Punkt unterbrochen.

LongValue &objectEbene: Die Ebene des neu zu erzeugenden Polygonobjekts.

ArrayValue &inPoints: Enthält die Punkte des erzeugten Polygons.

ArrayValue &inLines: Enthält die Linien des erzeugten Polygons.

ArrayValue &inTexts: Enthält die Texte des erzeugten Polygons.

LongValue &pCount: Anzahl der Punkte des erzeugten Polygons.

LongValue &lCount: Anzahl der Linien des erzeugten Polygons.

LongValue &tCount: Anzahl der Texte des erzeugten Polygons.

ObjectValue &out: Enthält das Ausgabepolygon (Objekt).

LongValue &count: Die aktuelle Anzahl der erzeugten Objekte.

Die Funktionen werden auf jedes neue Objekt aufgerufen

new Factory PolygonArtSearchFactory
   filter = new Filter ArtFilter
      range = 200-1199
   end
   singleLine  = true
   minAngle    = 180.
   objectEbene = 99
   finally     = @Log("&count Polygone erzeugt")
end

PolygonEbeneArtSearchFactory

Reader, Creator

Die PolygonFilterSearchFactory sucht zusammenhängende Linien und bildet daraus Polygone (Objekte). Diese Factory spezialisiert die PolygonFilterSearchFactory, sie bildet die Polygone aus Linien mit selber Art und Ebene. Das neue Objekt erhält die Art und Ebene der ausgewählten Linien.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue splitter: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser Filter kann Punkte angeben, an denen Linien nicht verknüpft werden sollen. Die hier angegebenen Punkte splitten also die zu erzeugenden Polygone.

ObjectValue lineText: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser Filter kann Texte angeben, die in das Objekt übernommen werden, wenn Linien damit beschriftet sind.

BooleanValue singleLine: Gibt an, ob auch aus einzelenen Linien ein Objekt erzeugt werden soll.

DoubleValue minAngle: Es kann ein Brechungswinkel angegeben werden. Wird dieser Winkel an einem Zwischenpunkt überschritten, wird das zu erzeugende Polygon an diesem Punkt unterbrochen.

ArrayValue &inPoints: Enthält die Punkte des erzeugten Polygons.

ArrayValue &inLines: Enthält die Linien des erzeugten Polygons.

ArrayValue &inTexts: Enthält die Texte des erzeugten Polygons.

LongValue &pCount: Anzahl der Punkte des erzeugten Polygons.

LongValue &lCount: Anzahl der Linien des erzeugten Polygons.

LongValue &tCount: Anzahl der Texte des erzeugten Polygons.

ObjectValue &out: Enthält das Ausgabepolygon (Objekt).

LongValue &count: Die aktuelle Anzahl der erzeugten Objekte.

Die Funktionen werden auf jedes neue Objekt aufgerufen

new Factory PolygonArtSearchFactory
   filter = new Filter ArtFilter
      range = 200-1199
   end
   singleLine  = true
   minAngle    = 180.
   finally     = @Log("&count Polygone erzeugt")
end

PolygonEbeneSearchFactory

Reader, Creator

Die PolygonFilterSearchFactory sucht zusammenhängende Linien und bildet daraus Polygone (Objekte). Diese Factory spezialisiert die PolygonFilterSearchFactory, sie bildet die Polygone aus Linien mit selber Ebene. Das neue Objekt erhält die Ebene der ausgewählten Linien.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue splitter: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser Filter kann Punkte angeben, an denen Linien nicht verknüpft werden sollen. Die hier angegebenen Punkte splitten also die zu erzeugenden Polygone.

ObjectValue lineText: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser Filter kann Texte angeben, die in das Objekt übernommen werden, wenn Linien damit beschriftet sind.

BooleanValue singleLine: Gibt an, ob auch aus einzelenen Linien ein Objekt erzeugt werden soll.

DoubleValue minAngle: Es kann ein Brechungswinkel angegeben werden. Wird dieser Winkel an einem Zwischenpunkt überschritten, wird das zu erzeugende Polygon an diesem Punkt unterbrochen.

LongValue &objectArt: Die Art des neu zu erzeugenden Polygonobjekts.

ArrayValue &inPoints: Enthält die Punkte des erzeugten Polygons.

ArrayValue &inLines: Enthält die Linien des erzeugten Polygons.

ArrayValue &inTexts: Enthält die Texte des erzeugten Polygons.

LongValue &pCount: Anzahl der Punkte des erzeugten Polygons.

LongValue &lCount: Anzahl der Linien des erzeugten Polygons.

LongValue &tCount: Anzahl der Texte des erzeugten Polygons.

ObjectValue &out: Enthält das Ausgabepolygon (Objekt).

LongValue &count: Die aktuelle Anzahl der erzeugten Objekte.

Die Funktionen werden auf jedes neue Objekt aufgerufen

new Factory PolygonArtSearchFactory
   filter = new Filter ArtFilter
      range = 200-1199
   end
   singleLine  = true
   minAngle    = 180.
   objectArt   = 99
   finally     = @Log("&count Polygone erzeugt")
end

PolygonFilterSearchFactory

Reader, Creator

Die PolygonFilterSearchFactory sucht zusammenhängende Linien und bildet daraus Polygone (Objekte).

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue splitter: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser Filter kann Punkte angeben, an denen Linien nicht verknüpft werden sollen. Die hier angegebenen Punkte splitten also die zu erzeugenden Polygone.

ObjectValue lineText: Es wird ein ObjektValue vom Typ Filter erwartet. Dieser Filter kann Texte angeben, die in das Objekt übernommen werden, wenn Linien damit beschriftet sind.

BooleanValue singleLine: Gibt an, ob auch aus einzelenen Linien ein Objekt erzeugt werden soll.

DoubleValue minAngle: Es kann ein Brechungswinkel angegeben werden. Wird dieser Winkel an einem Zwischenpunkt überschritten, wird das zu erzeugende Polygon an diesem Punkt unterbrochen.

LongValue &objectArt: Die Art des neu zu erzeugenden Polygonobjekts.

LongValue &objectEbene: Die Ebene des neu zu erzeugenden Polygonobjekts.

ArrayValue &inPoints: Enthält die Punkte des erzeugten Polygons.

ArrayValue &inLines: Enthält die Linien des erzeugten Polygons.

ArrayValue &inTexts: Enthält die Texte des erzeugten Polygons.

LongValue &pCount: Anzahl der Punkte des erzeugten Polygons.

LongValue &lCount: Anzahl der Linien des erzeugten Polygons.

LongValue &tCount: Anzahl der Texte des erzeugten Polygons.

ObjectValue &out: Enthält das Ausgabepolygon (Objekt).

LongValue &count: Die aktuelle Anzahl der erzeugten Objekte.

Die Funktionen werden auf jedes neue Objekt aufgerufen

new Factory PolygonArtSearchFactory
   filter = new Filter ArtFilter
      range = 200-1199
   end
   singleLine  = true
   minAngle    = 180.
   objectArt   = 99
   objectEbene = 99
   finally     = @Log("&count Polygone erzeugt")
end

PolygonTester

Reader

Diese Factory liest ein polygonförmiges Objekt.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung Der Filter gibt die zu lesende Objekt an.

ObjectValue points: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt an, welche im Objekt enthaltenen Punkte gelesen werden sollen.

ObjectValue lines: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt an, welche im Objekt enthaltenen Linien gelesen werden sollen.

ObjectValue texts: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt an, welche im Objekt enthaltenen Texte gelesen werden sollen.

ObjectValue &in: Das auszuwertende Objekt.

StringValue &name: Enthält den Objektnamen.

StringValue &fullName: Enthält gesamten mit Hilfe der Oberobjekte zusammengesetzten Objektnamen.

LongValue &count: Die aktuelle Anzahl ausgewerteten Objekte.

LongValue &pCount: Anzahl im Objekt enthaltenen Punkte.

LongValue &lCount: Anzahl im Objekt enthaltenen Linien.

LongValue &tCount: Anzahl im Objekt enthaltenen Texte.

ArrayValue &inPoints: Enthält die im Objekt enthaltenen Punkte.

ArrayValue &inLines: Enthält die im Objekt enthaltenen Linien.

ArrayValue &inTexts: Enthält die im Objekt enthaltenen Texte.

DoubleValue &length: Die Summe der Linienlängen.

BooleanValue &isClose: Gibt an, ob das Polygon geschlossen ist.

BooleanValue &isComplex: Gibt an, ob das Polygon aus mehreren Linienketten besteht.

ObjectValue &inp1: Der Anfangspunkt des Polygons.

ObjectValue &inp2: Der Endpunkt des Polygons.

Die Funktionen werden auf jedes gelesene Objekt angewendet.

new Factory PolygonTester
   name = "LängenBerechner"
   filter = new Filter ArtFilter
      list = 100
   end
   initiate = @Store(&summe, 0.0)
   function = @Store(&summe, @Add(&summe, &length))
   finally  = @Log("Länge &summe")
end

PolygonToRectanglePolygonFactory

Reader, Creator, Remover, MultiExecute

Diese Factory erzeugt über einem Polygon ein RechteckPolygon mit einer vorgebbaren Breite. Das Polygon kann als Objekt gespeichert werden. Das Ausgangsobjekt kann gelöscht werden, so dass praktisch eine Umwandlung geschieht.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung Der Filter gibt die in die Suche einzuschließenden Linien an.

LongValue pnr: Startnummer, mit der die neuen Punkte erzeugt werden.

DoubleValue dist: Breite des Erzeugten Rechtecks in m

BooleanValue removeObjekt: Gibt an, ob das Eingabeobjekt gelöscht werden soll.

BooleanValue removeLine: Gibt an, ob die Linien des Eingabeobjekts gelöscht werden sollen.

BooleanValue createObject: Gibt an, ob aus den Ausgabelinien ein Objekt erzeugt werden soll.

BooleanValue addPoints: Gibt an, ob die neu erzeugten Punkte dem Objekt hinzugefügt werden sollen.

LongValue oTyp: Geometrietyp der Objektlinien, 1=Definition, 2=Ausgestaltung

ObjectValue &in: Enthält die ausgewerte Linie.

ObjectValue &inp1: Enthält den Anfangspunkt der ausgewerte Linie.

ObjectValue &inp2: Enthält den Endpunkt der ausgewerten Linie.

ArrayValue &outPoints: Enthält die vier Ausgabepunkte.

ArrayValue &outLines: Enthält die vier Ausgabelinien.

ObjectValue &outObject: Enthält das Ausgabeobjekt.

LongValue &count: Die Anzahl der verarbeiteten Linien.

LongValue &pCount: Aktuelle Anzahl der erzeugten Punkte.

LongValue &lCount: Aktuelle Anzahl der erzeugten Linien.

LongValue &oCount: Aktuelle Anzahl der erzeugten Objekte.

LongValue &dlCount: Aktuelle Anzahl der gelöschten Eingabeobjekte.

LongValue &dlCount: Aktuelle Anzahl der gelöschten Eingabelinien.

Die Funktionen werden auf jedes neu erzeugte Polygon angewendet.

new Factory PolygonToRectanglePolygonFactory
   filter = new Filter ArtFilter
      range = 2004-2005
   end
   dist = 1.0
   createObject = true
   finally   = @Log("&oCount Polygone in Rechtecke umgewandelt")
end

ReaderFactory

Reader

Die ReaderFactory ist eine der einfachsten Factories. Sie liest alle gefilterten Daten und stellt diese in der Variablen den Funktionen zur Verfügung. Trotz der Einfachheit de ReaderFactory können mit der richtigen Kombination aus Filter, Grabber und Funktionen viele Aufgaben gelöst werden.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Enthält das gelesene Element.

LongValue &count: Die aktuelle Anzahl der gelesenen Elemente.

Auf jedes gelesene Element.

new Factory ReaderFactory
   grabber = new Grabber LinePointGrabber
      filter = new Filter ArtFilter
         range = 2000-2020
      end
   end
   filter = new Filter ArtFilter
      mode = not
      range = 452-457
   end
   function = @Log(WARNING, &in, @Concat("Punktart ", @Get(&in, art), " ist an den Linien 2000-2020 nicht erlaubt"))
   finally  = @Log("&count fehlerhafte Punkte gefunden")
end

ReferenzTester

Reader, MultiExecute

Der ReferenzTester prüft, ob auf die gelesenen Elemente noch Verweise aus anderen Elementen existieren. So können Linien auf den Anfangs- und Endpunkt der Linie Verweisen. Objekte verweisen auf die Elemente des Objektinhalts. Nur wenn keine Referenzen mehr vorhanden sind, können Elemente gefahrlos gelöscht werden.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung Der Filter gibt die zu prüfenden Elemente an.

ObjectValue containers: Es wird ein ObjektValue vom Typ Filter erwartet. Der Filter gibt die Elemente an, deren Referenzen geprüft werden sollen.

ObjectValue &in: Enthält das gelesene Element.

LongValue &isRef: Gibt an, ob das Eingabeelement referenziert wurde.

LongValue &rCount: Gesamtanzahl der referenzierten Elemente.

LongValue &fCount: Gesamtanzahl der unreferenzierten Elemente.

LongValue &count: Die aktuelle Anzahl der gelesenen Elemente.

Auf jedes gelesene Element.

new Factory ReferenzTester
   name = "FreieElementeMarkierer"
   filter = new Filter ElementIdFilter
      id = pk
   end
   function = @If(@Not(&isRef), @Set(&in, "ebene", 9999))
   finally  = @Log("&fCount Punkte von &count Punkten markiert")
end

TextConsitencyTester

Reader

Der TextConsitencyTester prüft die Geograf-interne Konsitenz der Daten. Er spürt Texte ohne Inhalt auf.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Enthält das gelesenen TextElement.

LongValue &count: Die aktuelle Anzahl der gelesenen Elemente.

LongValue &eCount: Die aktuelle Anzahl der aufgetretenen Fehler.

Auf jedes fehlerhafte Textelement.

"leere Textzeile im Text"

"leere Textformel im Text"

"Text ohne Inhalt"

new Factory TextConsitencyTester
   name = "TextConsitencyTester"
   spec = "Prüft die Datenlogik der Texte"
   finally = @If(@Gt(&eCount, 0), @Log(@Concat(&eCount, " Fehler in ", &count, " Texten aufgetreten > Geograf-Datenprüfung durchführen")))
end

TextContentReader

Reader

Der TextContentReader stellt die Textinhaltselemente zur Verfügung.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

ObjectValue &in: Enthält das gelesenen TextElement TE.

ObjectValue &cont: Enthält das gelesenen TextInhaltsElement TA, TX oder TF.

StringValue &typ: Enthält den Typ des gelesenen TextInhaltsElements ['TA', 'TX' oder 'TF'].

LongValue &count: Die aktuelle Anzahl der gelesenen Texte.

LongValue &cCount: Die aktuelle Anzahl der gelesenen InhaltsElemente pro TextElement.

LongValue &tCount: Die aktuelle Gesamtanzahl der gelesenen InhaltsElemente.

Auf jedes fehlerhafte TextInhaltsElement.

new Factory TextContentReader
   name = "TextContentReader"
   spec = "Liest die Textinhalte"
   function = @If(@Equals(@Get(&cont, "text"), "Gebäude"), @Log("Text mit Inhalt 'Gebäude'"))
end

TextReferenzGeometryCreator

Reader, Creator

Der TextReferenzGeometryCreator erzeugt aus dem Bezug eines Textes eine originäre Geograf-Linie.

ObjectValue grabber: Beschreibung

ObjectValue filter: Beschreibung

BooleanValue nullLines: Wenn kein Textbezug besteht, erzeugt die Factory standardmäßig keine Linie. Wenn nullLines auf true gesetzt wird, erzeugt die Factory eine Linie mit der Länge 0. Die Koordinaten der Linienpunkte können mit Funktionen gesetzt werden.

ObjectValue &in: Enthält den gelesenen Text.

ObjectValue &out: Enthält die erzeugte Linie.

ObjectValue &outPa: Enthält den Anfangspunkt der erzeugten Linie.

ObjectValue &outPe: Enthält den Endpunkt der erzeugten Linie.

LongValue &count: Die aktuelle Anzahl der erzeugten Linien.

Auf jede erzeugte Linie.

Die Factory erzeugt Bezugslinien und setzt die Art und Ebene des Textes ein.

new Factory TextReferenzGeometryCreator
   name = "BezuglinienErzeuger"
   spec = "Erzeugt aus den Bezugspfeilen eine Linie"
   function = @Set(&out, art, @Get(in, art), ebene, @Get(&in, ebene))
   finally   = @Log("&count Bezugspfeile erzeugt")
end

VoidFactory

Calculator

Die VoidFactory verarbeitet keine Grafikelemente. Sie dient nur dem Starten der enthaltenen Funktionen.

keine

keine

Einmalig.

new Factory VoidFactory
   name = "RechnungsSchreiber"
   function = @WriteLine($rechnung, "*********************************************")
   function = @WriteLine($rechnung, "* Rechnung Leitungen")
   function = @WriteLine($rechnung, "*********************************************")
   function = @While(@HasMore($positionen), @WriteLine($rechnung, @Next($positionen)))
end

WhileFactory

Die WhileFactory kann eine oder mehrere Factories in einer Schleife mehrfach starten. Sie hält eine Variable 'while', die beim Start auf 'true' gesetzt ist. Die WhileFactory führt solange die Schleife aus, bis die 'while'-Variable auf 'false' gesetzt wird. Die enthaltenen Factories haben Zugriff auf die 'while'-Variable über den Namen der WhileFactory, im Beispiel: "ObjektIterator.while"

ObjectValue factory: Eine Factory, die solange gestartet wird, bis das Abbruchkriterium erfüllt ist.

keine

new Factory WhileFactory
   name = "ObjektIterator"
   spec = "Überträgt das Sachdatum 'Strassenschlüssel' auf alle anderen Nebenleitungen"
   factory = new Factory PolygonTester
      name = "ObjektdatenGrabber"
      filter = new Filter ArtFilter
         range = 2310-2312
      end
      initiate = @Store(&aCount, 0)
      function = @If(@ExistData(&in, 42), @Break())
      function = @Store(&str, 0, &str1, 0, &str2, 0)
      function = @If(@ExistData(&inp1, 42), @Store(&str1, @ArrayValue(@GetData(&inp1, 42), 0)))
      function = @If(@ExistData(&inp2, 42), @Store(&str2, @ArrayValue(@GetData(&inp2, 42), 0)))
      function = @If(@Gt(&str1, 0), @Store(&str, &str1))
      function = @If(@Gt(&str2, 0), @Store(&str, &str2))
      function = @If(@Gt(&str, 0), @SetData(&in, &str, 42), \
		@ForArray(&inPoints, &inp, @If(@Not(@ExistData(&inp, 42)), @SetData(&inp, &str, 42))), @Incr(&aCount))
      finally  = @Store(&ObjektIterator.while, @Gt(&aCount, 0))
   end
end

GGMan © 2009, Jörg Schröder, WWW: GeoCalc - Softwareentwicklung Jörg Schröder, Mail: info@geocalc.de
Impressum und Hinweise: Impressum
weitere Informationen bei: Vermessungsbüro M. Wolf - J. Schröder