PostGIS  3.0.0dev-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 984 of file ptarray.c.

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

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

985 {
986  const POINT2D *P1;
987  const POINT2D *P2;
988  const POINT2D *P3;
989  double sum = 0.0;
990  double x0, x, y1, y2;
991  uint32_t i;
992 
993  if (! pa || pa->npoints < 3 )
994  return 0.0;
995 
996  P1 = getPoint2d_cp(pa, 0);
997  P2 = getPoint2d_cp(pa, 1);
998  x0 = P1->x;
999  for ( i = 2; i < pa->npoints; i++ )
1000  {
1001  P3 = getPoint2d_cp(pa, i);
1002  x = P2->x - x0;
1003  y1 = P3->y;
1004  y2 = P1->y;
1005  sum += x * (y2-y1);
1006 
1007  /* Move forwards! */
1008  P1 = P2;
1009  P2 = P3;
1010  }
1011  return sum / 2.0;
1012 }
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
unsigned int uint32_t
Definition: uthash.h:78
double x
Definition: liblwgeom.h:330
double y
Definition: liblwgeom.h:330
uint32_t npoints
Definition: liblwgeom.h:373
Here is the call graph for this function:
Here is the caller graph for this function: