すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:操作関数

最終更新日:Mar 29, 2026

操作関数は、GEOMETRY 値に対して空間的関係性の計算および幾何変換を実行します。GEOMETRY を返すすべての関数はバイナリ出力を生成します。読みやすい Well-Known Text(WKT)形式で結果を取得するには、出力を ST_AsText() 関数でラップしてください。

関数説明
ST_Intersection(g1, g2)g1 と g2 の幾何学的交差部分を返します
ST_Envelope(g)ジオメトリの最小境界矩形(エンベロープ)を返します
ST_Union(g1, g2)2 つのジオメトリの点集合和を返します
geometry_union(array[g1, g2, ...])ジオメトリ配列の点集合和を返します
ST_Boundary(g)ジオメトリの境界を新しいジオメトリとして返します
ST_EnvelopeAsPts(g)境界矩形の左下角および右上角の座標を返します
ST_Difference(g1, g2)g1 のうち g2 と交差しない部分を返します
ST_ExteriorRing(g1)ポリゴンの外周を LINESTRING として返します
ST_SymDifference(g1, g2)g1 と g2 の互いに交差しない部分をそれぞれ返します

ST_Intersection

ST_Intersection(g1, g2)

g1 と g2 の交差部分を表すジオメトリを返します。

戻り値の型: GEOMETRY

例:

SELECT ST_Intersection(...) を直接実行するとバイナリ形式の結果が返されます。ST_AsText() を使用して、読みやすいテキスト形式に変換してください:

SELECT ST_AsText(ST_Intersection(ST_GeometryFromText('MULTIPOINT (50 100, 50 200)'), ST_GeometryFromText('Point (50 100)')));

実行結果:

+-----------------------------------------------------------------------------------------------------------------------+
| ST_AsText(ST_Intersection(ST_GeometryFromText('MULTIPOINT (50 100, 50 200)'), ST_GeometryFromText('Point (50 100)'))) |
+-----------------------------------------------------------------------------------------------------------------------+
| POINT (50 100)                                                                                                        |

関連関数: ST_UnionST_DifferenceST_SymDifferenceST_AsText

ST_Envelope

ST_Envelope(g)

入力ジオメトリを囲む最小境界矩形(エンベロープ)のバイナリ表現を返します。

サポートされる入力タイプ: LINE、POLYGON、MULTILINE、MULTIPOLYGON

POINT 型の入力はサポートされていません。

戻り値の型: GEOMETRY

例 1 — LINESTRING のエンベロープ:

SELECT ST_AsText(ST_Envelope(ST_GeometryFromText('LINESTRING (1 1, 2 2, 1 3)')));

実行結果:

+---------------------------------------------------------------------------------+
| ST_AsText(ST_Envelope(ST_GeometryFromText('LINESTRING (1 1, 2 2, 1 3)')))      |
+---------------------------------------------------------------------------------+
| POLYGON ((1 1, 2 1, 2 3, 1 3, 1 1))                                            |

例 2 — MULTIPOINT のエンベロープ:

SELECT ST_AsText(ST_Envelope(ST_GeometryFromText('MULTIPOINT (1 2, 2 4, 3 6, 4 8)')));

実行結果:

+-------------------------------------------------------------------------------+
| ST_AsText(ST_Envelope(ST_GeometryFromText('MULTIPOINT (1 2, 2 4, 3 6, 4 8)'))) |
+-------------------------------------------------------------------------------+
| POLYGON ((1 2, 4 2, 4 8, 1 8, 1 2))                                           |

関連関数: ST_EnvelopeAsPtsST_Boundary

ST_Union

ST_Union(g1, g2)

g1 と g2 の点集合和を表すジオメトリを返します。

戻り値の型: INT

複数のジオメトリの配列の和を計算する場合は、geometry_union を使用してください。

例:

SELECT ST_AsText(ST_Union(ST_GeometryFromText('MULTIPOLYGON (((1 1, 3 1, 3 3, 1 3, 1 1)))'), ST_GeometryFromText('MULTIPOLYGON (((2 2, 4 2, 4 4, 2 4, 2 2)))')));

実行結果:

+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| ST_AsText(ST_Union(ST_GeometryFromText('MULTIPOLYGON (((1 1, 3 1, 3 3, 1 3, 1 1)))'), ST_GeometryFromText('MULTIPOLYGON (((2 2, 4 2, 4 4, 2 4, 2 2)))')))    |
+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
| POLYGON ((1 1, 3 1, 3 2, 4 2, 4 4, 2 4, 2 3, 1 3, 1 1))                                                                                                      |

関連関数: geometry_unionST_IntersectionST_DifferenceST_SymDifference

geometry_union

geometry_union(array[g1, g2, ...])

ジオメトリ配列の点集合和を表すジオメトリを返します。

戻り値の型: GEOMETRY

2 つのジオメトリのみの和を計算する場合は、ST_Union を使用してください。

例:

SELECT ST_AsText(geometry_union(ARRAY[ST_Point(61.56, -158.54), ST_Point(61.56, -158.55)]));

実行結果:

+------------------------------------------------------------------------------------------------+
| ST_AsText(geometry_union(ARRAY[ST_Point(61.56, -158.54), ST_Point(61.56, -158.55)]))          |
+------------------------------------------------------------------------------------------------+
| MULTIPOINT ((61.56 -158.55), (61.56 -158.54))                                                 |

関連関数: ST_Union

ST_Boundary

ST_Boundary(g)

入力ジオメトリの境界を新しいジオメトリとして返します。

戻り値の型: GEOMETRY

例:

SELECT ST_AsText(ST_Boundary(ST_GeometryFromText('LINESTRING (8 4, 5 7)')));

実行結果:

+----------------------------------------------------------------------------+
| ST_AsText(ST_Boundary(ST_GeometryFromText('LINESTRING (8 4, 5 7)')))      |
+----------------------------------------------------------------------------+
| MULTIPOINT ((8 4), (5 7))                                                  |

関連関数: ST_EnvelopeST_ExteriorRing

ST_EnvelopeAsPts

ST_EnvelopeAsPts(g)

境界矩形の左下角および右上角を表す 2 つの POINT 値の配列を返します。入力ジオメトリが空の場合、null を返します。

戻り値の型: Array[Geometry]

— 空のジオメトリは null を返します:

SELECT ST_EnvelopeAsPts(ST_GeometryFromText('LINESTRING EMPTY'));

実行結果:

+-----------------------------------------------------------------+
| ST_EnvelopeAsPts(ST_GeometryFromText('LINESTRING EMPTY'))      |
+-----------------------------------------------------------------+
| null                                                            |

関連関数: ST_Envelope

ST_Difference

ST_Difference(g1, g2)

g1 のうち g2 と交差しない部分を返します。

戻り値の型: GEOMETRY

引数の順序が重要です。ST_Difference(A, B) は常に A の一部を返し、B の一部は返しません。これは、引数を入れ替えると異なる結果が得られる唯一の操作関数です。

例:

SELECT ST_AsText(ST_Difference(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)')));

実行結果:

+---------------------------------------------------------------------------------------------------------------+
| ST_AsText(ST_Difference(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (150 150)')))      |
+---------------------------------------------------------------------------------------------------------------+
| POINT (50 100)                                                                                                |

2 つのポイントは離散的であるため、減算される要素はなく、結果は完全な POINT (50 100) となります。

関連関数: ST_IntersectionST_SymDifferenceST_Union

ST_ExteriorRing

ST_ExteriorRing(g1)

ポリゴンの外周を LINESTRING として返します。

戻り値の型: GEOMETRY

例:

SELECT ST_AsText(ST_ExteriorRing(ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 1))')));

実行結果:

+------------------------------------------------------------------------------------+
| ST_AsText(ST_ExteriorRing(ST_GeometryFromText('POLYGON ((1 1, 1 4, 4 1))')))     |
+------------------------------------------------------------------------------------+
| LINESTRING (1 1, 4 1, 1 4, 1 1)                                                   |

関連関数: ST_Boundary

ST_SymDifference

ST_SymDifference(g1, g2)

g1 と g2 の互いに交差しない部分をそれぞれ返します。

戻り値の型: GEOMETRY

例:

SELECT ST_AsText(ST_SymDifference(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (50 150)')));

実行結果:

+--------------------------------------------------------------------------------------------------------------+
| ST_AsText(ST_SymDifference(ST_GeometryFromText('POINT (50 100)'), ST_GeometryFromText('POINT (50 150)')))   |
+--------------------------------------------------------------------------------------------------------------+
| MULTIPOINT ((50 100), (50 150))                                                                              |

この 2 つのポイントは互いに素であるため、対称差は両方のポイントを合わせたものになります。

関連関数: ST_DifferenceST_UnionST_Intersection

注意事項

  • バイナリ出力: GEOMETRY を返すすべての関数は、単独の SELECT 文で使用した場合、バイナリ出力を生成します。必ず関数呼び出しを ST_AsText() でラップして、読みやすい WKT 出力を得るようにしてください。

  • ST_Difference は非対称です: ST_Difference(A, B) は常に A の部分集合を返します。引数の順序を入れ替えると、異なる結果が得られます。

  • ST_Envelope は POINT 入力をサポートしません。 ST_Envelope に POINT ジオメトリを渡すことはサポートされていません。

  • MULTILINE: AnalyticDB for MySQL では、マルチセグメントラインの型として MULTILINE を使用します。これに対応する OGC 標準の型は MULTILINESTRING です。