I have data for various sites and some sites have been digitised more than once and have overlapping polygons. However, these are not virtually identical polygons. They only partially overlap. I want to find the sites that have overlapping polygons. I tried using SpatialRelator with "Intersect", using the same data as both Requestor and Supplier but it picked up instances where one polygon was actually adjacent to another but probably just overlaps a tiny bit. This resulted in 3700 out of 3900 having more than 1 related candidate which doesn't really shortcut the process. "Contains" wouldn't work because not all overlapping polygons are completely contained.
Hi @tim_wood
you might want to try Matcher. In Matching Options please set Lenient Geometry Matching to Yes and low enough vertex tolerances.
Hi @tim_wood,
I have run into this problem before, and my solution was to use the AreaOnAreaOverlayer on the polygons. Use an AreaCalculator on the output, then a Tester to test for _overlaps > 1 and _area greater that your desired minimum area.
If the polygons have shapes that may result in an overlap being split into several pieces by the overlay, you can refine the process. Use a Counter on the input polygons to give them all a unique id, then create a list of the ids in the overlayer, using the Generate List setting. Between the overlayer and the AreaCalculator, sort the list by the id number with a ListSorter, then use a ListConcatenator to create a single attribute from the list. You now have a consistent id for each part of the polygon overlap. Aggregate these, grouping by the id, into a single multi-area before measuring the area and testing the overlaps.
Depending on your requirements, another possibility could be to use a Bufferer (or GeographicBufferer) with a tiny negative buffer size so as to shrink the polygons slightly before using the SpatialFilter. If the polygons still intersect, you know that they intersect over at least buffer size * 2 units, distance-wise (as opposed to overlapping a certain area, as in the solution suggested by @DaveAtSafe).
Depending on your requirements, another possibility could be to use a Bufferer (or GeographicBufferer) with a tiny negative buffer size so as to shrink the polygons slightly before using the SpatialFilter. If the polygons still intersect, you know that they intersect over at least buffer size * 2 units, distance-wise (as opposed to overlapping a certain area, as in the solution suggested by @DaveAtSafe).
Hi @tim_wood,
I have run into this problem before, and my solution was to use the AreaOnAreaOverlayer on the polygons. Use an AreaCalculator on the output, then a Tester to test for _overlaps > 1 and _area greater that your desired minimum area.
If the polygons have shapes that may result in an overlap being split into several pieces by the overlay, you can refine the process. Use a Counter on the input polygons to give them all a unique id, then create a list of the ids in the overlayer, using the Generate List setting. Between the overlayer and the AreaCalculator, sort the list by the id number with a ListSorter, then use a ListConcatenator to create a single attribute from the list. You now have a consistent id for each part of the polygon overlap. Aggregate these, grouping by the id, into a single multi-area before measuring the area and testing the overlaps.
Use the GeographicBufferer to specify the units for the buffer size, if needed.
Hi @tim_wood
you might want to try Matcher. In Matching Options please set Lenient Geometry Matching to Yes and low enough vertex tolerances.
Use the GeographicBufferer to specify the units for the buffer size, if needed.
I've attached an example of the data I'm working with. These are different types of ground at the site such as grass, hard surface, etc. The issue is that some sites have been digitised twice, but not in the same way. I've removed all the attributes so I can upload the data, but they are not really relevant to this requirement anyway because the main thing is to identify the sites that need to be manually checked and edited by my client. There are some instances where an overlap is permitted, for example if there is a planter on a hard surface there might be a polygon for the planter on top of the hard surface.
example-overlaps.zip
Hi @tim_wood,
I have run into this problem before, and my solution was to use the AreaOnAreaOverlayer on the polygons. Use an AreaCalculator on the output, then a Tester to test for _overlaps > 1 and _area greater that your desired minimum area.
If the polygons have shapes that may result in an overlap being split into several pieces by the overlay, you can refine the process. Use a Counter on the input polygons to give them all a unique id, then create a list of the ids in the overlayer, using the Generate List setting. Between the overlayer and the AreaCalculator, sort the list by the id number with a ListSorter, then use a ListConcatenator to create a single attribute from the list. You now have a consistent id for each part of the polygon overlap. Aggregate these, grouping by the id, into a single multi-area before measuring the area and testing the overlaps.
e.g. you could do something like this if you only wanted to identify features that overlap by more than 80% of their area
calculate-overlap-example.fmwt
Hi @tim_wood,
I am attaching an example workspace for you, with both methods implemented. The more complex method could be extended to test for permitted overlaps. If you add the polygon category to the list created by the overlayer, you could test for allowed combinations like planter/hard surface, and remove these form the output.
Hi @tim_wood,
I have run into this problem before, and my solution was to use the AreaOnAreaOverlayer on the polygons. Use an AreaCalculator on the output, then a Tester to test for _overlaps > 1 and _area greater that your desired minimum area.
If the polygons have shapes that may result in an overlap being split into several pieces by the overlay, you can refine the process. Use a Counter on the input polygons to give them all a unique id, then create a list of the ids in the overlayer, using the Generate List setting. Between the overlayer and the AreaCalculator, sort the list by the id number with a ListSorter, then use a ListConcatenator to create a single attribute from the list. You now have a consistent id for each part of the polygon overlap. Aggregate these, grouping by the id, into a single multi-area before measuring the area and testing the overlaps.
Depending on your requirements, another possibility could be to use a Bufferer (or GeographicBufferer) with a tiny negative buffer size so as to shrink the polygons slightly before using the SpatialFilter. If the polygons still intersect, you know that they intersect over at least buffer size * 2 units, distance-wise (as opposed to overlapping a certain area, as in the solution suggested by @DaveAtSafe).
This was exactly what I needed. Thankyou.
Hello there, is there any way that I may be able to dowload your file: findoverlaps.fmw? It is because I have the same issue right now. I just got so many tiny polygons by using the spatial relator transformer. Thank you.
Hello @zacharylee1204 , I have re-attached Dave's workspace! You should be able to download findoverlaps.fmw now! Kailin.
thank you so much kallinatsafe! :)