PostGIS  2.4.9dev-r@@SVN_REVISION@@

◆ ptarray_signed_area()

double ptarray_signed_area ( const POINTARRAY pa)

Returns the area in cartesian units.

Area is negative if ring is oriented CCW, positive if it is oriented CW and zero if the ring is degenerate or flat. http://en.wikipedia.org/wiki/Shoelace_formula

Definition at line 998 of file ptarray.c.

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

Referenced by lwpoly_area(), ptarray_isccw(), and test_ptarray_signed_area().

999 {
1000  const POINT2D *P1;
1001  const POINT2D *P2;
1002  const POINT2D *P3;
1003  double sum = 0.0;
1004  double x0, x, y1, y2;
1005  int i;
1006 
1007  if (! pa || pa->npoints < 3 )
1008  return 0.0;
1009 
1010  P1 = getPoint2d_cp(pa, 0);
1011  P2 = getPoint2d_cp(pa, 1);
1012  x0 = P1->x;
1013  for ( i = 2; i < pa->npoints; i++ )
1014  {
1015  P3 = getPoint2d_cp(pa, i);
1016  x = P2->x - x0;
1017  y1 = P3->y;
1018  y2 = P1->y;
1019  sum += x * (y2-y1);
1020 
1021  /* Move forwards! */
1022  P1 = P2;
1023  P2 = P3;
1024  }
1025  return sum / 2.0;
1026 }
int npoints
Definition: liblwgeom.h:371
double x
Definition: liblwgeom.h:328
const POINT2D * getPoint2d_cp(const POINTARRAY *pa, int n)
Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, suitable for reading from...
Definition: lwgeom_api.c:373
double y
Definition: liblwgeom.h:328
Here is the call graph for this function:
Here is the caller graph for this function: