スペースアクセサ関数は、多角形の頂点や線分の始点など、空間データ要素へのアクセスを提供するために使用されます。
OceanBaseデータベースが現在サポートしているスペースアクセサ関数には、_ST_GeometryType、_ST_IsCollection、_ST_NumInteriorRings が含まれます。
_ST_GeometryType
_ST_GeometryType関数は、幾何オブジェクトの幾何タイプを返すために使用されます。この関数が返すのは、入力された幾何オブジェクトのタイプであり、SQL-MM(SQL Multimedia)規格に従う幾何タイプ名で、ST_[TYPE]という形式です。例えば、入力された幾何オブジェクトが点である場合、関数はST_Point返します。ストリングであればST_LineString返します。
構文は以下のとおりです:
_ST_GeometryType(geometry g1);
パラメータの説明:
geometry g1:これは関数の入力となる幾何オブジェクトです。点(Point)、線(LineString)、ポリゴン(Polygon)など、任意のタイプの幾何オブジェクトを指定できます。
制限事項:
- 入力値は有効な幾何オブジェクトでなければなりません。入力が
NULLまたは非幾何データの場合、関数はエラーまたはNULL返す可能性があります。
例:
obclient> SELECT _ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)'));
この例では、_ST_GeometryType関数はST_GeomFromText関数によって変換された幾何オブジェクトをチェックし、そのオブジェクトのタイプを返します。
結果は次のとおりです:
+--------------------------------------------------------------------------------------------------+
| _ST_GeometryType(ST_GeomFromText('LINESTRING(77.29 29.07,77.42 29.26,77.27 29.31,77.29 29.07)')) |
+--------------------------------------------------------------------------------------------------+
| ST_LineString |
+--------------------------------------------------------------------------------------------------+
1 row in set
_ST_IsCollection
_ST_IsCollection関数は、入力されたジオメトリ(Geometry)がジオメトリ集合タイプであるかどうかを判断するために使用されます。地理情報システム(GIS)において、ジオメトリ集合タイプとは、点、線、ポリゴンなどの複数のジオメトリオブジェクトから構成される集合を指します。
構文は以下のとおりです:
_ST_IsCollection(geometry g1);
パラメータの説明:
geometry g1:チェック対象のジオメトリオブジェクトであり、有効なジオメトリオブジェクトである必要があります。ジオメトリ集合タイプには主に以下が含まれます:GEOMETRYCOLLECTION:ジオメトリオブジェクトの集合であり、集合内のオブジェクトは任意のタイプにすることができます。MULTIPOINT:複数の点オブジェクトの集合。MULTIPOLYGON:複数のポリゴンオブジェクトの集合。MULTILINESTRING:複数の線ストリングオブジェクトの集合。MULTICURVE:複数の曲線オブジェクトの集合(一部のデータベースシステムではサポートされている場合があります)。MULTISURFACE:複数のサーフェスオブジェクトの集合(一部のデータベースシステムではサポートされている場合があります)。COMPOUNDCURVEは、複数の単純な曲線が組み合わさって形成される複合曲線を指しますが、OceanBaseデータベースでは現在このタイプはサポートされていない可能性があります。
例:
obclient> SELECT _ST_IsCollection(st_geomfromtext('LINESTRING(0 0, 1 1)'));
この例では、入力されるのはLINESTRINGタイプのオブジェクトであり、これは単純なジオメトリタイプであり、複数のジオメトリオブジェクトから構成される集合ではありません。このSQLステートメントを実行した後、返される結果は0です。
実行結果は次のとおりです:
+-----------------------------------------------------------+
| _ST_IsCollection(st_geomfromtext('LINESTRING(0 0, 1 1)')) |
+-----------------------------------------------------------+
| 0 |
+-----------------------------------------------------------+
1 row in set
_ST_NumInteriorRings
_ST_NumInteriorRings関数は、多角形(Polygon)ジオメトリオブジェクトの内部リング数を返すために使用されます。「内部リング」とは、多角形内の「ホール」または「アイランド」を囲む境界線を指し、これらのホールは多角形の外部リングの内部に位置します。多角形に内部リングがない場合、それはホールがないことを意味します。
構文は次のとおりです:
_ST_NumInteriorRings(geometry a_polygon);
パラメータの説明:
geometry a_polygon:入力パラメータであり、チェックする多角形ジオメトリオブジェクトを表します。入力されたジオメトリオブジェクトが多角形タイプでない場合、関数はNULL返します。
例:
obclient> select _ST_NumInteriorRings(ST_GeomFromText('POLYGON((2 2 1,2 8 5,8 8 7,8 2 4,2 2 1))'));
この例では、入力された多角形はWell-Known Text (WKT)形式で定義されており、その座標は3次元(x, y, z座標を含む)です。z座標は提供されていますが、指定された多角形には内部リングが定義されていないため、戻り値は0です。
実行結果は次のとおりです:
+-----------------------------------------------------------------------------------+
| _ST_NumInteriorRings(ST_GeomFromText('POLYGON((2 2 1,2 8 5,8 8 7,8 2 4,2 2 1))')) |
+-----------------------------------------------------------------------------------+
| 0 |
+-----------------------------------------------------------------------------------+
1 row in set