PostGIS 3.0.6dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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 1807 of file lwgeodetic.c.

1808{
1809 uint32_t i;
1810 const POINT2D *p;
1811 GEOGRAPHIC_POINT a, b, c;
1812 double area = 0.0;
1813
1814 /* Return zero on nonsensical inputs */
1815 if ( ! pa || pa->npoints < 4 )
1816 return 0.0;
1817
1818 p = getPoint2d_cp(pa, 0);
1819 geographic_point_init(p->x, p->y, &a);
1820 p = getPoint2d_cp(pa, 1);
1821 geographic_point_init(p->x, p->y, &b);
1822
1823 for ( i = 2; i < pa->npoints-1; i++ )
1824 {
1825 p = getPoint2d_cp(pa, i);
1826 geographic_point_init(p->x, p->y, &c);
1827 area += sphere_signed_area(&a, &b, &c);
1828 b = c;
1829 }
1830
1831 return fabs(area);
1832}
void geographic_point_init(double lon, double lat, GEOGRAPHIC_POINT *g)
Initialize a geographic point.
Definition lwgeodetic.c:180
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:741
static const POINT2D * getPoint2d_cp(const POINTARRAY *pa, uint32_t n)
Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, suitable for reading from.
Definition lwinline.h:91
Point in spherical coordinates on the world.
Definition lwgeodetic.h:54
double y
Definition liblwgeom.h:376
double x
Definition liblwgeom.h:376
uint32_t npoints
Definition liblwgeom.h:413

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

Referenced by lwgeom_area_sphere().

Here is the call graph for this function:
Here is the caller graph for this function: