空間アクセサ関数は、多角形の頂点や線分の始点など、空間データの構成要素にアクセスするための関数を提供します。
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)形式で定義されており、その座標は三次元(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