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


MySQL 8.0 リファレンスマニュアル  /  ...  /  一般的なジオメトリプロパティー関数

12.17.7.1 一般的なジオメトリプロパティー関数

このセクションに示されている関数では引数が制限されず、任意の型のジオメトリ値が受け入れられます。

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

  • いずれかの引数が NULL の場合、戻り値は NULL です。

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

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

  • SRID 引数が 32 ビット符号なし整数の範囲内にない場合は、ER_DATA_OUT_OF_RANGE エラーが発生します。

  • SRID 引数が未定義の SRS を参照すると、ER_SRS_NOT_FOUND エラーが発生します。

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

ジオメトリプロパティを取得するには、次の関数を使用できます:

  • ST_Dimension(g)

    ジオメトリ値 g の固有の次元を返します。 dimension は −1、0、1、または 2 の値を取ります。 これらの値の意味は、セクション11.4.2.2「Geometry クラス」で指定されています。

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

    mysql> SELECT ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)'));
    +------------------------------------------------------+
    | ST_Dimension(ST_GeomFromText('LineString(1 1,2 2)')) |
    +------------------------------------------------------+
    |                                                    1 |
    +------------------------------------------------------+
  • ST_Envelope(g)

    ジオメトリ値 g の最小境界矩形 (MBR) を返します。 結果は、その境界矩形の角の点によって定義される Polygon 値として返されます。

    POLYGON((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))
    mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,2 2)'))) |
    +----------------------------------------------------------------+
    | POLYGON((1 1,2 1,2 2,1 2,1 1))                                 |
    +----------------------------------------------------------------+

    引数が点、垂直または水平の線セグメントの場合、ST_Envelope() は無効なポリゴンを戻すのではなく、点または線セグメントを MBR として戻します:

    mysql> SELECT ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_Envelope(ST_GeomFromText('LineString(1 1,1 2)'))) |
    +----------------------------------------------------------------+
    | LINESTRING(1 1,1 2)                                            |
    +----------------------------------------------------------------+

    ST_Envelope() は、このセクションの概要で説明されているように引数を処理しますが、次の例外があります:

    • ジオメトリに地理空間参照システム (SRS) の SRID 値がある場合、ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS エラーが発生します。

  • ST_GeometryType(g)

    ジオメトリインスタンス g がメンバーになっているジオメトリ型の名前を示すバイナリ文字列を返します。 この名前は、インスタンス化可能な Geometry サブクラスのいずれかに対応します。

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

    mysql> SELECT ST_GeometryType(ST_GeomFromText('POINT(1 1)'));
    +------------------------------------------------+
    | ST_GeometryType(ST_GeomFromText('POINT(1 1)')) |
    +------------------------------------------------+
    | POINT                                          |
    +------------------------------------------------+
  • ST_IsEmpty(g)

    この関数は、空のジオメトリコレクション値の場合は 1 を戻し、それ以外の場合は 0 を戻すプレースホルダです。

    有効な空のジオメトリのみが、空のジオメトリコレクション値の形式で表されます。 MySQL は、POINT EMPTY などの GIS の EMPTY 値をサポートしていません。

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

  • ST_IsSimple(g)

    ISO 「SQL/MM パート 3: 空間」標準に従ってジオメトリ値 g が単純な場合、1 を返します。 引数が単純でない場合、ST_IsSimple() は 0 を返します。

    セクション11.4.2「OpenGIS ジオメトリモデル」 で指定されるインスタンス化可能ジオメトリクラスの説明には、クラスインスタンスが単純ではないと分類される特定の条件が含まれます。

    ST_IsSimple() は、このセクションの概要で説明されているように引数を処理しますが、次の例外があります:

    • ジオメトリに経度または緯度が範囲外の地理 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)。

      表示される範囲は度数です。 浮動小数点演算のため、正確な範囲制限はわずかに偏差します。

  • ST_SRID(g [, srid])

    引数として有効なジオメトリオブジェクト g を 1 つだけ与えた場合、ST_SRID() は、g に関連付けられた空間参照システム (SRS) の ID を示す整数を戻します。

    オプションである 2 番目の引数として有効な SRID 値を与えた場合、ST_SRID() は、SRID 値が 2 番目の引数と等しい最初の引数と同じ型のオブジェクトを戻します。 これにより、オブジェクトの SRID 値のみが設定され、座標値の変換は実行されません。

    ST_SRID() は、このセクションの概要で説明されているように引数を処理しますが、次の例外があります:

    • 単一引数構文の場合、ST_SRID() は未定義の SRS を参照していてもジオメトリ SRID を戻します。 ER_SRS_NOT_FOUND エラーは発生しません。

    ST_SRID(g, target_srid)ST_Transform(g, target_srid) は、次の点で異なります:

    • ST_SRID() は、座標を変換せずにジオメトリ SRID 値を変更します。

    • ST_Transform() は、SRID 値の変更に加えてジオメトリ座標を変換します。

    mysql> SET @g = ST_GeomFromText('LineString(1 1,2 2)', 0);
    mysql> SELECT ST_SRID(@g);
    +-------------+
    | ST_SRID(@g) |
    +-------------+
    |           0 |
    +-------------+
    mysql> SET @g = ST_SRID(@g, 4326);
    mysql> SELECT ST_SRID(@g);
    +-------------+
    | ST_SRID(@g) |
    +-------------+
    |        4326 |
    +-------------+

    空間値を作成するための MySQL 固有関数の結果を SRID 値とともに ST_SRID() に渡すことで、特定の SRID にジオメトリを作成できます。 例:

    SET @g1 = ST_SRID(Point(1, 1), 4326);

    ただし、このメソッドは SRID 0 にジオメトリを作成し、SRID 4326 (WGS 84) にキャストします。 最初に正しい空間参照システムを使用してジオメトリを作成することをお薦めします。 例:

    SET @g1 = ST_PointFromText('POINT(1 1)', 4326);
    SET @g1 = ST_GeomFromText('POINT(1 1)', 4326);

    ST_SRID() の 2 引数形式は、SRID が正しくないジオメトリの SRS の修正や変更などのタスクに役立ちます。


関連キーワード:  関数, SRID, ジオメトリ, 空間, 処理, セクション, GeomFromText, エラー, 発生, 作成