ST_INTERSECTS
説明
2つの幾何学的図形が交差するかどうか、つまり少なくとも1つの共通点がある(境界の接触や内部の重複を含む)かどうかを判定します。
Note
Apache Doris 3.0.6以降でサポートされています。
構文
ST_INTERSECTS( <shape1>, <shape2>)
パラメータ
| Parameter | デスクリプション |
|---|---|
<shape1> | 別の図形との交差判定に使用される最初の幾何学図形。Point、Line、Polygon、Circleなどの型をサポートします。 |
<shape2> | 別の図形との交差判定に使用される2番目の幾何学図形。Point、Line、Polygon、Circleなどの型をサポートします。 |
戻り値
1を返す: shape1がshape2と交差する
0を返す: shape1がshape2と交差しない
ST_INTERSECTSには以下のエッジケースがあります:
- 入力パラメータがNULLの場合、NULLを返します。
- 入力された幾何学図形が無効な場合、NULLを返します。
- 入力が空の幾何学図形の場合、NULLを返します。
- 2つの図形が境界でのみ接触している場合(一意の共通点を持つ場合)、1を返します(境界での接触は交差とみなされます)
例
ポリゴン内の点(交差、1を返す)
SELECT ST_Intersects(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(5, 5));
+--------------------------------------------------------------------------------------+
| ST_Intersects(ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(5, 5)) |
+--------------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------------+
ポリゴン境界上の点(intersect、1を返す)
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(0, 5));
+-----------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(0, 5)) |
+-----------------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------------+
ポリゴン外の点(交差なし、0を返す)
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(50, 50));
+-------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Point(50, 50)) |
+-------------------------------------------------------------------------------------------+
| 0 |
+-------------------------------------------------------------------------------------------+
線が互いに交差する(intersect、1を返す)
mysql> SELECT ST_INTERSECTS( ST_Linefromtext("LINESTRING (0 0, 10 10)"), ST_Linefromtext("LINESTRING (0 10, 10 0)"));
+----------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Linefromtext("LINESTRING (0 0, 10 10)"), ST_Linefromtext("LINESTRING (0 10, 10 0)")) |
+----------------------------------------------------------------------------------------------------------+
| 1 |
+----------------------------------------------------------------------------------------------------------+
線分は1つの共通点を共有します
mysql> SELECT ST_INTERSECTS( ST_Linefromtext("LINESTRING (0 0, 2 2)"), ST_Linefromtext("LINESTRING (2 2, 4 0)"));
+------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Linefromtext("LINESTRING (0 0, 2 2)"), ST_Linefromtext("LINESTRING (2 2, 4 0)")) |
+------------------------------------------------------------------------------------------------------+
| 1 |
+------------------------------------------------------------------------------------------------------+
直線は平行で分離されています(交点なし、0を返します)
mysql> SELECT ST_INTERSECTS( ST_Linefromtext("LINESTRING (0 0, 10 0)"), ST_Linefromtext("LINESTRING (0 1, 10 1)"));
+--------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Linefromtext("LINESTRING (0 0, 10 0)"), ST_Linefromtext("LINESTRING (0 1, 10 1)")) |
+--------------------------------------------------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------------------------------------------------+
線分がポリゴンの内部を通過する場合(intersect、戻り値は1)
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (2 2, 8 8)"));
+-------------------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (2 2, 8 8)")) |
+-------------------------------------------------------------------------------------------------------------------+
| 1 |
+-------------------------------------------------------------------------------------------------------------------+
ラインがポリゴンの境界に接している(交差、1を返す)
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (0 5, 5 5)"));
+-------------------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (0 5, 5 5)")) |
+-------------------------------------------------------------------------------------------------------------------+
| 1 |
+-------------------------------------------------------------------------------------------------------------------+
ラインがポリゴンの完全に外側にある場合(交差なし、0を返す)
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (11 1, 11 9)"));
+---------------------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Linefromtext("LINESTRING (11 1, 11 9)")) |
+---------------------------------------------------------------------------------------------------------------------+
| 0 |
+---------------------------------------------------------------------------------------------------------------------+
ポリゴンが重複している(交差、1を返す)
mysql> SELECT ST_INTERSECTS( 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_INTERSECTS( 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))")) |
+--------------------------------------------------------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------------------------------------------------------+
ポリゴンは完全に分離されています(交差なし、0を返します)
mysql> SELECT ST_INTERSECTS( 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_INTERSECTS( 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))")) |
+--------------------------------------------------------------------------------------------------------------------------------------+
| 0 |
+--------------------------------------------------------------------------------------------------------------------------------------+
ポリゴンが境界で接触する(intersect、1を返す)
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"), ST_Polygon("POLYGON ((5 0, 10 0, 10 5, 5 5, 5 0))"));
+--------------------------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"), ST_Polygon("POLYGON ((5 0, 10 0, 10 5, 5 5, 5 0))")) |
+--------------------------------------------------------------------------------------------------------------------------+
| 1 |
+--------------------------------------------------------------------------------------------------------------------------+
円と内部の点(交差、1を返す)
mysql> SELECT ST_INTERSECTS( ST_Circle(0, 0, 1000), ST_Point(0.005, 0));
+-------------------------------------------------------------+
| ST_INTERSECTS( ST_Circle(0, 0, 1000), ST_Point(0.005, 0)) |
+-------------------------------------------------------------+
| 1 |
+-------------------------------------------------------------+
円は直線に接している(交差、1を返す)
mysql> SELECT ST_INTERSECTS( ST_Circle(0, 0, 1000), ST_Linefromtext("LINESTRING (0.01 0.01, 0.02 0.02)"));
+-----------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Circle(0, 0, 1000), ST_Linefromtext("LINESTRING (0.01 0.01, 0.02 0.02)")) |
+-----------------------------------------------------------------------------------------------+
| 1 |
+-----------------------------------------------------------------------------------------------+
円と多角形が完全に分離されている(交差なし、0を返す)
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Circle(20, 5, 5));
+----------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_Circle(20, 5, 5)) |
+----------------------------------------------------------------------------------------------+
| 0 |
+----------------------------------------------------------------------------------------------+
円がポリゴンと交差する
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"), ST_Circle(5, 2.5, 2000));
+----------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 5 0, 5 5, 0 5, 0 0))"), ST_Circle(5, 2.5, 2000)) |
+----------------------------------------------------------------------------------------------+
| 1 |
+----------------------------------------------------------------------------------------------+
空の幾何学図形
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_GeometryFromText("POINT EMPTY"));
+-------------------------------------------------------------------------------------------------------------+
| ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 10 0, 10 10, 0 10, 0 0))"), ST_GeometryFromText("POINT EMPTY")) |
+-------------------------------------------------------------------------------------------------------------+
| NULL |
+-------------------------------------------------------------------------------------------------------------+
無効なポリゴン(NULLを返す)
mysql> SELECT ST_INTERSECTS( ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"), ST_Point(0.5, 0.5));
+-----------------------------------------------------------------------------------------+
| ST_INTERSECTS( 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_INTERSECTS(NULL, ST_Point(5, 5));
+-------------------------------------+
| ST_INTERSECTS(NULL, ST_Point(5, 5)) |
+-------------------------------------+
| NULL |
+-------------------------------------+