- #4139, Make mixed-dimension ND index build tree correctly (Darafei Praliaskouski,
Arthur Lesuisse, Andrew Gierth, Raúl Marín)
- #4262, Document MULTISURFACE compatibility of ST_LineToCurve (Steven Ottens)
+ - #4258, Remove SFCGAL support for ST_Area (Darafei Praliaskouski)
PostGIS 2.5.0
2018/09/23
</para>
<para>Enhanced: 2.0.0 - support for 2D polyhedral surfaces was introduced.</para>
<para>Enhanced: 2.2.0 - measurement on spheroid performed with GeographicLib for improved accuracy and robustness. Requires Proj >= 4.9.0 to take advantage of the new feature.</para>
+ <para>Changed: 3.0.0 - does not depend on SFCGAL anymore.</para>
<para>&sfs_compliant;</para>
<para>&sqlmm_compliant; SQL-MM 3: 8.1.2, 9.5.3</para>
<para>&P_support;</para>
<note><para>For polyhedral surfaces, only supports 2D polyhedral surfaces (not 2.5D). For 2.5D, may give a non-zero answer, but only for the faces that
sit completely in XY plane.</para></note>
- <para>&sfcgal_enhanced;</para>
</refsection>
<refsection>
Note this is in square feet because EPSG:2249 is
Massachusetts State Plane Feet </para>
<programlisting>
-SELECT ST_Area(the_geom) As sqft, ST_Area(the_geom)*POWER(0.3048,2) As sqm
- FROM (SELECT
- ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
- 743265 2967450,743265.625 2967416,743238 2967416))',2249) ) As foo(the_geom);
- sqft | sqm
----------+-------------
- 928.625 | 86.27208552
+select ST_Area(geom) sqft,
+ ST_Area(geom) * 0.3048 ^ 2 sqm
+from (
+ select 'SRID=2249;POLYGON((743238 2967416,743238 2967450,
+ 743265 2967450,743265.625 2967416,743238 2967416))' :: geometry geom
+ ) subquery;
+┌─────────┬─────────────┐
+│ sqft │ sqm │
+├─────────┼─────────────┤
+│ 928.625 │ 86.27208552 │
+└─────────┴─────────────┘
</programlisting>
<para>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 </para>
-<programlisting>
-
-SELECT ST_Area(the_geom) As sqft, ST_Area(ST_Transform(the_geom,26986)) As sqm
- FROM (SELECT
- ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,
- 743265 2967450,743265.625 2967416,743238 2967416))',2249) ) As foo(the_geom);
- sqft | sqm
----------+------------------
- 928.625 | 86.2724304199219
- </programlisting>
+<programlisting>select ST_Area(geom) sqft,
+ ST_Area(ST_Transform(geom, 26986)) As sqm
+from (
+ select
+ 'SRID=2249;POLYGON((743238 2967416,743238 2967450,
+ 743265 2967450,743265.625 2967416,743238 2967416))' :: geometry geom
+ ) subquery;
+┌─────────┬─────────────────┐
+│ sqft │ sqm │
+├─────────┼─────────────────┤
+│ 928.625 │ 86.272430607008 │
+└─────────┴─────────────────┘
+</programlisting>
<para>Return area square feet and square meters using geography data type. Note that we transform to our geometry to geography
(before you can do that make sure your geometry is in WGS 84 long lat 4326). Geography always measures in meters.
This is just for demonstration to compare. Normally your table will be stored in geography data type already.</para>
<programlisting>
-SELECT ST_Area(the_geog)/POWER(0.3048,2) As sqft_spheroid, ST_Area(the_geog,false)/POWER(0.3048,2) As sqft_sphere, ST_Area(the_geog) As sqm_spheroid
- FROM (SELECT
- geography(
- ST_Transform(
- ST_GeomFromText('POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))',
- 2249
- ) ,4326
- )
- )
- ) As foo(the_geog);
- sqft_spheroid | sqft_sphere | sqm_spheroid
-------------------+------------------+------------------
- 928.684403538925 | 927.049336105925 | 86.2776042893529
+select ST_Area(geog) / 0.3048 ^ 2 sqft_spheroid,
+ ST_Area(geog, false) / 0.3048 ^ 2 sqft_sphere,
+ ST_Area(geog) sqm_spheroid
+from (
+ select ST_Transform(
+ 'SRID=2249;POLYGON((743238 2967416,743238 2967450,743265 2967450,743265.625 2967416,743238 2967416))'::geometry,
+ 4326
+ ) :: geography geog
+ ) as subquery;
+┌──────────────────┬──────────────────┬──────────────────┐
+│ sqft_spheroid │ sqft_sphere │ sqm_spheroid │
+├──────────────────┼──────────────────┼──────────────────┤
+│ 928.684405784452 │ 927.049336105925 │ 86.2776044979692 │
+└──────────────────┴──────────────────┴──────────────────┘
+</programlisting>
- --if your data is in geography already
- SELECT ST_Area(the_geog)/POWER(0.3048,2) As sqft, ST_Area(the_geog) As sqm
- FROM somegeogtable;</programlisting>
+ <para>If your data is in geography already:</para>
+ <programlisting>
+select ST_Area(geog) / 0.3048 ^ 2 sqft,
+ ST_Area(the_geog) sqm
+from somegeogtable;</programlisting>
</refsection>
<refsection>
<title>See Also</title>
- <para><xref linkend="ST_GeomFromText" />, <xref linkend="ST_GeographyFromText" />, <xref linkend="ST_SetSRID" />, <xref linkend="ST_Transform" /></para>
+ <para><xref linkend="ST_3DArea" />, <xref linkend="ST_GeomFromText" />, <xref linkend="ST_GeographyFromText" />, <xref linkend="ST_SetSRID" />, <xref linkend="ST_Transform" /></para>
</refsection>
</refentry>
-- Deprecation in 1.2.3
CREATE OR REPLACE FUNCTION Area(geometry)
RETURNS FLOAT8
- AS 'MODULE_PATHNAME','LWGEOM_area_polygon'
+ AS 'MODULE_PATHNAME','ST_Area'
LANGUAGE 'c' IMMUTABLE STRICT;
-- this is an alias for 'area(geometry)'
-- Deprecation in 1.2.3
CREATE OR REPLACE FUNCTION Area2D(geometry)
RETURNS FLOAT8
- AS 'MODULE_PATHNAME', 'LWGEOM_area_polygon'
+ AS 'MODULE_PATHNAME', 'ST_Area'
LANGUAGE 'c' IMMUTABLE STRICT;
-- Deprecation in 1.2.3
Datum (*intersection_fn) (PG_FUNCTION_ARGS);
Datum (*difference_fn) (PG_FUNCTION_ARGS);
Datum (*union_fn) (PG_FUNCTION_ARGS);
- Datum (*area_fn) (PG_FUNCTION_ARGS);
Datum (*distance_fn) (PG_FUNCTION_ARGS);
Datum (*distance3d_fn) (PG_FUNCTION_ARGS);
};
.intersection_fn = geos_intersection,
.difference_fn = geos_difference,
.union_fn = geos_geomunion,
- .area_fn = LWGEOM_area_polygon,
.distance_fn = LWGEOM_mindistance2d,
.distance3d_fn = LWGEOM_mindistance3d
},
.intersection_fn = sfcgal_intersection,
.difference_fn = sfcgal_difference,
.union_fn = sfcgal_union,
- .area_fn = sfcgal_area,
.distance_fn = sfcgal_distance,
.distance3d_fn = sfcgal_distance3D
}
return (*lwgeom_backend->union_fn)( fcinfo );
}
-PG_FUNCTION_INFO_V1(area);
-Datum area(PG_FUNCTION_ARGS)
-{
- return (*lwgeom_backend->area_fn)( fcinfo );
-}
-
PG_FUNCTION_INFO_V1(distance);
Datum distance(PG_FUNCTION_ARGS)
{
Datum LWGEOM_summary(PG_FUNCTION_ARGS);
Datum LWGEOM_npoints(PG_FUNCTION_ARGS);
Datum LWGEOM_nrings(PG_FUNCTION_ARGS);
-Datum LWGEOM_area_polygon(PG_FUNCTION_ARGS);
+Datum ST_Area(PG_FUNCTION_ARGS);
Datum postgis_uses_stats(PG_FUNCTION_ARGS);
Datum postgis_autocache_bbox(PG_FUNCTION_ARGS);
Datum postgis_scripts_released(PG_FUNCTION_ARGS);
* area (line) = 0
* area(polygon) = find its 2d area
*/
-PG_FUNCTION_INFO_V1(LWGEOM_area_polygon);
-Datum LWGEOM_area_polygon(PG_FUNCTION_ARGS)
+PG_FUNCTION_INFO_V1(ST_Area);
+Datum ST_Area(PG_FUNCTION_ARGS)
{
GSERIALIZED *geom = PG_GETARG_GSERIALIZED_P(0);
LWGEOM *lwgeom = lwgeom_from_gserialized(geom);
double area = 0.0;
- POSTGIS_DEBUG(2, "in LWGEOM_area_polygon");
-
area = lwgeom_area(lwgeom);
lwgeom_free(lwgeom);
Datum sfcgal_from_ewkt(PG_FUNCTION_ARGS);
Datum sfcgal_distance(PG_FUNCTION_ARGS);
Datum sfcgal_distance3D(PG_FUNCTION_ARGS);
-Datum sfcgal_area(PG_FUNCTION_ARGS);
Datum sfcgal_area3D(PG_FUNCTION_ARGS);
Datum sfcgal_intersects(PG_FUNCTION_ARGS);
Datum sfcgal_intersects3D(PG_FUNCTION_ARGS);
}
-PG_FUNCTION_INFO_V1(sfcgal_area);
-Datum sfcgal_area(PG_FUNCTION_ARGS)
- {
- GSERIALIZED *input;
- sfcgal_geometry_t *geom;
- double result;
-
- sfcgal_postgis_init();
-
- input = PG_GETARG_GSERIALIZED_P(0);
- geom = POSTGIS2SFCGALGeometry(input);
-
- result = sfcgal_geometry_area(geom);
- sfcgal_geometry_delete(geom);
-
- PG_FREE_IF_COPY(input, 0);
-
- PG_RETURN_FLOAT8(result);
-}
-
-
PG_FUNCTION_INFO_V1(sfcgal_area3D);
Datum sfcgal_area3D(PG_FUNCTION_ARGS)
{
Datum sfcgal_union(PG_FUNCTION_ARGS);
Datum sfcgal_volume(PG_FUNCTION_ARGS);
Datum sfcgal_triangulate(PG_FUNCTION_ARGS);
-Datum sfcgal_area(PG_FUNCTION_ARGS);
Datum sfcgal_distance(PG_FUNCTION_ARGS);
Datum sfcgal_distance3D(PG_FUNCTION_ARGS);
Datum sfcgal_make_solid(PG_FUNCTION_ARGS);
-- Availability: 1.2.2
-- Deprecation in 1.3.4
-CREATE OR REPLACE FUNCTION ST_area2d(geometry)
+CREATE OR REPLACE FUNCTION ST_Area2D(geometry)
RETURNS FLOAT8
- AS 'MODULE_PATHNAME', 'LWGEOM_area_polygon'
+ AS 'MODULE_PATHNAME', 'ST_Area'
LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL
COST 10;
-- PostGIS equivalent function: area(geometry)
CREATE OR REPLACE FUNCTION ST_Area(geometry)
RETURNS FLOAT8
- AS 'MODULE_PATHNAME','area'
+ AS 'MODULE_PATHNAME','ST_Area'
LANGUAGE 'c' IMMUTABLE STRICT _PARALLEL
COST 10;
POSTGIS_DEPRECATE("2.5.0", pgis_abs_in);
POSTGIS_DEPRECATE("2.5.0", pgis_abs_out);
+POSTGIS_DEPRECATE("3.0.0", area);
+POSTGIS_DEPRECATE("3.0.0", LWGEOM_area_polygon);