Skip to main content
Hi

 

 

i am using the spatial filter to find all adjacent polygons to my chosen polygon. I am using the Touch option but it is also finding all diagonal polygons that only touch my chosen polygon corner to corner. I don't want to keep these polygons though. Is there a way to only get the polygons that are adjacent based on their sides only?

 

 

thanks

 

 
Hi,

 

 

You can use the SpatialRelator with the "Calculate Cardinality of Intersections" option to know detailed condition of the spatial relationship.

 

See the help. (http://docs.safe.com/fme/html/FME_Desktop_Documentation/FME_Desktop_Help.htm#../Subsystems/FME_Transformers/Content/Transformers/spatialrelator.htm)

 

 

Note: In FME 2014, there is a bug on the cardinality calculation. I recommend you to use FME 2015 to do that.

 

 

Takashi
Ok, thanks Takashi.  I will install FME 2015 and give it a try. 

 

However, another thought I had was, what if I bevel the corners of the polygons to prevent them from touching?  Is this possible, and if so, what transformer would I use to do this?
That's a good approach, but there is not a transformer to do that simply.

 

This procedure could be a workaround.

 

1) Create vertex points of the polygon with the Chopper.

 

2) Transform the points into small circles with the Bufferer.

 

3) Clip the original polygon by the small circles to cut out its corners.
You can create bevels by first using a Bufferer with a small negative buffer, say -0.1 and then use OffsetCurveGenerator with a offset of +0.1. (make smaller if you needed)

 

 

 
Though they said they would'nt repair it prior to relaese 2015, they did. In last 2014 patch (i think sp3).

 

 

If u use cardinality you have to test for when only touches by line, you have to test fro card_line>0 AND card_point=0 (only if you only use TOUCHES criteria)

 

 

If the related_candidates_list has more then one element, you have to make more adjustements. (you can either test for more memebers with Ïf exists"etc.)

 

Or you can explode the list first and then use testers.

 

 

Of course you can also coerce one set to lines and use LineOnAreaOverlayer and test for overlaps>0.

 

 
..bevel is not the correct name as those are lines, i ment "continous radius fillets...

 


Thanks for all the answers.  I ended using Gio's advice of  coercign one set to lines and use LineOnAreaOverlayer and testing for overlaps>0.  This seemed to be the simplest and worked perfectly.

Reply