Skip to main content
Question

Spatial filter Touch- no diagonals

  • February 2, 2015
  • 7 replies
  • 26 views

Forum|alt.badge.img+1
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

 

 

7 replies

takashi
Contributor
Forum|alt.badge.img+19
  • Contributor
  • February 2, 2015
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

Forum|alt.badge.img+1
  • Author
  • February 2, 2015
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?

takashi
Contributor
Forum|alt.badge.img+19
  • Contributor
  • February 2, 2015
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.

gio
Contributor
Forum|alt.badge.img+15
  • Contributor
  • February 2, 2015
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)

 

 

 

gio
Contributor
Forum|alt.badge.img+15
  • Contributor
  • February 2, 2015
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.

 

 

gio
Contributor
Forum|alt.badge.img+15
  • Contributor
  • February 2, 2015
..bevel is not the correct name as those are lines, i ment "continous radius fillets...

 


Forum|alt.badge.img+1
  • Author
  • February 4, 2015
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


Cookie policy

We use cookies to enhance and personalize your experience. If you accept you agree to our full cookie policy. Learn more about our cookies.

 
Cookie settings