Solved

Vector Tolerance works differently for Matcher and ChangeDetector?


Badge +1

I am working to compare the geometry of two datasets and I am specifically interested in doing so with Vector Tolerance. For some testing purposes I have tried two different transformers to do so, namely the ChangeDetector and the Matcher. I added them in the same workspace with the same input data. For both I only checked the geometry (not the attributes), with the settings

  • Match Geometry: 2D
  • Lenient Geometry Matching: No
  • Check Coordinate Systems: No
  • Vector Tolerance: the same user parameter, e.g. set at 0.5 or 0.1. Always the same though.

When looking at the documentation the vector tolerance seems to have to work the same for both transformers (https://docs.safe.com/fme/html/FME-Form-Documentation/FME-Transformers/Transformers/changedetector.htm & https://docs.safe.com/fme/html/FME-Form-Documentation/FME-Transformers/Transformers/matcher.htm).

When running I noticed however that the output was different. I was expecting that my Matcher SingleMatched output port would give the same amount of feature as my ChangeDetector Unchanged port, since the input data and the settings were the same. This was not the case.

I experienced this in FME version 2022.2.5 build 22795. Unfortunately I am not allowed to share the data I used, but I am sure this could be reproduced with other datasets that are of similar geometry but not always matching.

Do these two transformers use a different implementation of the vector tolerance? And if so; where can I find clear documentation of it?

icon

Best answer by jcvanlinge 12 June 2024, 09:07

View original

5 replies

Userlevel 5
Badge +24

Is the matcher reporting more or less (matches/unchanged) than the changedetector?

Are you getting the same results if the vector tolerance is set to 0?

Badge +1

I found the answer to my question.

My input was coming from two sources, let's call them the original and revised (inspired by the changedetector).

The ChangeDetector has two input ports; original and revised. It seems to specifically try to match my original to my revised. If there are multiple matches between original and revised, it will choose one (arbitrary pair I believe) and the others will be compared against the remaining unmatched features.

The Matcher works different in two ways that I found:

  1. When matching, one single feature can have multiple matches and therefore be returned multiple times as a matching pair. I do still expect the singlematched output port to have each of those features that were found with a match to exist only once. So that brings me to my second point;
  2. It only has input port. This means that original and revised will be treated as one big dataset. It will try to match all input features to all other input features. So it will also find internal matched within the original dataset. My dataset had internal matches leading to a different amount of features found with a match compared to the ChangeDetector.

I have not found the chance to create a dataset WITHOUT internal matches. I would like to test it again to see if the results are as expected then.

Badge +1

@liamfez I did try with a vector tolerance of 0, giving dissimilar outputs of singlematched and unchanged. For all tests (with various vector tolerances) the matcher was reporting more matched (and singlematched) outputs than the changedetector (unchanged) was! See my above response with further explanation of my findings and what I believe to be causing this.

Badge +38

I believe your conclusion about the internal matches is correct. When I use a Matcher to check changes I use additional matchers upstream to make sure these are gone.

Userlevel 5
Badge +24

I believe your conclusion about the internal matches is correct. When I use a Matcher to check changes I use additional matchers upstream to make sure these are gone.

I agree with this. That is what I was thinking might be happening.

Reply