FAQ: With Oracle Spatial, what does TOLERANCE mean?


With Oracle Spatial, what does TOLERANCE mean?


A tolerance for each dimension (X, Y, Z, or M) for each Oracle Spatial table is specified in the Oracle Spatial metadata table ALL_SDO_GEOM_METADATA in the item DIMINFO. The tolerance is a value used by some Oracle Spatial functions to determine whether two ordinate values in the same dimension are equivalent. For example, in functions that determine whether two line segments share the same endpoint, the ordinate values of the endpoints of the two line segments are compared. Rather than checking for equal coordinate values, a range check is done to determine equivalency. Conceptually, the comparison of two two-dimensional endpoints ((x1, y1) and (x2, y2)) looks like this:

1. If (x1 <= (x2 + xTolerance)) and (x1 >= (x2 - xTolerance)), then x1 is equivalent to x2.

2. If (y1 <= (y2 + yTolerance)) and (y1 >= (y2 - yTolerance)), then y1 is equivalent to y2.

3. If x1 is equivalent to x2 and y1 is equivalent to y2, then the points (x1, y1) and (x2, y2) are equivalent in Oracle Spatial geometry functions.

To compare data exactly to the level of your data's accuracy, specify .000005 where the number of zeroes after the decimal point and before the digit 5 is the same as the number of digits of accuracy of your data.

The tolerance value is metadata. It is not used to scale ordinate values before storing them in Oracle and so is dissimilar to ArcSDE Binary storage's precision (x,y scale) value. Tolerance values do not impact the storage precision of ordinate data in Oracle Spatial tables. It only defines how precisely two ordinate values in the same dimension are compared.

For more information, please refer to the "Oracle Spatial Users Guide and Reference".