PostGIS  2.5.0beta2dev-r@@SVN_REVISION@@

◆ ptarray_area_sphere()

double ptarray_area_sphere ( const POINTARRAY pa)

Returns the area of the ring (ring must be closed) in square radians (surface of the sphere is 4*PI).

Definition at line 1720 of file lwgeodetic.c.

References area(), geographic_point_init(), getPoint2d_cp(), POINTARRAY::npoints, sphere_signed_area(), POINT2D::x, and POINT2D::y.

Referenced by lwgeom_area_sphere().

1721 {
1722  uint32_t i;
1723  const POINT2D *p;
1724  GEOGRAPHIC_POINT a, b, c;
1725  double area = 0.0;
1726 
1727  /* Return zero on nonsensical inputs */
1728  if ( ! pa || pa->npoints < 4 )
1729  return 0.0;
1730 
1731  p = getPoint2d_cp(pa, 0);
1732  geographic_point_init(p->x, p->y, &a);
1733  p = getPoint2d_cp(pa, 1);
1734  geographic_point_init(p->x, p->y, &b);
1735 
1736  for ( i = 2; i < pa->npoints-1; i++ )
1737  {
1738  p = getPoint2d_cp(pa, i);
1739  geographic_point_init(p->x, p->y, &c);
1740  area += sphere_signed_area(&a, &b, &c);
1741  b = c;
1742  }
1743 
1744  return fabs(area);
1745 }
Datum area(PG_FUNCTION_ARGS)
Point in spherical coordinates on the world.
Definition: lwgeodetic.h:47
unsigned int uint32_t
Definition: uthash.h:78
double x
Definition: liblwgeom.h:330
double y
Definition: liblwgeom.h:330
void geographic_point_init(double lon, double lat, GEOGRAPHIC_POINT *g)
Initialize a geographic point.
Definition: lwgeodetic.c:171
static double sphere_signed_area(const GEOGRAPHIC_POINT *a, const GEOGRAPHIC_POINT *b, const GEOGRAPHIC_POINT *c)
Computes the spherical area of a triangle.
Definition: lwgeodetic.c:710
const POINT2D * getPoint2d_cp(const POINTARRAY *pa, uint32_t n)
Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, suitable for reading from...
Definition: lwgeom_api.c:364
uint32_t npoints
Definition: liblwgeom.h:373
Here is the call graph for this function:
Here is the caller graph for this function: