Solved

Filter out lines


Userlevel 1
Badge +5

Hi, This is probably a really simple question. Is there a way to filter out lines which have some attributes in common? For example, i want alle lines who has the same "eindkoppelpunt" and where the attribute is the same, without giving the specific value of the attributes. Is this clear?.

icon

Best answer by david_r 16 March 2017, 15:43

View original

19 replies

Userlevel 4

Have you looked at the Matcher?

Userlevel 1
Badge +5

Have you looked at the Matcher?

thx, that's the one i was searching!

 

 

Badge +1

Can I ask what is "eindkoppelpunt"? It sounds like endpoint to me...

Userlevel 1
Badge +5

It's an endpoint but at the same time it's also an startpoint.

Badge +16

Can I ask what is "eindkoppelpunt"? It sounds like endpoint to me...

Google says: end coupling point which is quite correct...

 

 

Userlevel 1
Badge +5

I think the matcher doesn't do exactly what i want. If i have for example 3 different lines with the same endpoint but with 2 times the same "EIG" and 1 different "EIG". The matcher takes the two lines with the same EIG trough the "matched" but if one of the attributes of EIG doesn't match, i don't want that it's a match. I don't know if i'm making any sense :-)

Badge +1

Then I don't think a Matcher will be enough, since it evaluates entire geometry (not just start/endpoints). If you have a case described in picture bellow.

I believe that first you need to ID the lines (Counter), extract all start and endpoint (Snipper will do the trick), use Matcher on points (with attribute of your choice as well) and use Feature Merger (requestor=Lines, Supplier= Points) to see which lines (with according start/endpoints) are matched (requestor and supplier attribute is _count).

Hope it helps

Badge +16

Have a look at the CRC calculator its my favourite transformer for change detection.

Badge +1

I think the matcher doesn't do exactly what i want. If i have for example 3 different lines with the same endpoint but with 2 times the same "EIG" and 1 different "EIG". The matcher takes the two lines with the same EIG trough the "matched" but if one of the attributes of EIG doesn't match, i don't want that it's a match. I don't know if i'm making any sense :-)

So when 2 or more EIGs match you want to check if all attributes match? Use another Matcher with all attributes checked (or FULL option).
Userlevel 1
Badge +5

naamloos.pngcapture.png

I have to give the "koppelpunt" an owner (EIG). I'm only using the lines for their attibutes. If there is only one line that ends on that point then it's easy but in the example ther are 3 lines that ends there. If that happens then i have to determine which one i'm gonna gona use bij giving an order on the attribute EIG, f.e. If there is an EIG = AQF that has priority, second in line is EIG = Gemeente, then EIG = Privé etc...

The lines have an attribute "Eindkoppelpunt" that is the same as the ID of the Koppelpunt.

I have to do the same for the beginpoints of each line, so each koppelpunt has an EIG from the "Beginkoppelpunt" and from the "Eindkoppelpunt".

Badge +16

naamloos.pngcapture.png

I have to give the "koppelpunt" an owner (EIG). I'm only using the lines for their attibutes. If there is only one line that ends on that point then it's easy but in the example ther are 3 lines that ends there. If that happens then i have to determine which one i'm gonna gona use bij giving an order on the attribute EIG, f.e. If there is an EIG = AQF that has priority, second in line is EIG = Gemeente, then EIG = Privé etc...

The lines have an attribute "Eindkoppelpunt" that is the same as the ID of the Koppelpunt.

I have to do the same for the beginpoints of each line, so each koppelpunt has an EIG from the "Beginkoppelpunt" and from the "Eindkoppelpunt".

sounds familiar, dealing with BGT bronhouders?

 

 

Badge +1

I think I understand.

1. Get Eindkoppelpunt: use Splitter (by Vertex: starting and ending vertex -1) this will give you endpoints

2. Use Matcher on Eindkoppelpunt and koppelpunt.

3. From matched port separate Eindkoppelpunt and koppelpunt using AttributeFilter (by fme_feature_type)

4. Use Sorter of endpoints. Sort alphabetical all Eindkoppelpunt (by EIG)

5. Use SpatialFilter. You'll be checking if koppelpunt is same as Eindkoppelpunt (Filter: Eindkoppelpunt, Candidate: koppelpunt, Operation: Equals)

Passed port will give you all koppelpunt with attributes of first Eindkoppelpunt (feel free to remove all but EIG with AttributeRemover).

Repeat the same procedure for Beginkoppelpunt (in Splitter indices are 0)

Hope it helps

Userlevel 1
Badge +5

I think I understand.

1. Get Eindkoppelpunt: use Splitter (by Vertex: starting and ending vertex -1) this will give you endpoints

2. Use Matcher on Eindkoppelpunt and koppelpunt.

3. From matched port separate Eindkoppelpunt and koppelpunt using AttributeFilter (by fme_feature_type)

4. Use Sorter of endpoints. Sort alphabetical all Eindkoppelpunt (by EIG)

5. Use SpatialFilter. You'll be checking if koppelpunt is same as Eindkoppelpunt (Filter: Eindkoppelpunt, Candidate: koppelpunt, Operation: Equals)

Passed port will give you all koppelpunt with attributes of first Eindkoppelpunt (feel free to remove all but EIG with AttributeRemover).

Repeat the same procedure for Beginkoppelpunt (in Splitter indices are 0)

Hope it helps

Unfortunately, this does not help for two reasons. The first reason is that the "koppelpunten" are not perfect caught at the lines. I have already applied a few snappers to improve this but when I use the "snipper transformer on the lines" he makes extra points so the spatial filter gives troubles. The second reason is that if I sort EIG = gemeente that he may not always puts AQF on top because EIG = actually the code of the municipality.

 

I don't really also understand what you ment with stap 3.

 

 

Thanks for your suggestion.

 

 

Badge +1
Unfortunately, this does not help for two reasons. The first reason is that the "koppelpunten" are not perfect caught at the lines. I have already applied a few snappers to improve this but when I use the "snipper transformer on the lines" he makes extra points so the spatial filter gives troubles. The second reason is that if I sort EIG = gemeente that he may not always puts AQF on top because EIG = actually the code of the municipality.

 

I don't really also understand what you ment with stap 3.

 

 

Thanks for your suggestion.

 

 

Interesting. Can you provide some sample data so we can play around a bit?

 

 

Thanks

 

 

Userlevel 1
Badge +5

Hi, so give me a way so the result is that for every "koppelpunt" i have the attribute from the EIG from the line that begins with that "koppelpunt" (eig1) and the EIG (eig2) from the line that ends with that koppelpunt. If theres more than one line that end or begins, i want to choose or i want alle the attributes from all the lines on that 1 koppelpunt :-)

Stupid question but how can i provide you sample data ( i have shapefiles)

Badge +16

Hi, so give me a way so the result is that for every "koppelpunt" i have the attribute from the EIG from the line that begins with that "koppelpunt" (eig1) and the EIG (eig2) from the line that ends with that koppelpunt. If theres more than one line that end or begins, i want to choose or i want alle the attributes from all the lines on that 1 koppelpunt :-)

Stupid question but how can i provide you sample data ( i have shapefiles)

just zip them and ad them to the message as a file via the message menu

 

 

Userlevel 1
Badge +5
just zip them and ad them to the message as a file via the message menu

 

 

versie8.zip

 

 

Badge +1

Hi, @nath

I solved your problem. In attachment there's fmw that will do the trick.

By default it gives you alphabetically first EIG. If there are multiple EIGs they are stored in list which is concatenated in attribute _concatenated_EIG. This attribute gives you all EIGs that were matched.

Since you have all data in attributes and you need to merge attributes from one feature to another I used FeatureMerger (no necessity of using Matcher or SpatialFilter). And you've allready said that kokoppelpunts.fmwppelpunten aren't perfectly caught at the lines :)

Hope it helps,

Želimir

Userlevel 1
Badge +5

Hi, @nath

I solved your problem. In attachment there's fmw that will do the trick.

By default it gives you alphabetically first EIG. If there are multiple EIGs they are stored in list which is concatenated in attribute _concatenated_EIG. This attribute gives you all EIGs that were matched.

Since you have all data in attributes and you need to merge attributes from one feature to another I used FeatureMerger (no necessity of using Matcher or SpatialFilter). And you've allready said that kokoppelpunts.fmwppelpunten aren't perfectly caught at the lines :)

Hope it helps,

Želimir

THANK YOU!

 

I think this is exactly what i needed.

 

 

Reply