空間アクセサ関数は、ポリゴンの頂点や線分の始点など、空間データの構成要素にアクセスするための関数を提供します。
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