WL#7541: GIS MBR spatial operations enhancement

Status: Complete   —   Priority: Medium

MBR operations for GIS is very essential, existing GIS MBR
support is mostly OK, although there are things that can be improved, issues
I've found currently including:

1. Some mbr functions are wired to the wrong Item_func, including 'mbrtouches', and 'touches', which are implemented not using a geometry's mbr
but using the geometry itself.

2. Fix mbrwithin/mbrtouches, they didn't return correct results when one or both
mbrs degrade to a point/line segment. 

3. We need a few new MBR relation check functions.
F-1: MBRTOUCHES function should do the 'touches' spatial relation
checking using two geometries' MBR boxes, not using the geometry itself.

F-2: Fix mbrtouches and mbrwithin bugs: they returned wrong results when one or both of the mbr arguments degrade to a point or horizontal/vertical line segment. 

Fix the bugs according to OGC definition for touches and within. 
With changes of this WL applied, when a point lies on the boundary of a line segment or polygon, or when a line segment lies totally on the boundary of a polygon, it's not considered 'within' but 'touches' instead; and two identical points will not be considered 'touches' with changes of this WL applied.

F-3: Add 'mbrequals' as another name for 'mbrequal', because we have 'equals'
and 'st_equals', but 'mbrequal' doesn't follow the same naming convention. And also deprecate mbrequal.

F-4: Add 'mbrcoveredby', and 'mbrcovers' 
GEOM_1 MBRCOVERS GEOM_2 if any only if the MBR of GEOM_2 lies within or on the boarder of the MBR of GEOM_1; The DE-9IM definition for COVERS is:


and the two checks are opposite:


F-5: MBRCOVERS and MBRCOVEREDBY MUST return NULL if either argument is NULL or an empty geometry;

F-6: MBRCOVERS and MBRCOVEREDBY MUST NOT return NULL if neither arguments are NULL or empty geometry.

F-7: MBRCOVERS and MBRCOVEREDBY MAY allow invalid geometry arguments, the invalidity is according to OGC specifications.

F-8: MBRCOVERS and MBRCOVEREDBY SHOULD report ER_GIS_INVALID_DATA if either arguments are not valid GEOMETRY byte string. and they SHOULD not report any other error.
Changes to the interface specification:

I-1: No new files.

I-2: New syntax: Two new functions:

            = MBRCOVEREDBY(, );

            = MBRCOVERS(, );

Here the  is a byte string of GEOMETRY (SRID+WKB) format.

I-3: No new commands.

I-4: No new tools.

I-5: No impact on existing functionality.
1. Wire up mbrtouches to Item_func_spatial_mbr_rel to call MBR::touches.

2. Add creators for the two new GIS functions of F-4.
3. Implement the two new GIS functions according to F-4 ~ F-8.

4. Fix bugs of MBR::within and MBR::touches, basically they need to consider degraded polygon --- a point, or a vertical/horizontal line segment.