MySQL 8.0 リファレンスマニュアル


12.17.9.2 最小境界矩形を使用する空間リレーション関数

MySQL には、g1g2 の 2 つのジオメトリの最小境界矩形 (MBR) 間の関係をテストする複数の MySQL 固有関数が用意されています。 戻り値 1 と 0 は、それぞれ true と false を示します。

ポイントのバウンディングボックスは、境界と内部の両方のポイントとして解釈されます。

直線の水平線または垂直線の枠ボックスは、線の内側も境界である線として解釈されます。 端点は境界点です。

いずれかのパラメータがジオメトリコレクションの場合、それらのパラメータの内部、境界および外部は、コレクション内のすべての要素の和集合のパラメータです。

このセクションの関数は、デカルトまたは地理空間参照システム (SRS) の引数を検出し、SRS に適した結果を戻します。

特に指定がないかぎり、このセクションの関数はジオメトリ引数を次のように処理します:

  • 引数が NULL または空のジオメトリの場合、戻り値は NULL です。

  • ジオメトリ引数が構文的に整形式のジオメトリでない場合は、ER_GIS_INVALID_DATA エラーが発生します。

  • 未定義の空間参照システム (SRS) でジオメトリ引数が構文的に整形式のジオメトリである場合、ER_SRS_NOT_FOUND エラーが発生します。

  • 複数のジオメトリ引数を取る関数では、それらの引数が同じ SRS 内にない場合、ER_GIS_DIFFERENT_SRIDS エラーが発生します。

  • いずれかの引数がジオメトリ学的に無効な場合、結果は true または false (どちらでも定義されていない) になるか、エラーが発生します。

  • 地理 SRS ジオメトリ引数で、範囲外の経度または緯度を持つ引数がある場合、エラーが発生します:

    • 経度の値が (−180, 180]の範囲内にない場合は、ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE エラーが発生します (MySQL 8.0.12 より前の ER_LONGITUDE_OUT_OF_RANGE)。

    • 緯度の値が[−90, 90]の範囲内にない場合は、ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE エラーが発生します (MySQL 8.0.12 より前の ER_LATITUDE_OUT_OF_RANGE)。

    表示される範囲は度数です。 SRS で別の単位が使用されている場合、範囲ではその単位に対応する値が使用されます。 浮動小数点演算のため、正確な範囲制限はわずかに偏差します。

  • それ以外の場合、戻り値は NULL 以外です。

ジオメトリ関係のテストには、次の MBR 関数を使用できます:

  • MBRContains(g1, g2)

    g1 の最小境界矩形が g2 の最小境界矩形を含んでいるかどうかを示す 1 または 0 を返します。 これは、MBRWithin() とは逆の関係をテストします。

    MBRContains() は、このセクションの概要で説明されているように引数を処理します。

    mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
    mysql> SET @g2 = ST_GeomFromText('Point(1 1)');
    mysql> SELECT MBRContains(@g1,@g2), MBRWithin(@g2,@g1);
    +----------------------+--------------------+
    | MBRContains(@g1,@g2) | MBRWithin(@g2,@g1) |
    +----------------------+--------------------+
    |                    1 |                  1 |
    +----------------------+--------------------+
  • MBRCoveredBy(g1, g2)

    g1 の最小境界矩形が g2 の最小境界矩形で覆われているかどうかを示す 1 または 0 を返します。 これにより、MBRCovers() とは反対の関係がテストされます。

    MBRCoveredBy() は、このセクションの概要で説明されているように引数を処理します。

    mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
    mysql> SET @g2 = ST_GeomFromText('Point(1 1)');
    mysql> SELECT MBRCovers(@g1,@g2), MBRCoveredby(@g1,@g2);
    +--------------------+-----------------------+
    | MBRCovers(@g1,@g2) | MBRCoveredby(@g1,@g2) |
    +--------------------+-----------------------+
    |                  1 |                     0 |
    +--------------------+-----------------------+
    mysql> SELECT MBRCovers(@g2,@g1), MBRCoveredby(@g2,@g1);
    +--------------------+-----------------------+
    | MBRCovers(@g2,@g1) | MBRCoveredby(@g2,@g1) |
    +--------------------+-----------------------+
    |                  0 |                     1 |
    +--------------------+-----------------------+
  • MBRCovers(g1, g2)

    g1 の最小境界矩形が g2 の最小境界矩形をカバーしているかどうかを示す 1 または 0 を返します。 これにより、MBRCoveredBy() とは反対の関係がテストされます。 例については、MBRCoveredBy() の説明を参照してください。

    MBRCovers() は、このセクションの概要で説明されているように引数を処理します。

  • MBRDisjoint(g1, g2)

    2 つのジオメトリ g1g2 の最小境界矩形が切り離されている (交差していない) かどうかを示す 1 または 0 を返します。

    MBRDisjoint() は、このセクションの概要で説明されているように引数を処理します。

  • MBREquals(g1, g2)

    2 つのジオメトリ g1g2 の最小境界矩形が同じであるかどうかを示す 1 または 0 を返します。

    MBREquals() は、空のジオメトリ引数に対して NULL を返さない点を除き、このセクションの概要で説明されているように引数を処理します。

  • MBRIntersects(g1, g2)

    2 つのジオメトリ g1g2 の最小境界矩形が交差しているかどうかを示す 1 または 0 を返します。

    MBRIntersects() は、このセクションの概要で説明されているように引数を処理します。

  • MBROverlaps(g1, g2)

    2 つのジオメトリが交差し、その交差によって同じディメンションのジオメトリが生成され、指定されたジオメトリのいずれとも等しくない場合、これらのジオメトリは空間的にオーバーラップになります。

    この関数は、2 つのジオメトリ g1g2 の最小境界矩形が重複しているかどうかを示す 1 または 0 を戻します。

    MBROverlaps() は、このセクションの概要で説明されているように引数を処理します。

  • MBRTouches(g1, g2)

    内部が交差しないが、いずれかのジオメトリの境界が他のジオメトリの境界または内部と交差する場合、2 つのジオメトリは空間的なタッチです。

    この関数は、2 つのジオメトリ g1 および g2 の最小境界矩形が接触するかどうかを示す 1 または 0 を戻します。

    MBRTouches() は、このセクションの概要で説明されているように引数を処理します。

  • MBRWithin(g1, g2)

    g1 の最小境界矩形が g2 の最小境界矩形の内部にあるかどうかを示す 1 または 0 を返します。 これは、MBRContains() とは逆の関係をテストします。

    MBRWithin() は、このセクションの概要で説明されているように引数を処理します。

    mysql> SET @g1 = ST_GeomFromText('Polygon((0 0,0 3,3 3,3 0,0 0))');
    mysql> SET @g2 = ST_GeomFromText('Polygon((0 0,0 5,5 5,5 0,0 0))');
    mysql> SELECT MBRWithin(@g1,@g2), MBRWithin(@g2,@g1);
    +--------------------+--------------------+
    | MBRWithin(@g1,@g2) | MBRWithin(@g2,@g1) |
    +--------------------+--------------------+
    |                  1 |                  0 |
    +--------------------+--------------------+

関連キーワード:  関数, ジオメトリ, 境界, 空間, 最小, 矩形, 処理, セクション, 関係, MBRWithin