GGMan - Testen und Manipulieren von Geograf-Daten
Skript Factories Filter Grabber Funktionen Macros Utils Files GUI Typen Elemente
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.
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
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.
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.
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
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.
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.
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
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
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
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
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
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
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
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
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
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
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
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
Diese Factory liest alle Texte und prüft, ob diese Beschriftung sind.
ObjectValue grabber: Beschreibung
ObjectValue filter: Beschreibung
Der Filter fragt nach dem Text, der Beschriftung sein soll.
ObjectValue &in: Der einzelne Text
ObjectValue &obj: Das beschriftete Element
LongValue &count: Die aktuelle Anzahl der Texte
LongValue &lCount: Die aktuelle Anzahl der Beschriftungstexte
LongValue &eCount: Die aktuelle Anzahl der Texte, die keine Beschriftung sind
auf jeden Text
Folgende Factory gibt eine Fehlermeldung aus, wenn ein Text mit der Art 600 keine Beschriftung.
new Factory LabelTester filter = new Filter ArtFilter list = 600 end finally = @Log("&count Texte getestet") end
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
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
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
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
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
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
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
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
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
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
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
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
Der ObjectTester ist dient dem allgemeinen Test der Objekte.
ObjectValue grabber: Beschreibung
ObjectValue filter: Beschreibung
BooleanValue repair: Gibt an, ob leere Referenzen gelöscht 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 &eCount: Die aktuelle Anzahl fehlerhaften 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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