Ich habe viele Linienobjekte. Einige von ihnen sind kleiner als einige Kriterien.
Ich möchte alle Linien oder kleineren Liniensegmente, die kleiner als 1 meter
größere Linien sind, verbinden und dabei die Attribute der größeren Linie beibehalten.
Irgendein Rat?
Ich habe versucht, mit dem ersten Tester die Länge der Linienobjekte zu überprüfen (wenn sie kleiner als 1 m ist), und die übergebene Ausgabe geht an LineJoiner. Tatsächlich passiert jedoch nichts, und Zeilen, die vom Ausgabeport von LineJoiner stammen, haben zuvor keine Attribute als Zeilen (wie sie es haben sollten). Vielleicht kompliziere ich zu viel, aber ich dachte, das wird eine leichte Aufgabe.
Antworten:
Sie können
LineJoiner
Transformator mit Parameter verwendenList Name
. Sie müssen jedoch einige zusätzliche Datenverarbeitungen durchführen:LengthCalculator
diese Option , um Längen zu berechnen.Sorter
Sie diese Option , um Ihre Zeilen nach Länge zu sortieren (numerische Sortierung, absteigend).LineJoiner
diese Option , um Linien zu verbinden. Die größten zuerst (dank Schritt 2). Geben Sie den ParameterList Name
desLineJoiner
Namens für ein neues Listenattribut an.ListIndexer
Listenindex 0 verwenden - um die Attribute der ersten verbundenen Funktion (die größte) aus der Liste abzurufen.So wird es aussehen:
EDIT1:
Um nur <1m Features mit größeren Features verbinden zu können, müssen wir zusätzlich Folgendes verwenden:
Tester
Transformator nach LengthCalculator mit Test:_length < 1
SpatialFilter
(Tests, um Parameter durchzuführen :)TOUCHES
nach dem Tester, um nur die Merkmale zu filtern, die Merkmale <1 m berühren. Führen Sie dann eine Linienverbindung mit <1 m Merkmalen durch. Funktionen, die <1 m nicht berühren, direkt zur Ausgabe (oder zur weiteren Verarbeitung).Modell:
EDIT2:
Wenn Sie eine Linie von <1 m haben, die zwei große berührt, werden alle miteinander verbunden. Wenn ein solcher Fall (<1 m Funktion berührt zwei oder mehr große) in Ihren Daten möglich ist, sollten Sie eine Verarbeitung solcher Fälle hinzufügen. Schauen Sie sich die Parameter
Merge Attributes
und denAttribute Prefix
Transformator anSpatialFilter
. Mit diesen Parametern sollten Sie in der Lage sein, solche Fälle zu erkennen und dann zusätzliche Filterungen durchzuführen.EDIT3:
Lassen Sie uns den Fall lösen, wenn zwei große Linien eine kleine (<1 m) berühren. Wir müssen nur eine der großen Linien nehmen, um an der Verbindung mit der kleinen teilzunehmen.
Um eine solche Filterung durchführen zu können, müssen wir diese beiden großen Merkmale mit einer ID von der kleinen kennzeichnen, die sie berühren. Wie in EDIT2 angegeben, kann dies im
SpatialFilter
Transformator unter Verwendung der ParameterMerge Attributes
und erfolgenAttribute Prefix
.Verwenden Sie dann den Transformator
DuplicateRemover
, um solche doppelten Merkmale (zwei große) zu filtern, und nehmen Sie nur eines davon.Tipp: Versuchen Sie,
Inspector
beim Erstellen Ihres Modells einen Transformator zu verwenden , und zeigen Sie Zwischenergebnisse an, die Ihnen nicht klar sind. Auf diese Weise verstehen Sie besser, wie die einzelnen Transformatoren funktionieren. Experimentieren Sie mit Ihren Daten! :) :)quelle
Sorter
wir Features mit größerer Länge erzwingen, werden zuerstLineJoiner
die Attribute mit dem Index "0" in der Liste angezeigt (siehe ParameterList Name
), und dann können wir sie in die Hauptattribute des Features verschieben (ListIndexer
). Andernfalls können Sie ein Ergebnis erzielen, bei dem die Attribute kleiner Features "dominieren". Sie können keinen Unterschied sehen, falls große Funktionen an erster Stelle stehen, aber ich werde nicht darauf eingehen.