How the CROSSES() function works in Mariadb?

The CROSSES() function is a spatial function that returns 1 if two geometries cross each other, 0 if they do not, or NULL if either geometry is NULL or invalid.

Posted on

The CROSSES() function is a spatial function that returns 1 if two geometries cross each other, 0 if they do not, or NULL if either geometry is NULL or invalid. The function can be used to test the spatial relationship between two geometries, such as lines, polygons, or multipoints.

Syntax

The syntax of the CROSSES() function is as follows:

CROSSES(g1, g2)

The function takes two arguments, g1 and g2, which are the geometries to be compared. The arguments can be strings or expressions that evaluate to strings. The function returns an integer value that represents the result of the comparison.

Examples

Example 1: Testing if two lines cross each other

The following example uses the CROSSES() function to test if two lines cross each other. The lines are defined by four points: (0, 0), (2, 2), (0, 2), and (2, 0).

SELECT CROSSES(ST_GeomFromText('LINESTRING(0 0,2 2)'), ST_GeomFromText('LINESTRING(0 2,2 0)'));

The output is 1.

The output shows that the two lines cross each other, as expected.

Example 2: Testing if a line and a polygon cross each other

The following example uses the CROSSES() function to test if a line and a polygon cross each other. The line is defined by two points: (0, 0) and (2, 2). The polygon is defined by four points: (0, 1), (1, 2), (2, 1), and (1, 0).

SELECT CROSSES(ST_GeomFromText('LINESTRING(0 0,2 2)'), ST_GeomFromText('POLYGON((0 1,1 2,2 1,1 0,0 1))'));

The output is 1.

The output shows that the line and the polygon cross each other, as expected.

Example 3: Testing if two polygons cross each other

The following example uses the CROSSES() function to test if two polygons cross each other. The polygons are defined by eight points: (0, 0), (0, 2), (1, 1), (2, 0), (2, 2), (3, 1), (4, 2), and (4, 0).

SELECT CROSSES(ST_GeomFromText('POLYGON((0 0,0 2,1 1,2 0,0 0))'), ST_GeomFromText('POLYGON((2 2,3 1,4 2,4 0,2 2))'));

The output is: 0.

The output shows that the two polygons do not cross each other, as expected. They only touch at one point, which is not considered as crossing.

Example 4: Testing if two multipoints cross each other

The following example uses the CROSSES() function to test if two multipoints cross each other. The multipoints are defined by five points: (0, 0), (0, 2), (1, 1), (2, 0), and (2, 2).

SELECT CROSSES(ST_GeomFromText('MULTIPOINT(0 0,0 2,1 1)'), ST_GeomFromText('MULTIPOINT(2 0,2 2)'));

The output is: 0.

The output shows that the two multipoints do not cross each other, as expected. They only share one point, which is not considered as crossing.

Example 5: Testing if two invalid geometries cross each other

The following example uses the CROSSES() function to test if two invalid geometries cross each other. The invalid geometries are defined by empty strings.

SELECT CROSSES(ST_GeomFromText(''), ST_GeomFromText(''));

The output is: NULL.

The output shows that the function returns NULL, as expected. The function returns NULL if either geometry is NULL or invalid.

There are some other functions that are related to the CROSSES() function in Mariadb. They are:

  • ST_Crosses(): This function is an alias for the CROSSES() function. It follows the OpenGIS specifications for the ST_Crosses() function.
  • INTERSECTS(): This function returns 1 if two geometries intersect each other, 0 if they do not, or NULL if either geometry is NULL or invalid. The function can be used to test the spatial relationship between two geometries, such as points, lines, polygons, or multipolygons.
  • TOUCHES(): This function returns 1 if two geometries touch each other, 0 if they do not, or NULL if either geometry is NULL or invalid. The function can be used to test the spatial relationship between two geometries, such as lines, polygons, or multipolygons.
  • OVERLAPS(): This function returns 1 if two geometries overlap each other, 0 if they do not, or NULL if either geometry is NULL or invalid. The function can be used to test the spatial relationship between two geometries, such as lines, polygons, or multipolygons.
  • CONTAINS(): This function returns 1 if the first geometry contains the second geometry, 0 if it does not, or NULL if either geometry is NULL or invalid. The function can be used to test the spatial relationship between two geometries, such as points, lines, polygons, or multipolygons.

Conclusion

The CROSSES() function is a useful function to test if two geometries cross each other. It returns an integer value that represents the result of the comparison. The function can handle different types of geometries, such as lines, polygons, or multipoints. It is similar to the ST_Crosses() function, but with a different name. It is also related to some other functions that provide spatial information or operations on geometries.