Hi, I’ve got two polygon datasets A and B, and I’d like to identify which polygons from dataset B that touch polygons from dataset A, but only edge to edge contact count as touch. How can I get the ideal result or exclude vertex touches?
Hi
I think you could use the chopper to generate verticies. Then buffer. Then use buffer to clip the original set of polygons.
Then run the relate with edge. So you can use the verticies to Cut out the portion of the polygon that touches at one point (verticy). With that removed, the remainder will be edge.
Hope that helps.
Hi
Alternatively, if you set Yes to the Calculate Cardinality of Intersections parameter in SpatialRelator, the resulting features will have these list members which indicate the number of intersections by their shape - point, line, and area.
- _relationships{}.card_point
- _relstionships{}.card_line
- _relationships{}.card_area

After exploding the list with ListExploder, you can then filter them by the condition 0 < card_line
to select B (Supplier) features that share a boundary line with an A (Requestor) feature.
Oh that is a much more elegant solution
You can also use a spatial predicate in the Spatial Filter to differentiate between touch at a point and share an edge

Always learning. I love it. Thanks

+

One question two things I learned. Thank you for sharing.
Hi
Alternatively, if you set Yes to the Calculate Cardinality of Intersections parameter in SpatialRelator, the resulting features will have these list members which indicate the number of intersections by their shape - point, line, and area.
- _relationships{}.card_point
- _relstionships{}.card_line
- _relationships{}.card_area

After exploding the list with ListExploder, you can then filter them by the condition 0 < card_line
to select B (Supplier) features that share a boundary line with an A (Requestor) feature.
It works! And is it possible to set tolerance on this paramerter, some polygons they do share a boundary line but card_line ouput 0 while card_point outputting 1.
You can also use a spatial predicate in the Spatial Filter to differentiate between touch at a point and share an edge

I see, but can I set a tolerance on this one?
There is no option to set tolerance for determining spatial relations with SpatialRelator or SpatialFilter. If there could be tiny gaps or overlaps between adjacent polygons and you would like to ignore them when determining spatial relations, consider using an appropriate transformer - e.g. Snapper (Snapping Type: Segment Snapping) or AreaGapAndOverlapCleaner beforehand to resolve the gaps and overlaps.