The JCS Polygon Matcher uses a combination of six shape-matching criteria to find matches between polygons (see Figure 1 below). The weight given to each criterion is adjustable.

Figure 1 – The six shape-matching criteria
The criteria are described in Table 1 below.
![]() |
Centroid Distance. The distance between the centroids of the two shapes. The closer the centroids, the higher the score. |
![]() |
Hausdorff Distance. The length of the greatest local deviation between the two shapes. The lower the deviation, the higher the score. |
![]() |
Symmetric Difference. The areas found in one shape only. The more the two shapes overlap, the lower the symmetric difference, and the higher the score. |
![]() |
Symmetric Difference (Centroids Aligned). Same as above, but before the symmetric difference is computed, the shapes are arranged so that their centroids coincide. |
![]() |
Compactness. The difference between each shape's compactness, which is the area-to-perimeter ratio. The more similar the compactness of the two shapes, the higher the score. |
![]() |
Angle Histogram. The difference between each shape's angle histogram, which is a histogram of the angles that the segments make with the positive x-axis, weighted by segment length. The more similar the histograms for the two shapes, the higher the score. |
The next sections will present two cases: matching lakes and matching parcels of land.
The input data is two datasets for the lakes of central Vancouver Island (see Figure 2 below). One dataset is from the 1:20K TRIM Watershed Atlas; the other, from the 1:50K BC Watershed Atlas. The aim is to produce a list of matches between the lakes in the two datasets.
The lower half of the JCS Polygon Matcher is a chart displaying the scores for each of the matches. Clicking on the higher scores will zoom to the better matches; the lower scores, to the poorer matches (see Figure 3 below).
0.97 |
![]() 0.90 |
![]() 0.80 |
![]() 0.70 |
![]() 0.60 |
![]() 0.50 |
![]() 0.42 |
![]() 0.32 |
Ideally the chart will have two distinct regions: matches and non-matches. Figure 4 below shows that the score declines steadily until about 0.53, at which point it degrades rapidly.

Figure 4 – The score chart
It is reasonable to hypothesize that the matches between 0.53 and 1 are true matches (spot checks like those in Figure 3 will help to confirm this). On the other hand, the matches below 0.53 should each be checked manually.
The input data is two datasets representing forest resource tenures in southern British Columbia. There is a need to match single parcels (polygons) in one dataset to one or more parcels in the other. Thus, we will be using the JCS Polygon Matcher's unioning feature to try combinations of adjacent parcels in Layer A (see the Unioning tab in Figure 5 below).
Figure 6 below shows the matches at various points along the curve.
![]() 0.98 |
![]() 0.90 |
![]() 0.80 |
![]() 0.71 |
![]() 0.60 |
![]() 0.50 |
![]() 0.40 |
![]() 0.30 |
Note that there the chart in Figure 5 above seems to have three distinct regions: a gradual slope from 1.0 to 0.8, a sharp drop from 0.8 to 0.6, then a moderately steep slope from 0.6 onwards. Hypothesis: 1.0 – 0.8 contains true matches, 0.8 – 0.6 contains partial matches, and 0.6 – 0.0 contains false matches. A partial match is a match between one feature and part of another feature (see the 0.71 match in Figure 6 above). The spot checks in Figure 6 are an initial indication that our hypothesis is correct.
Also of note is the unioning of adjacent features to achieve better matches. An example is shown in Figure 7 below.
The JCS Polygon Matcher uses a weighted combination of six shape-matching criteria to assign scores to matches between polygons. A slope change in the score chart is a possible indicator of the transition between true and false matches, potentially eliminating the need for manual checking other than random spot checks.