Hi all, I’m validating polygons (DB tables) and currently using GeometryValidator and SpikeRemover in FME. I’m looking for a short, repeatable workflow that reliably flags:
Self‑intersections / bow‑ties
Holes outside shell / overlaps / tiny slivers
Degenerate parts / zero‑area rings
Duplicate vertices/nodes
Questions:
Which transformers & order do you recommend for detect only polygon checks?
Any tips on tolerances (min area/angle) that avoid false positives when paired with SpikeRemover?
If you have a small sample workspace or parameter hints, I’d really appreciate it. Thanks! Sahan
Best answer by crystalatsafe
Hi @sahan969
I would recommend:
GeometryFilter with "Area" selected and only feed the "Area" output port.
This would be a first pass of filtering, allowing you to separate out areas (polygons) from the other geometry types.
For the GeometryValidator, a good first step to identify any issues is to check your settings for issue detection, as you have described AND set Attempt Repair to No.
If you are only wanting to detect issues, then using the SpikeRemover might not be the best approach as this will alter your data.
Both "tiny slivers" and "spikes" might not be things that the GeometryValidator will flag.
If there are sliver areas that are very small you may need to use an AreaCalculator, and then add a Tester to re-route polygons below a set limit area (or a StatisticsCalculator, and then filter out all areas smaller than a given fraction of the median area of a feature in the dataset, for example.)
If you wanted to flag potential issues only, you could pipe the SpikeRemover's 'Removed' output to a PointOnAreaOverlayer and overlay those spike points on the input polygons to get a sense of how many input features are affected by what combination of the SpikeRemover arguments.
If you looking at a set of areas that's meant to be a contiguous coverage, but features don't quite line up you could use the AreaGapAndOverlapCleaner.
We have a few tutorials on geometry validation that you may find helpful:
GeometryFilter with "Area" selected and only feed the "Area" output port.
This would be a first pass of filtering, allowing you to separate out areas (polygons) from the other geometry types.
For the GeometryValidator, a good first step to identify any issues is to check your settings for issue detection, as you have described AND set Attempt Repair to No.
If you are only wanting to detect issues, then using the SpikeRemover might not be the best approach as this will alter your data.
Both "tiny slivers" and "spikes" might not be things that the GeometryValidator will flag.
If there are sliver areas that are very small you may need to use an AreaCalculator, and then add a Tester to re-route polygons below a set limit area (or a StatisticsCalculator, and then filter out all areas smaller than a given fraction of the median area of a feature in the dataset, for example.)
If you wanted to flag potential issues only, you could pipe the SpikeRemover's 'Removed' output to a PointOnAreaOverlayer and overlay those spike points on the input polygons to get a sense of how many input features are affected by what combination of the SpikeRemover arguments.
If you looking at a set of areas that's meant to be a contiguous coverage, but features don't quite line up you could use the AreaGapAndOverlapCleaner.
We have a few tutorials on geometry validation that you may find helpful: