ST_Area documentation states that "area is determined on a spheroid with units in square meters" when using geography as argument, or when setting the 2nd parameter as "true".

Usually when calculating areas we can reproject a geometry to an "Albers Equal Area", and these projections may have different source latitude and longitude depending on the region we are working. For instance +proj=aea +lat_1=-2 +lat_2=-22 +lat_0=-12 +lon_0=-54 +x_0=5000000 +y_0=10000000 +ellps=GRS80 +units=m +no_def.

On the other hand ST_Area does not state any source lat or lon or skews. Are those values dynamic? Or are they "borrowed" from the projection of the geometry? (in case, for srid 4326 would be lat=0 lon=0 x=0 y=0)

  • "On a spheroid" means the slightly flattened ball that is used to model the World when geography data type is used info.crunchydata.com/blog/postgis-and-the-geography-type.
    – user30184
    Nov 13 '20 at 19:25
  • the sphere(oid) approximation is stated on the +ellps parameter, there are a couple of spheroid models.
    – wkrueger
    Nov 13 '20 at 19:35
  • 1
    As far as I know for PostGIS the spheroid in ST_Area, ST_Distance etc means always WGS 84 ellipsoid. Thus the distances and areas are along the WGS 84 ellipsoid, between the points which are re-projected into WGS 84 coordinates from the source data.
    – user30184
    Nov 13 '20 at 20:57

ST_Area uses the spheroid (an ellipsoid) that is defined by the SRID, or the WGS84 ellipsoid if the geography value has no SRID.

There is no skew because there is no reprojection to a flat surface; the area is computed directly on the 3D surface of the ellipsoid. You get a different result only if you use a different ellipsoid:

INSERT INTO spatial_ref_sys (srid, auth_name, auth_srid, proj4text, srtext)
VALUES ( 912345, 'Antoine de Saint-Exupéry', 912345,
         '+proj=longlat +a=1.75 +b=1.75 +no_defs',
         'GEOGCS["B-612",DATUM["B-612",SPHEROID["B-612",1.75,0.0]],PRIMEM["The Rose",0],UNIT["Decimal_Degree",0.0174532925199433]]');

SELECT ST_Area('SRID=4326;POLYGON((0 0,90 0,0 90,0 0))'::geography, true);

SELECT ST_Area('SRID=912345;POLYGON((0 0,90 0,0 90,0 0))'::geography, true);

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.