メインコンテンツまでスキップ
バージョン: 4.x

ST_DISJOINT

概要

2つの幾何学的図形が完全に分離されているか(すなわち、共通の点を持たないか)を判定します。2つの図形の境界または内部に交差がない場合(共有点がない場合)は1を返し、少なくとも1つの共通点がある場合(境界接触または内部重複を含む)は0を返します。

Note

Apache Doris 3.0.6以降でサポートされています。

構文

ST_DISJOINT( <shape1>, <shape2> )

パラメータ

パラメータ説明
<shape1>他の図形から分離しているかどうかを判定するための最初の幾何学図形。Point、Line、Polygon、Circleなどの型をサポートします。
<shape2>他の図形から分離しているかどうかを判定するための2番目の幾何学図形。Point、Line、Polygon、Circleなどの型をサポートします。

戻り値

1: shape1がshape2から完全に分離している(共通点がない)。 0: shape1がshape2と交差している(少なくとも1つの共通点が存在する)。

ST_DISJOINTには以下のエッジケースがあります:

  • いずれかの入力パラメータがNULLの場合、NULLを返します。
  • 入力された幾何学図形が無効な場合、NULLを返します。
  • 空の幾何学図形の場合は1を返します(空の図形は点を持たず、あらゆる図形から分離しています)。

Polygonと内部の点(交差、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 |
+------------------------------------------------------------------------------------+

ポリゴンと外部の点(disjoint、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 |
+----------------------------------+

Polygon内の円形ジョイント

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 |
+--------------------------------------------------------------------------------------------+

Circle DisJoint Polygon

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 |
+--------------------------------------------------------------------------------------------+