I have lot of line objects. Some of them are smaller than some criteria.
I would like to join all lines or smaller segments of line which are smaller than 1 meter
to bigger lines, keeping the attributes of the bigger line.
Any advice?
I tried to use first Tester to check length of the line objects (if it is smaller than 1 m), and than passed output goes to LineJoiner. But actually nothing happens, and lines which come from output port of LineJoiner do not have attributes as lines before (as they should have it). MAybe I complicate too much, but i thought this will be easy task.
Best Answer
You can use
LineJoiner
transformer with parameterList Name
. But you need to do some additional data processing:LengthCalculator
to calculate lengths.Sorter
to sort your lines by length (numeric sort, descending).LineJoiner
to join lines. The biggest ones first (thanks to step 2). Specify parameterList Name
of theLineJoiner
- some name for new list attribute.ListIndexer
with list index 0 - to get the first joined feature (the biggest one) attributes' from the list.Here is how it will look:
EDIT1:
In order to be able to join only <1m features to bigger ones we need additionally to use:
Tester
transformer after LengthCalculator with test:_length < 1
SpatialFilter
(tests to perform parameter:TOUCHES
) after Tester to filter only that features which touch features <1m. Then perform line joining on them together with <1m features. Features that don't touch <1m, direct to output (or further processing).Model:
EDIT2:
If you have <1m line that touches two big ones then they all will be joined together. If such case (<1m feature touches two or more big ones) is possible in your data then you should add some processing of such cases. Take a look at parameters
Merge Attributes
andAttribute Prefix
of transformerSpatialFilter
. Using these parameters you should be able to detect such cases and then do some additional filtering.EDIT3:
Let's solve the case when you have two big lines touching one small (<1m). We need to take only one of the big lines to participate in joining with small one.
In order to be able to perform such filtering we need to mark these two big features with some id from small one they are touching. As stated in EDIT2, it can be done in
SpatialFilter
transformer using parametersMerge Attributes
andAttribute Prefix
.Then use transformer
DuplicateRemover
to filter such duplicate features (two big) and take only one of them.Hint: try to use
Inspector
transformer during creating your model and view intermediate results in any case that is not clear to you. In such way you will better understand how each of the transformers are working. Experiment with your data! :)