ジオメトリ属性関数は、ジオメトリオブジェクトの定性的または定量的な属性にアクセスするために使用されます。OceanBaseデータベースの現在のバージョンでサポートされているジオメトリ属性関数には、ST_Area、ST_SRID()、ST_Latitude()、ST_Longitude()、ST_X()、および ST_Y() が含まれます。
点はX座標とY座標で構成されており、それぞれ ST_X() と ST_Y() 関数を使用して取得できます。地理空間参照システム(SRS)を持つPointオブジェクトの場合、経度と緯度はそれぞれ ST_Longitude() と ST_Latitude() 関数を使用して取得できます。
ST_Area
ST_Area() 関数は、PolygonおよびMultiPolygon空間オブジェクトの空間座標系における面積を計算します。他の種類の空間オブジェクトの入力はサポートされていません。構文は以下のとおりです:
ST_Area({poly|mpoly})
例:
obclient> SELECT ST_Area(ST_GEOMFROMTEXT('POLYGON((0 0, 0 1, 1 1, 0 0))'));
+-----------------------------------------------------------+
| ST_Area(ST_GEOMFROMTEXT('POLYGON((0 0, 0 1, 1 1, 0 0))')) |
+-----------------------------------------------------------+
| 0.5 |
+-----------------------------------------------------------+
1 row in set
ST_Area() 関数は、0次元(点)または1次元(線分)の空間オブジェクトの面積計算をサポートしていません。
obclient> SELECT ST_Area(ST_GEOMFROMTEXT('LINESTRING(0 0, 0 1)'));
ERROR 3516 (22S01): POLYGON/MULTIPOLYGON value is a geometry of unexpected type LINESTRING in st_area.
MultiPolygon空間オブジェクトに対して、ST_Area() 関数が返す結果は、集合内のPolygonの面積の合計です。
obclient> SELECT ST_Area(ST_GEOMFROMTEXT('MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))'));
+-----------------------------------------------------------------------------------------+
| st_area(ST_GEOMFROMTEXT('MultiPolygon(((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1)))')) |
+-----------------------------------------------------------------------------------------+
| 8 |
+-----------------------------------------------------------------------------------------+
1 row in set
ST_SRID
ST_SRID() は、g に関連付けられた空間参照システム (SRS) のIDを示す整数を返します。構文は以下のとおりです:
ST_SRID(g [, srid])
オプションの srid パラメータは有効なSRID値を表し、ST_SRID() の戻り値は最初のパラメータと同じ型であり、SRID値は2番目のパラメータと等しいです。この関数はオブジェクトのSRID値を設定するだけで、座標値の変換は行いません。単一パラメータの場合、ST_SRID() は幾何SRIDを返し、定義されていないSRSを参照しても ER_SRS_NOT_FOUND エラーは発生しません。
ST_SRID(g, target_srid) と ST_Transform(g, target_srid) の違いは以下のとおりです:
ST_SRID()は幾何SRID値を変更しますが、座標は変換しません。ST_Transform()はSRID値を変更するだけでなく、幾何座標も変換します。
obclient [test]> SET @geo = ST_GeomFromText('LineString(1 1,2 2)', 0);
Query OK, 0 rows affected
obclient [test]> SELECT ST_SRID(@geo);
+---------------+
| ST_SRID(@geo) |
+---------------+
| 0 |
+---------------+
1 row in set
obclient [test]> SET @geo = ST_SRID(@geo, 4230);
Query OK, 0 rows affected
obclient [test]> SELECT ST_SRID(@geo);
+---------------+
| ST_SRID(@geo) |
+---------------+
| 4230 |
+---------------+
1 row in set
ST_Latitude
ST_Latitude() 関数は、地理空間参照システム (SRS) を持つ有効なPointオブジェクトpの緯度値を表す倍精度数を返します。構文は以下のとおりです:
ST_Latitude(p [, new_latitude_val])
パラメータ new_latitude_val はオプションで、有効な緯度値を表します。このパラメータを使用する場合、ST_Latitude() は2番目のパラメータと同じ緯度を持つPointオブジェクトを返します。
Pointオブジェクトが有効であっても地理SRSがない場合、ER_SRS_NOT_GEOGRAPHIC エラーが発生します。
obclient [test]> SET @pit = ST_GeomFromText('POINT(45 90)', 4326);
Query OK, 0 rows affected
obclient [test]> SELECT ST_Latitude(@pit);
+-------------------+
| ST_Latitude(@pit) |
+-------------------+
| 45 |
+-------------------+
1 row in set
obclient [test]> SELECT ST_AsText(ST_Latitude(@pit, 30));
+----------------------------------+
| ST_AsText(ST_Latitude(@pit, 30)) |
+----------------------------------+
| POINT(30 90) |
+----------------------------------+
1 row in set
ST_Longitude
ST_Longitude() 関数は、地理空間参照システム (SRS) を持つ有効な Point オブジェクト p の経度値を倍精度数として返します。構文は以下のとおりです:
ST_Longitude(p [, new_longitude_val])
パラメータ new_longitude_val はオプションで、有効な経度値を表します。このパラメータを使用する場合、ST_Longitude() は2番目のパラメータと同じ経度を持つ Point オブジェクトを返します。 Point オブジェクトが有効であっても地理 SRS を持たない場合、ER_SRS_NOT_GEOGRAPHIC エラーが発生します。
obclient [test]> SET @pit = ST_GeomFromText('POINT(45 90)', 4326);
Query OK, 0 rows affected
obclient [test]> SELECT ST_Longitude(@pit);
+--------------------+
| ST_Longitude(@pit) |
+--------------------+
| 90 |
+--------------------+
1 row in set
obclient [test]> SELECT ST_AsText(ST_Longitude(@pit, 30));
+-----------------------------------+
| ST_AsText(ST_Longitude(@pit, 30)) |
+-----------------------------------+
| POINT(45 30) |
+-----------------------------------+
1 row in set
ST_X
ST_X() 関数は、有効な Point オブジェクト p の X 座標値を倍精度数として返します。X 座標は、点空間参照システム (SRS) の定義において最初に現れる軸を指します。構文は以下のとおりです:
ST_X(p [, new_x_val])
パラメータ new_x_val はオプションで、このパラメータを使用する場合、ST_X() は2番目のパラメータと同じ X 座標を持つ Point オブジェクトを返します。Point オブジェクトに地理 SRS が含まれる場合、2番目のパラメータは経度または緯度の有効範囲内である必要があります。
obclient [test]> SELECT ST_X(Point(53.7, 56.34));
+--------------------------+
| ST_X(Point(53.7, 56.34)) |
+--------------------------+
| 53.7 |
+--------------------------+
1 row in set
obclient [test]> SELECT ST_AsText(ST_X(Point(53.7, 56.34), 15.5));
+-------------------------------------------+
| ST_AsText(ST_X(Point(53.7, 56.34), 15.5)) |
+-------------------------------------------+
| POINT(15.5 56.34) |
+-------------------------------------------+
1 row in set
ST_Y()
ST_Y() 関数は、有効な Point オブジェクト p の Y 座標値を倍精度数で返します。Y 座標は、点空間参照システム (SRS) の定義において2番目の軸とされます。構文は以下のとおりです:
ST_Y(p [, new_y_val])
パラメータ new_y_val はオプションです。このパラメータを使用する場合、ST_Y() は Y 座標が2番目のパラメータと等しい Point オブジェクトを返します。Point オブジェクトが地理 SRS を持つ場合、2番目のパラメータは経度または緯度の有効範囲内である必要があります。
obclient [test]> SELECT ST_Y(Point(53.7, 56.34));
+--------------------------+
| ST_Y(Point(53.7, 56.34)) |
+--------------------------+
| 56.34 |
+--------------------------+
1 row in set
obclient [test]> SELECT ST_AsText(ST_Y(Point(53.7, 56.34), 15.5));
+-------------------------------------------+
| ST_AsText(ST_Y(Point(53.7, 56.34), 15.5)) |
+-------------------------------------------+
| POINT(53.7 15.5) |
+-------------------------------------------+
1 row in set
パラメータ説明
幾何属性関連関数における幾何パラメータの戻り値は、以下の場合を除き NULL ではありません:
- いずれかのパラメータが
NULLまたはいずれかの幾何パラメータが空の幾何形状の場合、戻り値はNULLです。 - いずれかの幾何パラメータの構文が正しくない場合、
ER_GIS_INVALID_DATAエラーが発生します。 - いずれかの幾何パラメータが定義されていない空間参照システム (SRS) に属する場合、
ER_SRS_NOT_FOUNDエラーが発生します。 - いずれかの SRID パラメータが32ビット符号なし整数の範囲外にある場合、
ER_DATA_OUT_OF_RANGEエラーが発生します。 - いずれかの SRID パラメータが定義されていない SRS を参照している場合、
ER_SRS_NOT_FOUNDエラーが発生します。
ST_Latitude()、ST_Longitude()、ST_X()、および ST_Y() 関数については、以下の点にも注意してください:
- いずれかの幾何パラメータが有効な幾何形状であるが Point オブジェクトではない場合、
ER_UNEXPECTED_GEOMETRY_TYPEエラーが発生します。 - X または Y 座標パラメータが指定され、その値が
-inf、+inf、またはNaNの場合、ER_DATA_OUT_OF_RANGEエラーが発生します。 - 経度または緯度の値が範囲を超えた場合(範囲は度単位です。SRS が他の単位を使用する場合は、その単位の対応する値を使用します)、エラーが発生します。
- 経度値が範囲 (-180, 180] 内にない場合、
ER_LONGITUDE_OUT_OF_RANGEエラーが発生します。 - 緯度値が [−90, 90] の範囲内にない場合、
ER_LATITUDE_OUT_OF_RANGEエラーが発生します。
- 経度値が範囲 (-180, 180] 内にない場合、