幾何属性関数は、幾何オブジェクトの定性的または定量的な属性にアクセスするために使用されます。OceanBaseデータベースの現行バージョンでサポートされている幾何属性関数には、ST_Area、ST_SRID()、ST_Latitude()、ST_Longitude()、ST_X()、および ST_Y() が含まれます。
1点は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]内にない場合、