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


MySQL 8.0 リファレンスマニュアル  /  ...  /  ジオメトリ形式変換関数

12.17.6 ジオメトリ形式変換関数

MySQL では、ジオメトリ値を内部ジオメトリフォーマットから WKT フォーマットまたは WKB フォーマットに変換したり、X 座標と Y 座標の順序を入れ替えるために、このセクションにリストされている関数がサポートされています。

文字列を WKT または WKB 形式から内部ジオメトリ形式に変換する関数もあります。 セクション12.17.3「WKT 値からジオメトリ値を作成する関数」およびセクション12.17.4「WKB 値からジオメトリ値を作成する関数」を参照してください。

WKT ジオメトリコレクション引数を受け入れる ST_GeomFromText() などの関数は、OpenGIS 'GEOMETRYCOLLECTION EMPTY'標準構文と MySQL 'GEOMETRYCOLLECTION()'非標準構文の両方を理解します。 空のジオメトリコレクションを生成する別の方法は、引数を指定せずに GeometryCollection() をコールすることです。 WKT 値を生成する ST_AsWKT() などの関数は、'GEOMETRYCOLLECTION EMPTY'標準構文を生成します:

mysql> SET @s1 = ST_GeomFromText('GEOMETRYCOLLECTION()');
mysql> SET @s2 = ST_GeomFromText('GEOMETRYCOLLECTION EMPTY');
mysql> SELECT ST_AsWKT(@s1), ST_AsWKT(@s2);
+--------------------------+--------------------------+
| ST_AsWKT(@s1)            | ST_AsWKT(@s2)            |
+--------------------------+--------------------------+
| GEOMETRYCOLLECTION EMPTY | GEOMETRYCOLLECTION EMPTY |
+--------------------------+--------------------------+
mysql> SELECT ST_AsWKT(GeomCollection());
+----------------------------+
| ST_AsWKT(GeomCollection()) |
+----------------------------+
| GEOMETRYCOLLECTION EMPTY   |
+----------------------------+

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

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

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

  • ジオメトリ引数が未定義の空間参照システムにある場合、軸はジオメトリに出現する順序で出力され、ER_WARN_SRS_NOT_FOUND_AXIS_ORDER 警告が発生します。

  • デフォルトでは、地理座標 (緯度、経度) は、ジオメトリ引数の空間参照システムで指定された順序で解釈されます。 オプションの options 引数を指定して、デフォルトの軸の順序をオーバーライドできます。options は、カンマ区切りの key=value のリストで構成されます。 許可されている key 値は axis-order のみで、lat-longlong-lat および srid-defined (デフォルト) の値が許可されています。

    options 引数が NULL の場合、戻り値は NULL です。 options 引数が無効な場合は、理由を示すエラーが発生します。

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

次の関数は、フォーマット変換または座標の入替えに使用できます:

  • ST_AsBinary(g [, options]), ST_AsWKB(g [, options])

    内部ジオメトリ形式の値を WKB 表現に変換し、そのバイナリの結果を返します。

    関数の戻り値には、ジオメトリ引数に適用される空間参照システムで指定された順序で地理座標 (緯度、経度) が含まれます。 オプションの options 引数を指定して、デフォルトの軸の順序をオーバーライドできます。

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

    mysql> SET @g = ST_LineFromText('LINESTRING(0 5,5 10,10 15)', 4326);
    mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g)));
    +-----------------------------------------+
    | ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g))) |
    +-----------------------------------------+
    | LINESTRING(5 0,10 5,15 10)              |
    +-----------------------------------------+
    mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=long-lat')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=long-lat'))) |
    +----------------------------------------------------------------+
    | LINESTRING(0 5,5 10,10 15)                                     |
    +----------------------------------------------------------------+
    mysql> SELECT ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=lat-long')));
    +----------------------------------------------------------------+
    | ST_AsText(ST_GeomFromWKB(ST_AsWKB(@g, 'axis-order=lat-long'))) |
    +----------------------------------------------------------------+
    | LINESTRING(5 0,10 5,15 10)                                     |
    +----------------------------------------------------------------+
  • ST_AsText(g [, options]), ST_AsWKT(g [, options])

    内部ジオメトリ形式の値を WKT 表現に変換し、その文字列の結果を返します。

    関数の戻り値には、ジオメトリ引数に適用される空間参照システムで指定された順序で地理座標 (緯度、経度) が含まれます。 オプションの options 引数を指定して、デフォルトの軸の順序をオーバーライドできます。

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

    mysql> SET @g = 'LineString(1 1,2 2,3 3)';
    mysql> SELECT ST_AsText(ST_GeomFromText(@g));
    +--------------------------------+
    | ST_AsText(ST_GeomFromText(@g)) |
    +--------------------------------+
    | LINESTRING(1 1,2 2,3 3)        |
    +--------------------------------+

    MultiPoint 値の出力では、各点の周囲にカッコが含まれます。 例:

    mysql> SELECT ST_AsText(ST_GeomFromText(@mp));
    +---------------------------------+
    | ST_AsText(ST_GeomFromText(@mp)) |
    +---------------------------------+
    | MULTIPOINT((1 1),(2 2),(3 3))   |
    +---------------------------------+
  • ST_SwapXY(g)

    内部ジオメトリ形式の引数を受け入れ、ジオメトリ内の各座標ペアの X 値と Y 値を入れ替えて、結果を返します。

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

    mysql> SET @g = ST_LineFromText('LINESTRING(0 5,5 10,10 15)');
    mysql> SELECT ST_AsText(@g);
    +----------------------------+
    | ST_AsText(@g)              |
    +----------------------------+
    | LINESTRING(0 5,5 10,10 15) |
    +----------------------------+
    mysql> SELECT ST_AsText(ST_SwapXY(@g));
    +----------------------------+
    | ST_AsText(ST_SwapXY(@g))   |
    +----------------------------+
    | LINESTRING(5 0,10 5,15 10) |
    +----------------------------+

関連キーワード:  関数, ジオメトリ, 空間, AsText, 順序, AsWKT, 形式, 変換, GEOMETRYCOLLECTION, AsWKB