ST_AREA_SQUARE_METERS
説明
地球表面上の閉じた領域の面積を平方メートル単位で計算します。入力パラメータは、地球表面上の領域を表す幾何オブジェクト(ポリゴン、円、多面体など)です。
閉じていない幾何オブジェクト(点、線分など)の場合、面積は0になります。無効な幾何オブジェクト(自己交差するポリゴンなど)の場合、NULLを返します。
構文
ST_AREA_SQUARE_METERS( <geo>)
パラメータ
| パラメータ | 説明 |
|---|---|
<geo> | 地球表面上の幾何オブジェクト。GeoPolygon、GeoCircle、GeoMultiPolygonなどの閉じた領域タイプをサポートします。 |
戻り値
DOUBLE型で、領域の面積を平方メートルで返します。
ST_AREA_SQUARE_METERSには以下のエッジケースがあります:
- 入力パラメータがNULLの場合、NULLを返します。
- 入力が非閉鎖の幾何オブジェクト(点GeoPoint、線分GeoLineStringなど)の場合、0を返します。
- 入力幾何オブジェクトが無効(自己交差するポリゴン、未閉鎖のポリゴンなど)の場合、NULLを返します。
- 入力座標が経度/緯度の範囲(経度[-180, 180]、緯度[-90, 90])を超える場合、NULLを返します。
例
円形領域(半径1度の円)
SELECT ST_Area_Square_Meters(ST_Circle(0, 0, 1));
+-------------------------------------------------+
| st_area_square_meters(st_circle(0.0, 0.0, 1.0)) |
+-------------------------------------------------+
| 3.1415926535897869 |
+-------------------------------------------------+
Point オブジェクト(面積なし)
SELECT ST_Area_Square_Meters(ST_Point(0, 1));
+-------------------------------------------+
| st_area_square_meters(st_point(0.0, 1.0)) |
+-------------------------------------------+
| 0 |
+-------------------------------------------+
線分オブジェクト(面積なし)
SELECT ST_Area_Square_Meters(ST_LineFromText("LINESTRING (1 1, 2 2)"));
+-----------------------------------------------------------------+
| st_area_square_meters(st_linefromtext('LINESTRING (1 1, 2 2)')) |
+-----------------------------------------------------------------+
| 0 |
+-----------------------------------------------------------------+
単純な正方形領域(経度・緯度の小さな範囲)
mysql> SELECT ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))"));
+--------------------------------------------------------------------------+
| ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))")) |
+--------------------------------------------------------------------------+
| 12364036567.076408 |
+--------------------------------------------------------------------------+
複雑なポリゴン領域
mysql> SELECT ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 5 1, 10 0, 5 -1, 0 0))"));
+----------------------------------------------------------------------------+
| ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 5 1, 10 0, 5 -1, 0 0))")) |
+----------------------------------------------------------------------------+
| 123725166420.83101 |
+----------------------------------------------------------------------------+
180°経度をまたぐ矩形領域
mysql> SELECT ST_Area_Square_Meters(ST_Polygon("POLYGON ((179 0, 180 0, 180 1, 179 1, 179 0))"));
+------------------------------------------------------------------------------------+
| ST_Area_Square_Meters(ST_Polygon("POLYGON ((179 0, 180 0, 180 1, 179 1, 179 0))")) |
+------------------------------------------------------------------------------------+
| 12364036567.07628 |
+------------------------------------------------------------------------------------+
南半球の円形領域
mysql> SELECT ST_Area_Square_Meters(ST_Circle(0, -30, 2));
+---------------------------------------------+
| ST_Area_Square_Meters(ST_Circle(0, -30, 2)) |
+---------------------------------------------+
| 12.566370614359073 |
+---------------------------------------------+
無効なポリゴン(自己交差)
mysql> SELECT ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))"));
+--------------------------------------------------------------------------+
| ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 1 1, 0 1, 1 0, 0 0))")) |
+--------------------------------------------------------------------------+
| NULL |
+--------------------------------------------------------------------------+
閉じられていないポリゴン
mysql> SELECT ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 1 0, 1 1, 0 1))"));
+---------------------------------------------------------------------+
| ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 1 0, 1 1, 0 1))")) |
+---------------------------------------------------------------------+
| NULL |
+---------------------------------------------------------------------+
座標が範囲外です
mysql> SELECT ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 200 0, 200 1, 0 1, 0 0))"));
+------------------------------------------------------------------------------+
| ST_Area_Square_Meters(ST_Polygon("POLYGON ((0 0, 200 0, 200 1, 0 1, 0 0))")) |
+------------------------------------------------------------------------------+
| NULL |
+------------------------------------------------------------------------------+
Null入力
mysql> SELECT ST_Area_Square_Meters(NULL);
+-----------------------------+
| ST_Area_Square_Meters(NULL) |
+-----------------------------+
| NULL |
+-----------------------------+