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: