PostGIS  2.3.8dev-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 995 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().

996 {
997  const POINT2D *P1;
998  const POINT2D *P2;
999  const POINT2D *P3;
1000  double sum = 0.0;
1001  double x0, x, y1, y2;
1002  int i;
1003
1004  if (! pa || pa->npoints < 3 )
1005  return 0.0;
1006
1007  P1 = getPoint2d_cp(pa, 0);
1008  P2 = getPoint2d_cp(pa, 1);
1009  x0 = P1->x;
1010  for ( i = 2; i < pa->npoints; i++ )
1011  {
1012  P3 = getPoint2d_cp(pa, i);
1013  x = P2->x - x0;
1014  y1 = P3->y;
1015  y2 = P1->y;
1016  sum += x * (y2-y1);
1017
1018  /* Move forwards! */
1019  P1 = P2;
1020  P2 = P3;
1021  }
1022  return sum / 2.0;
1023 }
int npoints
Definition: liblwgeom.h:370
double x
Definition: liblwgeom.h:327
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:485
double y
Definition: liblwgeom.h:327
Here is the call graph for this function:
Here is the caller graph for this function: