ST_DISJOINT
描述
判断两个几何图形是否完全不相交(即没有任何公共点)。若两图形的边界、内部均无交集,则返回 1
,否则返回 0
。
备注
从 Apache Doris 3.0.6 开始支持该函数
语法
ST_DISJOINT( <shape1>, <shape2> )
参数
参数 | 说明 |
---|---|
<shape1> | 用于判断是否不相交的第一个几何图形,支持 Point、Line、Polygon,Circle |
<shape2> | 用于判断是否不相交的第二个几何图形,支持 Point、Line、Polygon,Circle |
返回值
返回 1: shape1 图形与图形 shape2 不相交
返回 0: shape1 图形与图形 shape2 相交
ST_DISJOINT 存在以下边缘情况:
- 若任一输入参数为 NULL,返回 NULL。
- 若输入的几何图形无效,返回 NULL。
- 若输入为空几何图形,返回 1(空图形无任何点,与任何图形均不相交)。
举例
多边形与内部点(相交,返回 0)
SELECT ST_Disjoint(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(5, 5));
+------------------------------------------------------------------------------------+
| ST_Disjoint(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(5, 5)) |
+------------------------------------------------------------------------------------+
| 0 |
+------------------------------------------------------------------------------------+
多边形与外部点(不相交,返回 1)
SELECT ST_Disjoint(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(50, 50));
+--------------------------------------------------------------------------------------+
| ST_Disjoint(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(50, 50)) |
+--------------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------------+
点与线不相交(点在线外)
mysql> SELECT ST_Disjoint(ST_Linefromtext("LINESTRING (0 0, 10 10)"), ST_Point(1, 2));
+-------------------------------------------------------------------------+
| ST_Disjoint(ST_Linefromtext("LINESTRING (0 0, 10 10)"), ST_Point(1, 2)) |
+-------------------------------------------------------------------------+
| 1 |
点与线相交(点在线上)
mysql> SELECT ST_Disjoint(ST_Linefromtext("LINESTRING (0 0, 10 10)"), ST_Point(5, 5));
+-------------------------------------------------------------------------+
| ST_Disjoint(ST_Linefromtext("LINESTRING (0 0, 10 10)"), ST_Point(5, 5)) |
+-------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------+
线与线相交
mysql> SELECT ST_Disjoint( ST_Linefromtext("LINESTRING (0 0, 10 10)"), ST_Linefromtext("LINESTRING (0 10, 10 0)"));
+--------------------------------------------------------------------------------------------------------+
| ST_Disjoint( ST_Linefromtext("LINESTRING (0 0, 10 10)"), ST_Linefromtext("LINESTRING (0 10, 10 0)")) |
+--------------------------------------------------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------------------------------------------------+
线与线不相交(平行且无重叠)
mysql> SELECT ST_Disjoint( ST_Linefromtext("LINESTRING (0 0, 10 0)"), ST_Linefromtext("LINESTRING (0 1, 10 1)"));
+------------------------------------------------------------------------------------------------------+
| ST_Disjoint( ST_Linefromtext("LINESTRING (0 0, 10 0)"), ST_Linefromtext("LINESTRING (0 1, 10 1)")) |
+------------------------------------------------------------------------------------------------------+
| 1 |
+------------------------------------------------------------------------------------------------------+
多边形与多边形不相交(完全分离)
mysql> SELECT ST_Disjoint( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Polygon("POLYGON ((20 20, 30 20, 30 30, 20 30, 20 20))"));
+------------------------------------------------------------------------------------------------------------------------------------+
| ST_Disjoint( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Polygon("POLYGON ((20 20, 30 20, 30 30, 20 30, 20 20))")) |
+------------------------------------------------------------------------------------------------------------------------------------+
| 1 |
+------------------------------------------------------------------------------------------------------------------------------------+
多边形与多边形相交(部分重叠)
mysql> SELECT ST_Disjoint( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Polygon("POLYGON ((5 5, 15 5, 15 15, 5 15, 5 5))"));
+------------------------------------------------------------------------------------------------------------------------------+
| ST_Disjoint( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Polygon("POLYGON ((5 5, 15 5, 15 15, 5 15, 5 5))")) |
+------------------------------------------------------------------------------------------------------------------------------+
| 0 |
+------------------------------------------------------------------------------------------------------------------------------+
空几何图形与任何图形不相交
mysql> SELECT ST_Disjoint( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_GeometryFromText("POINT EMPTY"));
+-----------------------------------------------------------------------------------------------------------+
| ST_Disjoint( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_GeometryFromText("POINT EMPTY")) |
+-----------------------------------------------------------------------------------------------------------+
| NULL |
+-----------------------------------------------------------------------------------------------------------+
无效几何图形(自相交多边形)作为参数
mysql> SELECT ST_Disjoint( ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"), ST_Point(0.5, 0.5));
+---------------------------------------------------------------------------------------+
| ST_Disjoint( ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"), ST_Point(0.5, 0.5)) |
+---------------------------------------------------------------------------------------+
| NULL |
+---------------------------------------------------------------------------------------+
NULL 参数返回 NULL
mysql> SELECT ST_Disjoint(ST_Point(0,0), NULL);
+----------------------------------+
| ST_Disjoint(ST_Point(0,0), NULL) |
+----------------------------------+
| NULL |
+----------------------------------+
圆与多边形相交
mysql> SELECT ST_Disjoint( ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"), ST_Circle(5, 2.5, 2000));
+--------------------------------------------------------------------------------------------+
| ST_Disjoint( ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"), ST_Circle(5, 2.5, 2000)) |
+--------------------------------------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------------------------------------+
圆与多边形不相交
mysql> SELECT ST_Disjoint( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Circle(20, 5, 5));
+--------------------------------------------------------------------------------------------+
| ST_Disjoint( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Circle(20, 5, 5)) |
+--------------------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------------------+