操作関数は、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_Union、ST_Difference、ST_SymDifference、ST_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_EnvelopeAsPts、ST_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_union、ST_Intersection、ST_Difference、ST_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_Envelope、ST_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_Intersection、ST_SymDifference、ST_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_Difference、ST_Union、ST_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です。