ST_Area — 返回多边形几何体的面积。
float ST_Area(geometry g1);
float ST_Area(geography geog, boolean use_spheroid = true);
返回多边形几何体的面积。 对于几何类型,计算 2D 笛卡尔(平面)面积,单位由 SRID 指定。 对于地理类型,默认面积是在球体上确定的,单位为平方米。 要使用更快但精度较低的球形模型计算面积,请使用 ST_Area(geog,false)。
增强:2.0.0 - 引入了对 2D 多面体曲面的支持。
增强:2.2.0 - 使用 GeographicLib 对球体进行测量,以提高准确性和稳健性。 需要 PROJ >= 4.9.0 才能利用新功能。
更改:3.0.0 - 不再依赖 SFCGAL。
此方法实现了 SQL 1.1 的 OGC 简单功能规范。
该方法实现了SQL/MM规范。 SQL-MM 3: 8.1.2, 9.5.3
该函数支持多面体曲面。
|
|
|
对于多面体曲面,仅支持 2D 多面体曲面(不支持 2.5D)。 对于 2.5D,可能会给出非零答案,但仅限于完全位于 XY 平面中的面。 |
返回马萨诸塞州一块土地的面积(以平方英尺为单位),然后乘以换算得到平方米。 请注意,这是以平方英尺为单位,因为 EPSG:2249 是马萨诸塞州平面英尺
SELECT ST_Area(geom) AS sqft,
ST_Area(geom) * 0.3048 ^ 2 AS sqm
FROM (
SELECT 'SRID=2249;POLYGON((743238 2967416,743238 2967450,
743265 2967450,743265.625 2967416,743238 2967416))'::geometry AS geom
) AS subquery;
sqft | sqm --------+------------- 928.625 | 86.27208552
Return area square feet and transform to Massachusetts state plane meters (EPSG:26986) to get square meters. Note this is in square feet because 2249 is Massachusetts State Plane Feet and transformed area is in square meters since EPSG:26986 is state plane Massachusetts meters.
SELECT ST_Area(geom) AS sqft,
round(ST_Area(ST_Transform(geom, 26986))::numeric, 6) AS sqm
FROM (
SELECT 'SRID=2249;POLYGON((743238 2967416,743238 2967450,
743265 2967450,743265.625 2967416,743238 2967416))'::geometry AS geom
) AS subquery;
sqft | sqm --------+----------- 928.625 | 86.272431
使用地理数据类型返回面积平方英尺和平方米。 请注意,我们将几何图形转换为地理图形(在执行此操作之前,请确保您的几何图形位于 WGS 84 长纬度 4326 中)。 地理总是以米为单位。 这只是为了演示比较。 通常您的表将已经存储在地理数据类型中。
SELECT round((ST_Area(geog) / 0.3048 ^ 2)::numeric, 2) AS sqft_spheroid,
round((ST_Area(geog, false) / 0.3048 ^ 2)::numeric, 2) AS sqft_sphere,
round(ST_Area(geog)::numeric, 2) AS sqm_spheroid
FROM (
SELECT ST_Transform(
'SRID=2249;POLYGON((743238 2967416,743238 2967450,
743265 2967450,743265.625 2967416,743238 2967416))'::geometry,
4326
)::geography AS geog
) AS subquery;
sqft_spheroid | sqft_sphere | sqm_spheroid
----------------+-------------+--------------
928.68 | 926.61 | 86.28
如果您的数据已经是地理数据:
SELECT ST_Area(geog) / 0.3048 ^ 2 AS sqft,
ST_Area(the_geog) AS sqm
FROM somegeogtable;