メインコンテンツまでスキップ
に最終更新

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 |
+-------------------------------------------------+

点オブジェクト(面積なし)

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 |
+-----------------------------+